Рейтинг:1

Пакет NAT отправляется не на тот шлюз

флаг us
Psi

У меня есть два интерфейса, скажем eth0 и eth0.4000 как влан. У обоих есть шлюз по умолчанию. Все работает так, как ожидалось, когда процесс напрямую слушает интерфейс.

Но не для hostPort привязки Kubernetes.

vlan.gw-mac > eth0-mac, ethertype 802.1Q (0x8100), длина 78: vlan 4000, p 0, ethertype IPv4 (0x0800), clientIP.38712 > vlanIP.80: Flags [S]
eth0-mac > eth0.gw-mac, ethertype IPv4 (0x0800), длина 74: vlanIP.80 > clientIP.38712: Флаги [S.]

SYN происходит от vlan.шлюз, перенаправляется в Контейнер, но ответ SYN-ACK покидает стек через eth0.gw и не правильный vlan.gw но tcpdump показывает, что sourceIP vlanIP.

Таблицы маршрутизации выглядят хорошо:

# ip маршрут к <clientIP> от <vlanIP> dev eth0.4000
<clientIP> из <vlanIP> через <vlan.gw> dev eth0.4000 table 1 uid 0

Отображение hostPort создается через Карта порта CNI-плагина который использует DNAT и SNAT (подробности связаны). Таким образом, поиск шлюза происходит слишком рано. Когда я вручную добавляю маршрут из container-ip в таблицу поиска 1, он работает с использованием интерфейса vlan, но ломает eth0.

Так вот вопросы - что надо сделать чтобы маршрутизация происходила после NAT заменил ip-контейнера на ip-интерфейс?

Рейтинг:2
флаг de

Вы правы в том, что неявный SNAT из DNAT происходит слишком поздно: в этот момент решение о маршрутизации уже принято, поэтому правильный IP-адрес источника используется на неправильном интерфейсе.

Чтобы избежать этого, вам нужно более подробно изучить маршрутизацию на основе политик. Техника, описанная в https://superuser.com/questions/638044/source-based-policy-routing-nat-dnat-snat-aka-multi-wans-on-centos-5 может быть использован.

Для этого вам нужно иметь в своей цепочке PREROUTING в таблице mangle:

-A PREROUTING -i vlanIface -m состояние --state НОВОЕ,СВЯЗАННОЕ,УСТАНОВЛЕНО -d <vlanIP> -j CONNMARK --set-mark 0x10/0x10
-A PREROUTING -m connmark --mark 0x10/0x10 -j CONNMARK --restore-mark --cfmask 0x10

Таким образом, все пакеты, принадлежащие соединениям, которые были инициированы через vlanIface, будут иметь значение 0x10, установленное в их fwmark. Затем это можно использовать для PBR. Предполагая, что ваша сеть pod — 10.0.0.0/8, а таблица для вашего вторичного шлюза — 1:

ip rule add fwmark 0x10/0x10 из таблицы 10.0.0.0/8 1

Возможно, вы сможете оставить из 10.0.0.0/8, но это полезная защита от неправильно установленных fwmarks (например, из-за того, что конкретная метка используется другими вещами).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.