我的问题与“ 仅允许某些接口上的某些出站流量”基本相同。
我有两个接口eth1
(10.0.0.2)和wlan0
(192.168.0.2)。我的默认路线是eth1
。假设我希望所有https-traffic通过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
但这也不起作用。所以我有点卡在这里。有什么建议么?