Мой вопрос в основном такой же, как Разрешить только определенный исходящий трафик на определенных интерфейсах .
У меня есть два интерфейса eth1
(10.0.0.2) и wlan0
(192.168.0.2). Мой маршрут по умолчанию для eth1
. Допустим, я хочу, чтобы весь https-трафик проходил wlan0
. Теперь, если я использую решение, предложенное в другом вопросе, трафик https будет проходить wlan0
, но все равно будет иметь адрес источника eth1
(10.0.0.2). Поскольку этот адрес не маршрутизируется для wlan0
шлюза, ответы никогда не будут возвращаться. Самый простой способ - просто правильно установить bind-addr в приложении, но в этом случае это не применимо.
Я думаю, мне нужно переписать 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
Теперь tcpdump видит исходящие пакеты просто замечательно, и входящие пакеты прибывают для 192.168.0.2, однако они, вероятно, никогда не окажутся в приложении, потому что все, что я когда-либо получаю, это то, что приложение повторно отправляет SYN-пакет, хотя SYN- ACK уже был получен.
Вот я и подумал, может мне тоже нужно переписать входящий адрес:
iptables -A PREROUTING -t nat -i wlan0 -p tcp --sport 443 -j DNAT --to 10.0.0.2
но это тоже не сработало. Так что я застрял здесь. Какие-либо предложения?