Roteamento baseado na conexão
Tenho um servidor Linux (Conectiva 10) com três placas de rede da seguinte forma:
eth0 - 10.0.0.1 - Rede Local
eth1 - a.b.c.d - Link 1 de Internet
eth2 - x.y.z.w - Link 2 de Internet
O gateway padrão é pela eth1 (Link1 de Internet).
Surgiu a necessidade de redirecionar uma porta para um computador interno. Foi usado o comando (iptables -t nat -A PREROUTING -p tcp --dport 3389 -j DNAT 10.0.0.5:3389).
Isso funciona perfeitamente bem quando a conexão chega pelo Link1 (rota default).
Porém, quando a conexão chega pelo Link2 não funciona. Identifiquei que o redirecionamento ocorre normalmente, mas as resposta do computador interno volta pelo Link1 (rota default).
Já tentei usar marcação de pacotes (iptables e iproute), mas infelizmente não obtive êxito.
Se souber algo, sou muito grato.
Re: Roteamento baseado na conexão
Cara vc pode tentar essa regra:
iptables -t nat -A PREROUTING -i etho -p tcp --dport 8080 -j DNAT --to-dest 192.168.0.2
iptables -A FORWARD -p tcp -i eth0 --dport 8080 -d 192.168.0.2 -j ACCEPT
Se nao funcionar existe outra regra que vc coloca primeiro o ip real e depois o mascarado nao lembro agora como e mas vou procurar!!!
Roteamento baseado na conexão
Consegui resolver usando iptables e iproute2. A solução final ficou assim:
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 3389 -i eth2 -j MARK --set-mark 21
iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 3389 -j DNAT --to-destination 10.0.0.5:3389
iptables -t nat -A POSTROUTING -o eth0 -m mark --mark 21 -j SNAT --to-source x.y.z.w
iptables -t mangle -A PREROUTING -p tcp -m tcp -d x.y.z.w -i eth0 -j MARK --set-mark 2
ip rule add pref 21 fwmark 2 table 21
ip route add default via <Gateway do x.y.z.w> table 21