Более новая версия ядра Linux больше не может маршрутизировать мост - PullRequest
0 голосов
/ 18 декабря 2018

Постановка проблемы

У меня есть мост с именем cni0, который подключен к контейнерам в их собственных сетевых пространствах имен.

Когда я пытаюсь создать статический маршрутк одному из этих контейнеров более старые версии ядра Linux будут маршрутизировать и соединять трафик с этим контейнером (протестировано с помощью ping и tcpdump).Более новые версии этого не делают.

Действия по воспроизведению

У меня есть мостовой интерфейс на cni0, который прослушивает 10.5.2.19 внутри сетевого пространства имен.Тот же интерфейс также прослушивает 10.233.1.18.У меня также есть внешний интерфейс eth1, на котором ничего нет или адрес не связан.У cni0 есть адрес 10.233.64.1/24 с обычным локальным маршрутом и маршрутом 10.233.64.0/24, указывающим на него.

В пространстве имен хоста я создаю маршрут следующим образом: ip route add 10.5.2.19 via 10.233.1.18

Я могу пропинговать 10.5.2.19 из пространства имен хоста, и пакеты прибывают в пространство имен сети на всех версиях ядра, которые я тестировал.

Используя статический ARP, я не могу пропинговать с удаленного хоста на некоторых более новых версияхядро.ICMP-пакеты поступают по интерфейсу eth1 и затем никуда не идут.Там нет ни капли на счетчиках, которые я смог найти.Я не вижу выдачи ARP, пытающихся найти 10.5.2.19, что происходит, если я пытаюсь перенаправить на обычный интерфейс, такой как eth3.

У меня все интерфейсы установлены с rp_filter=0, log_martians=1 и accept_local=1.(а также all и default) Марсиане не зарегистрированы.

Я проверил, и в ebtables и iptables нет ничего, что могло бы помешать.ip route show table 0 | grep 10.5.2.19 показывает только маршрут, который я добавил выше.

Рабочие и нерабочие версии ядра

Версия ядра, которая работает: 3.10.0-862.14.4.el7.x86_64 # Centos 7.5.1804

предыдущие версии в этой строке ядер также работают.

Версия ядра, которая не работает:
3.10.0-957.1.3.el7.x86.64 #CENTOS 7.6.1810

Также не работает: 4.11.x из линии Fedora, протестированной как не работающая

(Учитывая, как RedHat Cherrypicks меня не удивит, если они недавно вернули что-то из 4.x).

Так что повторить мой вопрос : Почему маршрутизация к мосту использовалась, и больше не работает на более новых версиях ядра?Это потому, что это не поддерживается в Linux, и мне просто повезло раньше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...