Moje pytanie jest w zasadzie takie samo, jak zezwalaj tylko na określony ruch wychodzący na niektórych interfejsach .
Mam dwa interfejsy eth1
(10.0.0.2) i wlan0
(192.168.0.2). Moja domyślna trasa to eth1
. Powiedzmy, że chcę przejść przez cały ruch https wlan0
. Teraz, jeśli użyję rozwiązania sugerowanego w drugim pytaniu, ruch https przejdzie wlan0
, ale nadal będzie miał adres źródłowy eth1
(10.0.0.2). Ponieważ ten adres nie jest dostępny dla wlan0
bramy, odpowiedzi nigdy nie wrócą. Najłatwiejszym sposobem byłoby prawidłowe ustawienie add-binda w aplikacji, ale w tym przypadku nie ma to zastosowania.
Myślę, że muszę przepisać 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
Teraz tcpdump widzi, że wychodzące pakiety są w porządku, a pakiety przychodzące docierają do 192.168.0.2, jednak prawdopodobnie nigdy nie kończą się w aplikacji, ponieważ wszystko, co kiedykolwiek widzę, to to, że aplikacja wysyła ponownie pakiet SYN, chociaż SYN- ACK zostało już odebrane.
Pomyślałem więc, że może też muszę przepisać adres przychodzący:
iptables -A PREROUTING -t nat -i wlan0 -p tcp --sport 443 -j DNAT --to 10.0.0.2
ale to też nie działało. Więc utknąłem tutaj. Jakieś sugestie?