La mia domanda è sostanzialmente la stessa di Consentire solo un certo traffico in uscita su determinate interfacce .
Ho due interfacce eth1(10.0.0.2) e wlan0(192.168.0.2). Il mio percorso predefinito è per eth1. Diciamo che voglio che tutto il traffico https passi wlan0. Ora, se utilizzo la soluzione suggerita nell'altra domanda, il traffico https passerà wlan0, ma avrà comunque l'indirizzo di origine di eth1(10.0.0.2). Poiché questo indirizzo non è instradabile per il wlan0gateway, le risposte non torneranno mai più. Il modo più semplice sarebbe semplicemente impostare correttamente il bind-addr nell'applicazione, ma in questo caso non è applicabile.
Immagino di dover riscrivere 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
Ora tcpdump vede bene i pacchetti in uscita e i pacchetti in arrivo arrivano per 192.168.0.2, tuttavia probabilmente non finiscono mai nell'applicazione, perché tutto ciò che vedo è che l'applicazione sta rinviando il pacchetto SYN, sebbene SYN- ACK era già stato ricevuto.
Quindi ho pensato che forse avrei bisogno di riscrivere anche l'indirizzo in arrivo:
iptables -A PREROUTING -t nat -i wlan0 -p tcp --sport 443 -j DNAT --to 10.0.0.2
ma neanche quello ha funzionato. Quindi sono un po 'bloccato qui. Eventuali suggerimenti?