iptables encaminhamento através de interfaces virtuais

1

Estou tentando configurar meu computador como um gateway entre duas redes, mas não consigo fazê-lo funcionar por alguns motivos

Aqui está uma representação da rede:

 192.168.1.101  192.168.1.102  192.168.1.103 ...
        |            |              |
        \------------+------+-------+--------...
                            |
                      192.168.1.200 (eth1)
                           PC
(192.168.2.101  192.168.2.102  192.168.2.103 ...)
     eth0:1        eth0:2         eth0:3
        |            |              |
        \------------+------+-------+--------...
                            |
                      192.168.2.200 (eth0)
                            |
                           ...

Meu computador possui N interfaces virtuais (eth0: *) com seus próprios endereços IP na interface 192.168.2.200 (eth0). Eu quero que qualquer conexão (TCP principalmente) que ataca as interfaces eth0: * seja encaminhada para o servidor 192.168.1.1 equivalente.

Eu tentei usar o redirecionamento executável, mas como os servidores usam números de porta aleatórios para ouvir (não posso mudar isso) tive que reiniciar os processos toda vez que fiz alguns testes.

Então usei regras do iptables como estas (para apenas um servidor para testes):

iptables -t nat -A PREROUTING -d 192.168.2.101 -j DNAT --to-destination 192.168.1.101
iptables -t nat -A POSTROUTING -d 192.168.1.101 -j SNAT --to-source 192.168.2.101
iptables -A FORWARD -i 192.168.2.101 -d 192.168.1.101 -j ACCEPT

Mas qualquer conexão para 192.168.2.101:80 retorna "Conexão recusada" enquanto qualquer conexão com 192.168.1.101:80 é aceita.

Então eu "joguei" com as regras do iptables sem redefinir as regras e consegui me conectar ao 192.168.2.101:80 que era o servidor correto; mas quando tentei outra conexão (com um servidor web temporário no TCP / 6666), a conexão foi rejeitada como acima.

Você tem um exemplo completo para fazê-lo funcionar, por favor?

Nota: Eu removi todas as entradas no iptables para fazer outros testes, então eu reiniciei do zero sem o que eu fiz antes ...

@lain: habilitei o encaminhamento de IP

$ cat /proc/sys/net/ipv4/ip_forward
1
    
por Zaghp 25.03.2014 / 15:47

1 resposta

1

iptables tem uma correspondência que combina com você: chama-se NETMAP .

iptables -t nat -A PREROUTING -i eth0 --src 192.168.2.200/?? -j NETMAP --to 192.168.1.0/??
iptables -t nat -A PREROUTING -i eth1 --src 192.168.1.200/?? -j NETMAP --to 192.168.2.0/??

Quanto aos aliases de interface, abandone-os. Os aliases de interface não são apenas obsoletos (se você usar ip addr , verá que o kernel os mapeou para sua funcionalidade nativa de ter vários endereços por interface), mas parece um exagero aqui, já que nenhum serviço local os utiliza.

Se você hospedar este servidor para responder solicitações ARP para esses ip em eth0, use o recurso de proxy ARP ou adicione uma rota local informando ao kernel que todos esses IPs são seus próprios:

ip route add local 192.168.2.200/?? dev eth0
    
por 25.03.2014 / 17:27