Por que o gateway não pode redirecionar de volta com o iptables DNAT?

1

UPDATE : Isso aconteceu ao usar contêineres docker dentro da rede. Não tenho certeza se isso importa, mas pode estar afetando a topologia de alguma forma ...

Estou lutando para entender um comportamento que não consigo explicar em uma rede de exemplo. Basicamente eu quero ser capaz de mudar alguns dos meus servidores, redirecionando para um servidor diferente (para que eu possa apontar meus aplicativos para algum servidor de banco de dados por exemplo e, em seguida, mude as conexões de banco de dados para outro servidor sem alterar os aplicativos). Eu provavelmente vou usar algo como o rinetd para isso, mas estou curioso para saber porque algumas regras do iptables não estão funcionando como eu esperaria.

A rede de amostra tinha 3 servidores: gw (192.168.0.1/24), s1 (192.168.0.2/24) e s2 (192.168.0.3/24). gw é o gateway padrão para s1 e s2. Então eu configurei no PREROUTING do gw na tabela nat para redirecionar o tráfego para 192.168.1.1:5432 (que está fora da rede principal, o que significa que ele vai para o gateway) para s2: 5432 (192.168.0.2). O endereço 192.168.1.1 não precisa existir, pode ser qualquer endereço fora da rede interna roteada (192.168.0.0/24).

Agora, eu entendo por que não consigo acessar 192.168.1.1:5432 do gateway gw, já que o tráfego não passa pelo NAT PREROUTING (onde o DNAT acontece) e sei como tornar isso possível adicionando uma regra DNAT para a cadeia OUTPUT de nat e uma regra SNAT para POSTROUTING. Como esperado, apontar para 192.168.1.1:5432 redirecionará para 192.168.0.2:5432 quando acessado de s1. Agora, o que eu não entendo é porque a conexão não é aceita ou recusada quando eu tento conectar a 192.168.1.1:5432 de s2. Eu acho que a conexão deve ser redirecionada de volta para s2 (192.168.0.2).

Realizar SNAT ou MASQUERADE no POSTROUTING de nat não faz diferença nos meus testes. Por que o redirecionamento não funciona com o iptables?

UPDATE : Eu procurei por alguma ajuda no canal #Netfilter na Freenode e isso deve funcionar como confirmado por "evilman_work" quando replicado em um ambiente de laboratório. Além disso, percebemos que ele funcionava no meu servidor também se a interface fosse colocada em modo promíscuo. Nós não fomos capazes de descobrir o motivo para isso, então se você tem alguma idéia eu adoraria ouvi-los. Isso não é um grande problema porque esse era um ambiente de teste usando o Docker, enquanto o host era o gateway. Eu quero usar isso em VMs reais, então eu suspeito que não vou ter problemas nesse cenário. Talvez isso tenha sido causado por algo relacionado ao Docker ...

    
por rosenfeld 17.08.2016 / 14:36

0 respostas