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 wlan0
gateway, 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?