Рейтинг:0

Мост Linux не отвечает на запросы ARP после добавления правила ip

флаг cn

У меня есть виртуальная машина, созданная с помощью libvirt/qemu/kvm, подключенная с помощью TAP к мосту Linux (virbr1). Внутренне виртуальная машина имеет IP-адрес 10.99.0.9. И имеет следующую настройку маршрутизации.

по умолчанию через 10.99.0.1 dev enp1s0 proto static onlink 
10.99.0.1 через 10.99.0.1 dev enp1s0 proto static onlink 

Здесь 10.99.0.1 — это IP-адрес моста.

Я хотел, чтобы весь трафик, исходящий от этой виртуальной машины, направлялся на VPN-маршрут (wg0), который я настроил, поэтому на хосте я сделал

ip route добавить по умолчанию dev wg0 таблица 42
ip правило добавить из 10.99.0.9 таблица 42

Это работало нормально, но я заметил, что внутри виртуальной машины я все еще мог пинговать IP-адрес хост-машины. 192.168.2.1. В конце концов я понял, что это потому, что искать местный ip rule имеет предпочтение 0, что выше, чем у правила, которое я добавил. Я думал, что просто поменяю местами, и все будет хорошо.

ip rule add preference 300 lookup local # 300 здесь сколь угодно больше 0
IP-правило предпочтения 0
ip правило добавить из 10.99.0.9 таблица 42 предпочтение 0

Однако после этого у меня больше нет возможности подключения к виртуальной машине. Если я обнюхиваю мост Linux, я вижу, что он постоянно отправляет запрос ARP в поисках того, кто 10.99.0.1 , и ответа не последовало. Я не думал, что эти решения о маршрутизации вообще должны влиять на ARP, поскольку он действует вместе с IP, поэтому это запутано. Я подтвердил, что именно эти строки вызывают проблему

Почему ответы ARP не возвращаются к интерфейсу виртуальной машины?

флаг ph
Не совсем уверен, но я думаю, вам может понадобиться включить неразборчивый режим
Рейтинг:1
флаг it

У меня сложилось впечатление, что ваш ответ содержится в вашем вопросе.

Вы изменили предпочтение локального IP-правила с 0 на 300, поэтому маршрут по умолчанию стал наиболее предпочтительным:

ip route добавить по умолчанию dev wg0 таблица 42
ip правило добавить из 10.99.0.9 таблица 42
#И наконец:
ip правило добавить из 10.99.0.9 таблица 42 предпочтение 0

из-за чего ядро ​​предпочитало исключительно этот маршрут.

ты сказал: «Я вижу, что он постоянно отправляет запрос ARP в поисках того, у кого есть 10.99.0.1, и ответа не последовало».

что разумно, так как широковещательные сообщения ARP идут в WG0 интерфейс, где нет устройства 10.99.0.1 IP-адрес (я предполагаю).

решение ?

Мой совет - не заморачиваться с приоритетом маршрута и если нужно - файрволить не требующийся для ВМ доступ по iptables.

флаг cn
У меня сложилось впечатление, что пакеты /IP/, поступающие с 10.99.0.9, будут перенаправляться на интерфейс wg, однако сообщение ARP не является IP-пакетом. Я не думал, что правила ip вообще что-то сделают, пока не начнут летать настоящие IP-пакеты, что происходит только тогда, когда интерфейс внутри виртуальной машины также знает, какой MAC-адрес отправлять свои пакеты. Разве это не правильно?
Roman Spiak avatar
флаг it
внимательно изучив https://en.wikipedia.org/wiki/Address_Resolution_Protocol#Packet_structure, вы правильно предполагаете, что ARP работает на уровне 2 OSI, а IP-маршруты - на уровне 3, поэтому IP-маршрутизация не влияет на ARP.Однако, пожалуйста, внимательно посмотрите, что делает эта команда: `ip route add default dev wg0 table 42`, прослушивая мост до и после применения этого, поскольку я подозреваю, что это может также мешать уровню 2...
Tom Yan avatar
флаг in
Я думаю, что локальные маршруты определяют, следует ли отвечать на запрос ARP, например, если система настроена на игнорирование всех своих локальных маршрутов, она не будет отвечать на запросы ARP. (Чтобы узнать подробности, возможно, придется проверить код ядра; просто обратите внимание, что приоритет 0 является совершенно особенным. Возможно, он не будет проверять локальную таблицу, если нет правила с приоритетом 0, которое ее ищет.)

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

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