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

      Hypervisor host 1              |            Hypervisor host 2
                                     |
------------------                   |
| VM             |                   |
| 10.244.140.10  |                   |
| GW 10.244.140.1|                   |    Route to 10.244.8.0/24 
------------------                   |    goes through br1
        |                            |
 /--------------\ /-------------\    |   /-------------\  /--------------\
 |     br0      | |     br1     |    |   |     br1     |  |     br0      |
 |10.244.140.254| | 10.244.8.21 |    |   | 10.244.8.1  |  | 10.244.140.1 |
 |              | | ....        |    |   | 10.244.8.33 |  |              |
 \--------------/ \-------------/    |   \-------------/  \--------------/
        |                |           |         |                 |
       eth0             eth1------------------eth1              eth0
        |                            |                           |
        \--------------------------------------------------------/

Два хоста с виртуальными машинами. Определено несколько подсетей: 10.244.140.0/24 на мостах br0 , 10.244.8.0/24 на мостах br1 . Мосты br1 имеют несколько IP-адресов. Нет правил сетевого фильтра. Политики Netfilter ПРИНИМАЮТСЯ. ip_forward установлен.

ВМ подключена к br0 на хосте 1. Он пингует 10.244.8.21, адрес, который находится в другой подсети, но находится на том же хосте 1. Шлюз по умолчанию для виртуальной машины 10.244.140.1 и находится на хосте 2.

Мое наивное ожидание: пакет эхо-запроса отправляется br0 на host2, так как br0 имеет адрес шлюза. Затем пакет направляется на br1 и обратно на host1.

Реальность: пакет приходит, как и ожидалось. Однако это не маршрутизируется. С другой стороны, пакеты, отправленные на 10.244.8.33, прибывают в br1 на хосте 2, и эхо-ответы возвращаются.

Где я не прав? И что еще более важно: как я могу это исправить?

Хосты гипервизора работают с OpenSuse Leaf 15 и KVM.

РЕДАКТИРОВАТЬ: Поскольку у меня недостаточно репутации, чтобы добавлять комментарии, я поставил ответы на вопрос. Спасибо за вашу заботу.

Клык: ваш пакет прибывает "как ожидалось", он прошел границы подсети и, таким образом, был маршрутизирован. Извините, мое описание было неполным. Он прибывает в br0 на хосте 2 в той же подсети и далее не маршрутизируется.

Grawity: Думаю, на твой первый вопрос уже есть ответ. Какой MAC-адрес назначения имеет пакет, когда он пересекает br0 на host1? MAC-адрес маршрутизатора, то есть MAC-адрес br0 на хосте 2. Он знает это из-за ARP, на который он получает ответ.

1 ответ1

0

Фильтрация по обратному пути.

Я знал, что это существует, но я не связывал свою проблему. RPF ограничивает ответные пакеты для отправки через принимающий интерфейс. в моем случае ответы будут проходить через другой интерфейс и поэтому будут заблокированы.

Решение состоит в том, чтобы отключить фильтрацию обратного пути на обоих хостах гипервизора, например

# sysctl net.ipv4.conf.all.rp_filter=0

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

Для получения дополнительной информации см. rp_filter на странице документации ядра для параметров сети.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .