Como encaminhar tráfego usando regras iptables?

3

Sou novo no iptables e tenho feito pesquisas no Google por alguns dias sem encontrar uma boa solução para esse problema.

Eu tenho o computador A com um endereço IP público (digamos 192.0.2.1) que pode acessar a Internet sem restrições. Eu tenho outro computador B com um endereço IP privado (192.168.1.1) que só pode acessar o computador A. Como eu uso o iptables para encaminhar o tráfego de rede de B a A para a Internet? Eu preciso usar http, ftp e https para usar o apt-get com o sudo.

Ambos os computadores executam o Ubuntu Linux. Eu tentei usar o Squid, mas acho que é complicado demais para o que preciso fazer.

    
por ProbablePattern 11.06.2014 / 15:19

5 respostas

1

Acho que isso vai fazer o que você quer, assumindo que a rede é assim:
Internet < ---- > Computador A < ---- > Computador B

Notas: <external interface> é a interface (como eth0 , p1p1 , etc) que está conectada à Internet no Computador A . <internal interface> é a interface no Computador A que está conectado ao Computador B .

Estes comandos precisam ser executados como root (em su - ) no Computador A (aquele com acesso à Internet).

EXT=<external interface>
INT=<internal interface>
echo 1 > /proc/sys/net/ipv4/ip_forward #Tell the system it is OK to forward IP packets
iptables -t nat -A POSTROUTING -o $EXT -j MASQUERADE
iptables -A FORWARD -i $EXT -o $INT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $INT -o $EXT -j ACCEPT
ip addr show $INT

Na saída do comando ip addr , localize a linha que começa com inet (ou inet6 se você estiver usando o IPv6). Use o endereço IP nessa linha no seguinte comando, como root, em Computador B :

ip route add default via <put ComputerA's internal IP address here>

Agora, veja se funciona executando ping google.com em Computador B , ou simplesmente tentando carregar uma página da Web no navegador.

Se você quiser salvar as alterações em Computador A , execute estes comandos como root:

apt-get install iptables-persistent
/etc/init.d/iptables-persistent save

Agora eu não sei exatamente como restaurar as regras salvas na inicialização, alguém mais pode sugerir algo? Deve funcionar para fazer /etc/init.d/iptables-persistent reload (como root) toda vez que você inicializar, mas isso seria uma dor.

Para fazer Computador B sempre usar Computador A como o gateway padrão exigiria a instalação do DHCP em Computador A , o que eu não quero para entrar nessa resposta.

    
por 12.06.2014 / 03:15
0

Eu usei o squid para fazer isso, é um poderoso bicho complicado, mas o Squid é realmente para cache. Então você estaria usando o host1 como um host proxy de armazenamento em cache e, embora pudesse usar isso, perderia o ponto. Eu fiz o que você está tentando fazer antes com IPTABLES (de volta logo após o ipchains!). IIRC envolveu escrever uma regra para encaminhar o pacote correspondente para a outra rota. Muita informação aqui (se o link acima não tiver informações enuf).

link

Eu não acredito que usar uma VPN é uma solução simples, mas deixa de lado o que você está tentando fazer, então faça da maneira correta primeiro. A VPN é boa para criptografar o tráfego para outro host.

    
por 11.06.2014 / 17:22
0

Atuar como um gateway entre endereços IP privados e endereços IP públicos exige que você faça Tradução de Endereço de Rede (NAT). Há muitos tutoriais on-line sobre como usar o iptables para fazer o NAT, com ou sem o iproute2 (que é outro pacote de software comum do Linux que pode fazer o NAT).

    
por 12.06.2014 / 00:00
0

Now I don't know exactly how to restore the saved rules on boot, can anybody else suggest something? It should work to do /etc/init.d/iptables-persistent reload (as root) every time after you boot, but that would be a pain.

adicione as alterações em /etc/rc.local ou similar

To make Computer B always use Computer A as the default gateway would require installing DHCP on Computer A, which I don't want to go into in this answer.

Defina os endereços estaticamente

    
por 16.06.2014 / 13:31
-2

Tente isso

link

Ou use o modo "simples" e use uma VPN.

    
por 11.06.2014 / 15:55