У меня есть 3 интерфейса (2 wan, 1 локальный) и включена пересылка, но только один входящий интерфейс (ppp0) может попасть в локальный пункт назначения, следующая моя команда iptable:
iptables -t nat -A PREROUTING -i ppp0 -p tcp -m multiport --destination-ports 80,443 -j DNAT --to 10.66.66.253
iptables -t nat -A PREROUTING -i eth1 -p tcp -m multiport --destination-ports 80,443 -j DNAT --to 10.66.66.253
############
Как я могу позволить eth1 входить в пункт назначения?
Вот мои правила IP и rt_tables:
root@net:~# ip rule
0: from all lookup local
32762: from all fwmark 0x2 lookup int0.out
32763: from all fwmark 0x1 lookup ext0.out
32764: from all to 61.x.x.x lookup ext0.out
32765: from 61.x.x.x lookup ext0.out
32766: from all lookup main
32767: from all lookup default
root@net:~# ip route show table int0.out
default via 168.x.x.254 dev ppp0
10.66.66.0/24 dev eth2 scope link src 10.66.66.254
root@net:~# ip route show table ext0.out
default via 61.x.x.254 dev eth1
10.66.66.0/24 dev eth2 scope link src 10.66.66.254
Что я упустил (-понял)?
Спасибо за любую помощь!
Вы должны использовать цель connmark в своем наборе правил брандмауэра, чтобы ответы проходили через тот же интерфейс, через который были получены исходные пакеты. В вашей текущей конфигурации, даже если пакеты были получены на eth1
interface и DNAT, ответы направляются по маршруту по умолчанию, потому что метка брандмауэра не была установлена.
Я вижу, вы создали дополнительные правила маршрутизации по меткам межсетевого экрана. Итак, воспользуемся этим:
# set mark of the original redirected packets
iptables -t mangle -A PREROUTING -i eth1 -j MARK --set-mark 0x1
iptables -t mangle -A PREROUTING -i ppp0 -j MARK --set-mark 0x2
# save the firewall mark inside the conntrack entry (once for new connection)
iptables -t mangle -A POSTROUTING \
-o eth2 -m conntrack --ctstate NEW \
-j CONNMARK --save-mark
# for replies restore the firewall mark from conntrack entry
# to route replies through right interface
iptables -t mangle -A PREROUTING -i eth2 \
-j CONNMARK --restore-mark
Вы можете улучшить эти правила с помощью дополнительных совпадений. Также вы можете даже избежать CONNMARK и использовать только -m conntrack --ctstate DNAT --ctdir REPLY --ctorigdst ...
соответствие.
Также проверьте фильтр rp и установите его в loose
режим с sysctl
.
Для устранения проблем проверьте счетчики правил (iptables-save -c
команда), вывести список conntrack table (conntrack -L
command) и запустите tcpdump.