Пакеты netfilter Iptables с политикой маршрутизации

У меня есть вопросы о порядке событий в конвейере маршрутизации /iptables. Сначала я объясню свою настройку. Вопросы в конце этого поста.

Я использую политику маршрутизации и iptables в Linux 4.4.

У меня есть два интерфейса: wan0 (к моему провайдеру) и vpn-crypto (устройство настройки к провайдеру vpn)

Я хочу, чтобы выборочно направить некоторый трафик в VPN, все остальное через wan0

Я реализую политику маршрутизации следующим образом:

  • В таблице ВЫХОДА mangle я установил отметку 0xC для НОВОГО трафика, который соответствует некоторому шаблону. Для целей тестирования я отмечаю трафик, направленный на определенный IP-адрес (37.9.239.33). Конечно, у меня есть и другие вещи iptables, такие как MASQUEARADE, но это не имеет отношения к этому вопросу.

    У меня есть правило iproute2, которое отправляет все "помеченные" пакеты в vpn:

    0: from all lookup local 190: from all fwmark 0x4/0x4 lookup vpn 400: from all fwmark 0x8/0x8 oif wan0 unreachable 32766: from all lookup main 32767: from all lookup default

    Таблица vpn содержит только одно правило и отправляет все через vpn:

    default via 10.33.0.1 dev vpn-crypto proto static src 10.33.148.125

Я тестирую с помощью команды ping -c3 37.9.239.33 где 37.9.239.33 - IP-адрес, помеченный для vpn. Два сеанса tcpdump, подключенные к wan0 и vpn-crypto, показывают, что пакет эффективно выходит и возвращается через vpn-crypto, как и ожидалось! Пока все хорошо, все работает.

Однако я наблюдаю странное поведение, которое я не понимаю, когда протоколируемые пакеты проходят через iptables: я вставляю журнальные трассировки в таблицу FILTER.OUTPUT и в таблицу MANGLE.POSTROUTING.

Я наблюдаю эту последовательность событий:

FILTER.OUTPUT: IN= OUT=wan0 SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=26960 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=1 MARK=0xc MANGLE.POSTROUTING: IN= OUT=vpn-crypto SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=26960 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=1 MARK=0xc MANGLE.POSTROUTING: IN= OUT=wan0 SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27049 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=2 FILTER.OUTPUT: IN= OUT=wan0 SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27100 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=2 MARK=0xc MANGLE.POSTROUTING: IN= OUT=vpn-crypto SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27100 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=2 MARK=0xc MANGLE.POSTROUTING: IN= OUT=wan0 SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27193 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=3 FILTER.OUTPUT: IN= OUT=wan0 SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27237 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=3 MARK=0xc MANGLE.POSTROUTING: IN= OUT=vpn-crypto SRC=59.189.21.112 DST=37.9.239.33 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=27237 DF PROTO=ICMP TYPE=8 CODE=0 ID=9649 SEQ=3 MARK=0xc

  1. Я ожидаю, что решение о перенаправлении из-за отметки в MANGLE.OUTPUT произойдет до FILTER.OUTPUT, но, похоже, оно произойдет после! Фактически, все пакеты FILTER.OUTPUT все еще маршрутизируются через wan0, указывая, что решение о перенаправлении еще не было принято. Документация, доступная в Интернете, разделена на 50/50 по этому вопросу. Например:

    Какой из двух является правильным? Может кто-то пролить свет на это?

  2. В контексте 3 пингов, в таблице MANGLE.POSTROUTING я вижу 2 неожиданных пакета, маршрутизируемых через wan0, которые "не помечены " и кажутся дубликатами тех, которые маршрутизируются через vpn-crypto. Почему это? Также, согласно tcpdump, эти пакеты никогда не попадают в интерфейс (что правильно).

    Может кто-то пролить свет на это поведение?

0 ответов

Другие вопросы по тегам