Se eu configurar uma caixa linux como um roteador atrás de um gateway DSL, preciso ativar o mascaramento ou o SNAT?
Logicamente, eu diria que tudo que preciso fazer é ativar o ip_forwarding (concluído), mas o tráfego para a Internet é interrompido se eu não executar qualquer NAT.
A configuração é a seguinte (desculpas pelo diagrama)
Internet --- [ppp0_DSL router_eth0] ---- 192.168.1.x ----- [eth0_ubunturouter_eth1] ------ 192.168.2.x
Se o NAT estiver rodando no roteador de banda larga, então eu também precisaria dele rodando no roteador ubuntu?
Abaixo está a configuração do iptables do roteador ubuntu ...
# Generated by iptables-save v1.4.21 on Thu Oct 29 12:48:19 2015
*nat
:PREROUTING ACCEPT [10859:2328892]
:INPUT ACCEPT [1002:126271]
:OUTPUT ACCEPT [1256:91484]
:POSTROUTING ACCEPT [638:43890]
COMMIT
# Completed on Thu Oct 29 12:48:19 2015
# Generated by iptables-save v1.4.21 on Thu Oct 29 12:48:19 2015
*filter
:INPUT ACCEPT [5:803]
:FORWARD ACCEPT [127:18532]
:OUTPUT ACCEPT [5:431]
# INPUT to allow ssh and ping from internal network
-A INPUT -i eth1 -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT -m comment --comment "ssh on eth1"
-A INPUT -p icmp -j ACCEPT -m comment --comment "allow ping from internal"
-P INPUT DROP
# god table to handle traffic forwarding and test icmp
-N god
-A god -d 8.8.4.4 -j REJECT
-A god -d 8.8.8.8 -j DROP
# forward configured to explicitly route between interfaces - this could be redundant
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j ACCEPT
-A FORWARD -p tcp -j ACCEPT -m comment --comment "all tcp"
-A FORWARD -p udp -j ACCEPT -m comment --comment "all udp"
-A FORWARD -p icmp -j god -m comment --comment "all icmp"
-A FORWARD -i eth0 -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-P FORWARD DROP
# output to allow web traffic and icmp from router
-A OUTPUT -o eth1 -p tcp -m tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-P OUTPUT DROP
COMMIT
# Completed on Thu Oct 29 12:48:19 2015
Essa configuração continua matando a Internet, mas sempre funciona se eu incluir
-A POSTROUTING -o eth0 -j SNAT --to 192.168.1.1
Mas por quê ??? Por que essa caixa funciona apenas com o SNAT, o que não é necessário porque já está no roteador DSL?
Como visto nos comentários, Radhil e MichaelB estão corretos. Estou deixando de levar em conta a falta de roteamento no roteador de banda larga para algo diferente de uma sub-rede (192.168.1.0 neste caso). Infelizmente, esse roteador de banda larga em particular não oferece meios de adicionar rotas estáticas adicionais, portanto, minha solução para habilitar o roteamento baseado em origem da sub-rede interna nesta instância é usar as tabelas PREROUTING para encadear o tráfego.
por exemplo
A PREROUTING -i eth1 -m mac --mac-source xx:xx:xx:xx:xx:xx -j DNAT --to 192.168.2.200
então
-A FORWARD -s 192.168.2.200 -j DROP
Esta é obviamente uma péssima solução (feita desta maneira, pois o IPTABLES não permite que um DROP fique dentro das tabelas PREOUTING / POSTROUTING, mas eu acabei de incluí-lo como um exemplo de ser capaz de rotear baseado na fonte dentro dessas circunstâncias difíceis. .