Minha regra de redirecionamento do iptables não afeta

2

Aqui está minha topologia de rede, 101.101.101.101 e 202.202.202.202 são IP global, enquanto 10.0.1.1 e 10.0.1.251 são IPs locais. O host B é meu computador.

EupossoSSHparaoroteadoredepoisSSHparaoHostAnoroteador.AgoraqueroSSHparaAdiretamenteconfigurandooiptablesnoroteador,como:encaminhartodosospacotescomohostdedestino101.101.101.101eaporta25122para10.0.1.251:22.

Astrêsinstruçõesaseguirsãoaplicadas:

iptables-tnat-APREROUTING-d101.101.101.101-ptcp-mtcp--dport25122-jDNAT--to-destination10.0.1.251:22iptables-tnat-APOSTROUTING-obr-lan-jSNAT--to-source10.0.1.1iptables-tnat-APOSTROUTING-oeth0.2-jSNAT--to-source101.101.101.101

Depoisdeexecutados,elessãomostradosnalistadeiptables-tnat-v-n-L.Asregrasderotanoroteadorassim:

#route-nDestinationGatewayGenmaskFlagsMetricRefUseIface0.0.0.0101.101.101.2540.0.0.0UG000eth0.210.0.1.00.0.0.0255.255.255.0U000br-lan

Depoisdetudoisso,noentanto,aindanãoconsigoSSHparaApor"ssh 101.101.101.101 25122" em B. Ele simplesmente falha com:

Could not connect to '101.101.101.101' (port 25122): Connection failed.
  1. A situação é que as ferramentas do tcpdump não podem ser instaladas no roteador para ver o status dos pacotes lá. Mas eu posso rodar o tcpdump no Host A e confirmar que nenhum pacote é encaminhado pelo roteador.

  2. No roteador,

    #cat /proc/sys/net/ipv4/ip_forward
    1
    

que mostra que o encaminhamento está ativado.

  1. Ao executar iptables -t nat -v -n -L cada vez que eu fiz o ssh em B, eu posso ver os pacotes do PREROUTING das mudanças do roteador.

    Chain PREROUTING (policy ACCEPT 39526 packets, 3345K bytes)
    pkts bytes target     prot opt in     out     source               destination
    14   712 DNAT       tcp  --  *      *       0.0.0.0/0            115.156.132.118     tcp dpt:25122 to:10.0.1.251:22
    

O primeiro número (14) aumenta toda vez que eu executo o ssh na porta 25122 no host B. Isso indica que os pacotes chegaram ao roteador mas não foram encaminhados?

  1. Eu corro iptables -v -n -L e descubro que a política padrão da cadeia FORWARD é DROP enquanto as cadeias INPUT e OUTPUT são ACCEPT. Em seguida, defino a cadeia FORWARD para aceitar usando iptables --policy FORWARD ACCEPT . No entanto, o ssh ainda falha como acima.

Então, aqui estou eu. Isso pode ser um problema do limite rígido do roteador, ou configurações erradas do iptables. Se é o último, como devo configurá-lo para atingir meu objetivo?

Muito obrigado por qualquer pista.

    
por Akr 18.07.2017 / 16:26

1 resposta

0

Basicamente, você precisa simplificar as coisas primeiro e tentar orientação de que você tem certeza. E bom senso. Eu posso simpatizar muito com as perguntas do iptables , pois uma vez eu passei 3 dias trabalhando nisso e os conceitos rapidamente ficam confusos, a menos que você tenha uma configuração que funcione bem.

Para que o ssh funcione, você só precisa disso se a política padrão for ACCEPT:

iptables -t nat -A PREROUTING -d 101.101.101.101 -p tcp --dport 25122 -j DNAT --to-destination 10.0.1.251:22

No entanto, nas regras do servidor, prefiro distinguir os objetos não pelo endereço IP, mas pelo nome da interface. Digamos que a interface externa seja eth4 e a interface voltada para sua rede seja eth1 , então isso deve funcionar e ser suficiente:

iptables -t nat -I PREROUTING -p tcp -i eth4 --dport 25122 -j DNAT --to-destination 10.0.1.251:22
iptables -A FORWARD -i eth4 -o eth1 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth4 -p tcp -j ACCEPT

As últimas duas regras são necessárias no caso de a política de cadeia FORWARD ser algo diferente de ACCEPT.

Você pode listar interfaces da seguinte forma: ip addr list .

Antes de decidir se as alterações não funcionam, lembre-se de restaurar o firewall para o estado padrão desejado antes de aplicar as alterações críticas. Por exemplo, liberar correntes e reiniciar o serviço iptable. E você já ativou o encaminhamento no kernel.

Boa sorte!

    
por 20.07.2017 / 10:55