faz IPTABLES como um roteador sempre requer masquerade / SNAT?

2

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?

                • ATUALIZADO - - - - - - -

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. .

    
por TemperedGlass 01.11.2015 / 15:55

2 respostas

2

O roteador DSL está executando seu próprio NAT em 192.168.1.0, correto? Essa é a rede que está pronta para distribuir.

Portanto, a resposta seria que ele não conhece qualquer coisa sobre nenhuma rede 192.168.2.0 e, portanto, não tenta ativá-la. Ele pode encaminhar esse tráfego para a Internet, mas a Internet descartará esses IPs privados imediatamente. Provavelmente também não tem informações de roteamento para voltar através de sua caixa para seu segundo segmento de rede, então você não teria nenhum caminho de retorno, a menos que você configurasse isso como uma rota estática em algum lugar e não apontasse. p>

Então você precisa dar ao roteador DSL algo que ele está esperando. Ou encontre uma maneira de alterar as configurações nele para os dois segmentos do NAT e uma rota estática para o seu Ubuntu para 192.168.2.0, ou configure o NAT no seu como você encontrou.

    
por 01.11.2015 / 16:38
1

Isso ocorre porque o modem DSL não sabe sobre a rede 192.168.2. *, quando o roteador recebe um pacote de 192.168.2.x, presume que deve responder através do gateway padrão, porque não tem rota para essa sub-rede.

Se o seu roteador DSL for capaz de ser configurado com uma rota estática, isso o consertará; caso contrário, você precisará configurar o NAT no roteador, para que todo o tráfego que o roteador enxergue tenha origem no roteador local. rede (na medida em que o roteador DSL vê)

    
por 01.11.2015 / 16:37