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?
fonte
src
opção aosip route
comandos para especificar o endereço de origem correto.POSTROUTING
SNAT
vai cuidar disso.a solução de bahamat está correta; no entanto, observe que a única maneira de fazer esse trabalho foi desabilitar o rp_filter para todas as interfaces do sistema, não apenas as duas (eth1 e wlan0, neste caso) envolvidas no NAT.
(consulte a observação IMPORTANTE no final desta página: Howto de roteamento avançado - o link publicado não existe mais, mas eu o encontrei na máquina de wayback)
fonte
Uma sugestão: você deve sempre usar em
--sport
vez de--dport
na cadeia de saída.Os NATs mudam
dport
e isso tornará sua regra inaceitável.fonte
Eu acho que abaixo é necessário:
fonte