Configuração Linux nat / iptables para uma cadeia de links peer-to-peer

2

Eu tenho uma configuração experimental de 4 máquinas Linux (CentOS):

Todas as 4 máquinas são conectadas internamente usando redes diferentes e podem executar ping em cada uma das interfaces conectadas diretamente. No entanto, apenas o PC4 tem acesso à internet.

Estou tentando configurar regras do iptables que podem permitir que o PC1 acesse a Internet via PC4, mas não tenho idéia de como fazer isso.

Eu tentei adicionar NAT na interface de saída no PC2, PC3 e PC4:

iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

No entanto, isso não funciona, você pode me dar uma idéia de como em tal configuração eu posso fazer o acesso PC1 10.0.0.1 rede?

    
por johny 14.02.2013 / 17:46

1 resposta

2

Primeiro, cada PC precisa usar o próximo como porta de entrada para os intertubes:

PC1# ip route add default via 1.1.1.2 # PC2's address where it can join PC1
PC2# ip route add default via 2.1.1.2 # PC3's address where it can join PC2
PC3# ip route add default via 3.1.1.2 # PC4's address where it can join PC3

E como é uma rota padrão, isso significa que agora cada computador pode acessar o próximo. Então, agora, todo o PC pode (teoricamente, se rp_filter¹ não estiver habilitado) enviar pacotes para o próximo e para a internet. No entanto, não há caminho de retorno.

Para isso, cada PC precisa ser capaz de acessar todos os anteriores não conectados diretamente.

PC1 não tem um anterior, então não há problema. PC2 está diretamente conectado ao PC1, então ainda não há problema. Para PC3, ele precisa rotear para PC1 via PC2:

PC3# ip route add 1.1.1.1/? via 2.1.1.1 # PC1's network via PC2
# Fill the '?' according to PC1's network mask. it should include 1.1.1.2.

Agora, o PC3 e o PC1 devem poder efetuar o ping uns aos outros. Caso contrário, verifique se o PC2 tem o encaminhamento ativado (sysctl -w net.ipv4.eth? .Forwarding = 1 para ambas as interfaces). Certifique-se de que todo o seu PC tenha esta opção definida, exceto no PC1, onde é inútil.

Agora, o PC4 precisa de uma rota para PC2 e PC1 via PC3.

PC4# ip route add 1.1.1.1/? via 3.1.1.1 # PC1's network via PC3
PC4# ip route add 2.1.1.1/? via 3.1.1.1 # PC2's network via PC3

Agora, todo o seu PC deve poder fazer o ping uns aos outros. Caso contrário, verifique sua configuração novamente e verifique se o encaminhamento está ativado.

Agora, conectar-se à internet deve funcionar. se o PC4 precisar do NAT para acessar a Internet, configure um NAT no PC4, sem tocar nas tabelas de roteamento.

¹ rp_filter é uma opção geralmente útil, mas torna o teste mais complicado: verifica se o caminho inverso está correto antes de aceitar um pacote. Se um pacote é recebido da eth0 do ip 1.1.1.1, então ele verifica que 1.1.1.1 é roteado via eth0. Se não for o caso, ele rejeita o pacote. Portanto, rp_filter não tolera configurações parcialmente configuradas, mas quando sua configuração estiver completa, rp_filter poderá ser ativado e funcionará bem. rp_filter é ativado por padrão em algumas distribuições do Linux como medida de segurança.

    
por 14.02.2013 / 22:11