Minha pergunta é basicamente a mesma que Permitir apenas determinado tráfego de saída em determinadas interfaces .
Eu tenho duas interfaces eth1
(10.0.0.2) e wlan0
(192.168.0.2). Minha rota padrão é para eth1
. Digamos que eu queira que todo o tráfego https passe wlan0
. Agora, se eu usar a solução sugerida na outra pergunta, o tráfego https passará wlan0
, mas ainda terá o endereço de origem eth1
(10.0.0.2). Como esse endereço não é roteável para o wlan0
gateway, as respostas nunca voltarão. A maneira mais fácil seria simplesmente definir o bind-addr corretamente no aplicativo, mas, neste caso, não é aplicável.
Eu acho que preciso reescrever o src-addr:
# first mark it so that iproute can route it through wlan0
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 443 -j MARK --set-mark 1
# now rewrite the src-addr
iptables -A POSTROUTING -t nat -o wlan0 -p tcp --dport 443 -j SNAT --to 192.168.0.2
Agora, o tcpdump vê os pacotes de saída muito bem e os pacotes de entrada chegam para 192.168.0.2; no entanto, eles provavelmente nunca acabam no aplicativo, porque tudo que eu vejo é que o aplicativo está reenviando o pacote SYN, embora o SYN- ACK já foi recebido.
Então pensei: talvez seja necessário reescrever o endereço de entrada também:
iptables -A PREROUTING -t nat -i wlan0 -p tcp --sport 443 -j DNAT --to 10.0.0.2
mas isso também não funcionou. Então, eu estou meio que preso aqui. Alguma sugestão?