Моє запитання в основному те саме, що дозволяти лише певний вихідний трафік на певних інтерфейсах .
У мене два інтерфейси 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
але і це не спрацювало. Тож я тут якось застряг. Будь-які пропозиції?