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 wlan0bramy, 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?