Мой вопрос в основном такой же, как Разрешить только определенный исходящий трафик на определенных интерфейсах .
У меня есть два интерфейса 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
но это тоже не сработало. Так что я застрял здесь. Какие-либо предложения?
источник
src
опцию вip route
команды, чтобы указать правильный адрес источника.POSTROUTING
SNAT
этом позаботятся.решение багамата правильное; однако, пожалуйста, обратите внимание, что единственный способ сделать это - отключить rp_filter для каждого интерфейса в системе, а не только для двух (в данном случае eth1 и wlan0), участвующих в NATing.
(см. ВАЖНОЕ примечание в конце этой страницы: Advanced Routing Howto - размещенная там ссылка больше не существует, но я нашел ее через механизм обратного хода)
источник
Одно предложение: вы должны всегда использовать
--sport
вместо--dport
в цепочке вывода.NAT изменяет
dport
и это сделает ваше правило невыполнимым.источник
Я думаю, что ниже необходимо:
источник