Рейтинг:0

ip переадресация трафика из внутренней мостовой сети

флаг in

У меня есть следующая настройка сети.

Диаграмма сети

Я использую хост с 2 vms. На каждой виртуальной машине работает Debian с cri-o, запущено несколько контейнеров. Каждый контейнер имеет IP-адрес в подсети 10.200.0.0/24. Один гость использует ips в подсети 10.200.0.0.0/16, а другой использует ips в подсети 10.200.1.0/16.

Хост имеет мостовой интерфейс, бр0. Гостья eth0 интерфейс привязан к бр0 и сетевые карты vms также являются частью этого моста, поэтому им назначаются IP-адреса в подсети моей локальной сети (192.168.1.0/24).

Хост имеет следующие значения sysctl, поэтому iptables не должен влиять на трафик моста.

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

Я хочу, чтобы контейнеры могли соединяться друг с другом (10.200.0.4 в/из 10.200.1.2).Это работает, если я настраиваю пользовательские маршруты для каждого гостя:

# в гостях 01
ip маршрут добавить 10.200.1.0/24 через 192.168.1.243
# в гостях 02
ip маршрут добавить 10.200.0.0/24 через 192.168.1.242

И тогда я могу пинговать другие контейнеры из каждого контейнера, но я не хочу настраивать статические маршруты для каждого гостя, так как мне придется делать это для каждого гостя каждый раз, когда что-то меняется.

Если я удалю эти маршруты и добавлю несколько статических маршрутов на свой хост, я смогу пропинговать все контейнеры с этого хоста:

ip маршрут добавить 10.200.0.0/24 через 192.168.1.242
ip маршрут добавить 10.200.1.0/24 через 192.168.1.243

# таблица маршрутизации гостей остается прежней с маршрутом по умолчанию через br0/eth0

# для 192.168.1.243
по умолчанию через 192.168.1.1 dev enp1s0 
10.200.1.0/24 dev cni0 proto kernel scope link src 10.200.1.1 
192.168.1.0/24 dev enp1s0 прото-область ядра ссылка src 192.168.1.243

Но самое главное, контейнеры не могут добраться друг до друга. Я ожидаю, что трафик будет идти из контейнеров в br0, в eth0, который затем перенаправит этот трафик обратно в br0, в .242 или .243, как настроено с помощью ip маршрут добавить.

С помощью tcpdump я вижу, что трафик достигает br0 и eth0 на хосте, но не перенаправляется обратно на br0, а просто возвращается на мой маршрутизатор, который не знает, как маршрутизировать 10.200.0.0/16. Если я добавлю статический маршрут к своему маршрутизатору, 10.200.0.0/16 через 192.168.103, это действительно работает, так как мой хост (.103) знает, как перенаправить этот трафик на br0 и на .242 или .243 в соответствии с настроенными вручную статическими маршрутами.

Итак, кажется, что трафик правильно маршрутизируется, когда он поступает из-за пределов eth0/br0, но не из гостей. Я понимаю, что мост работает на L2, поэтому трафик нужно куда-то маршрутизировать на L3, но почему он перенаправляется правильно, когда он исходит извне гостей, а не из гостей?

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

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