Linux VRF-с – нет ответа на пинг

Вопрос или проблема

Я пытаюсь наладить работу VRF в Linux.

Предыстория: Я ознакомился с множеством документов по настройке VRF-lite в ядре Linux и у меня есть простая просьба к VRF – вернуть мне ping 🙂

Я прочитал все эти документы:

  1. https://docs.kernel.org/networking/vrf.html
  2. https://alexkaouris.medium.com/vrfs-quick-intro-f0f7191779d2
  3. https://netplan.readthedocs.io/en/0.106.1/netplan-yaml/#properties-for-device-type-vrfs
  4. https://www.dasblinkenlichten.com/working-with-linux-vrfs/
  5. https://interpip.es/linux/creating-a-vrf-and-running-services-inside-it-on-linux/
  6. https://docs.frrouting.org/en/stable-9.1/zebra.html#virtual-routing-and-forwarding
  7. https://people.kernel.org/dsahern/management-vrf-and-dns
  8. https://jerryxiao.cc/archives/1004
  9. https://stbuehler.de/blog/article/2020/02/29/using_vrf__virtual_routing_and_forwarding__on_linux.html
  10. https://docs.nvidia.com/networking-ethernet-software/cumulus-linux-59/Layer-3/VRFs/Virtual-Routing-and-Forwarding-VRF/#frrouting-in-a-vrf
  11. https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/assembly_starting-a-service-within-an-isolated-vrf-network_configuring-and-managing-networking#proc_configuring-a-vrf-device_assembly_starting-a-service-within-an-isolated-vrf-network
  12. https://www.linkedin.com/pulse/running-vrf-linux-gerardo-marciales

Но ни один из них не описывает простую ситуацию с пингом.


Конфигурация:

Ubuntu 24.04 VM

# конфигурация netplan
root@as-test-ubuntu:~# netplan get
network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      match:
        macaddress: "fa:16:3e:d6:d5:0c"
      addresses:
      - "192.168.40.15/21"
      dhcp4: false
      set-name: "ens3"
    ens4:
      match:
        macaddress: "fa:16:3e:ef:59:e7"
      addresses:
      - "192.168.2.60/24"
      dhcp4: false
      set-name: "ens4"
  vrfs:
    vrf-mgmt:
      interfaces:
      - ens3
      routes:
      - to: "default"
        via: "192.168.40.1"
      table: 1

Логи tcpdump на интерфейсе VRF

root@as-test-ubuntu:~# tcpdump -npe -i vrf-mgmt
tcpdump: подробный вывод подавлен, используйте -v[v]... для полного декодирования протокола
прослушивание на vrf-mgmt, тип канала EN10MB (Ethernet), длина снимка 262144 байт
13:03:23.373513 00:09:0f:09:01:1b > fa:16:3e:d6:d5:0c, ethertype IPv4 (0x0800), длина 98: 10.192.10.82 > 192.168.40.15: ICMP эхо-запрос, id 44994, seq 560, длина 64
13:03:23.373559 42:b6:48:39:49:0f > 42:b6:48:39:49:0f, ethertype IPv4 (0x0800), длина 98: 192.168.40.15 > 10.192.10.82: ICMP эхо-ответ, id 44994, seq 560, длина 64
13:03:24.397483 00:09:0f:09:01:1b > fa:16:3e:d6:d5:0c, ethertype IPv4 (0x0800), длина 98: 10.192.10.82 > 192.168.40.15: ICMP эхо-запрос, id 44994, seq 561, длина 64
13:03:24.397535 42:b6:48:39:49:0f > 42:b6:48:39:49:0f, ethertype IPv4 (0x0800), длина 98: 192.168.40.15 > 10.192.10.82: ICMP эхо-ответ, id 44994, seq 561, длина 64
13:03:25.421560 00:09:0f:09:01:1b > fa:16:3e:d6:d5:0c, ethertype IPv4 (0x0800), длина 98: 10.192.10.82 > 192.168.40.15: ICMP эхо-запрос, id 44994, seq 562, длина 64
13:03:25.421607 42:b6:48:39:49:0f > 42:b6:48:39:49:0f, ethertype IPv4 (0x0800), длина 98: 192.168.40.15 > 10.192.10.82: ICMP эхо-ответ, id 44994, seq 562, длина 64
13:03:26.445783 00:09:0f:09:01:1b > fa:16:3e:d6:d5:0c, ethertype IPv4 (0x0800), длина 98: 10.192.10.82 > 192.168.40.15: ICMP эхо-запрос, id 44994, seq 563, длина 64
13:03:26.445834 42:b6:48:39:49:0f > 42:b6:48:39:49:0f, ethertype IPv4 (0x0800), длина 98: 192.168.40.15 > 10.192.10.82: ICMP эхо-ответ, id 44994, seq 563, длина 64

Логи tcpdump на нижнем Ethernet-интерфейсе

root@as-test-ubuntu:~# tcpdump -npe -i ens3
tcpdump: подробный вывод подавлен, используйте -v[v]... для полного декодирования протокола
прослушивание на ens3, тип канала EN10MB (Ethernet), длина снимка 262144 байт
13:04:44.269975 00:09:0f:09:01:1b > fa:16:3e:d6:d5:0c, ethertype IPv4 (0x0800), длина 98: 10.192.10.82 > 192.168.40.15: ICMP эхо-запрос, id 44994, seq 639, длина 64
13:04:45.293675 00:09:0f:09:01:1b > fa:16:3e:d6:d5:0c, ethertype IPv4 (0x0800), длина 98: 10.192.10.82 > 192.168.40.15: ICMP эхо-запрос, id 44994, seq 640, длина 64
13:04:46.317790 00:09:0f:09:01:1b > fa:16:3e:d6:d5:0c, ethertype IPv4 (0x0800), длина 98: 10.192.10.82 > 192.168.40.15: ICMP эхо-запрос, id 44994, seq 641, длина 64
13:04:47.341587 00:09:0f:09:01:1b > fa:16:3e:d6:d5:0c, ethertype IPv4 (0x0800), длина 98: 10.192.10.82 > 192.168.40.15: ICMP эхо-запрос, id 44994, seq 642, длина 64
13:04:48.299941 00:09:0f:09:01:1b > fa:16:3e:d6:d5:0c, ethertype ARP (0x0806), длина 56: Запрос who-has 192.168.40.15 tell 192.168.40.1, длина 42
13:04:48.299972 fa:16:3e:d6:d5:0c > 00:09:0f:09:01:1b, ethertype ARP (0x0806), длина 42: Ответ 192.168.40.15 is-at fa:16:3e:d6:d5:0c, длина 28
13:04:48.365754 00:09:0f:09:01:1b > fa:16:3e:d6:d5:0c, ethertype IPv4 (0x0800), длина 98: 10.192.10.82 > 192.168.40.15: ICMP эхо-запрос, id 44994, seq 643, длина 64
13:04:49.391177 00:09:0f:09:01:1b > fa:16:3e:d6:d5:0c, ethertype IPv4 (0x0800), длина 98: 10.192.10.82 > 192.168.40.15: ICMP эхо-запрос, id 44994, seq 644, длина 64
13:04:50.414066 00:09:0f:09:01:1b > fa:16:3e:d6:d5:0c, ethertype IPv4 (0x0800), длина 98: 10.192.10.82 > 192.168.40.15: ICMP эхо-запрос, id 44994, seq 645, длина 64
13:04:51.438125 00:09:0f:09:01:1b > fa:16:3e:d6:d5:0c, ethertype IPv4 (0x0800), длина 98: 10.192.10.82 > 192.168.40.15: ICMP эхо-запрос, id 44994, seq 646, длина 64
13:04:52.463347 00:09:0f:09:01:1b > fa:16:3e:d6:d5:0c, ethertype IPv4 (0x0800), длина 98: 10.192.10.82 > 192.168.40.15: ICMP эхо-запрос, id 44994, seq 647, длина 64

Как видно, пакеты застревают где-то между VRF и нижним Ethernet.

Я не нашел решения этой проблемы.

Ответ или решение

Проблема с отсутствующими ответами на ICMP-запросы (ping) в вашей конфигурации VRF может быть связана с несколькими аспектами настройки сети в Linux, включая маршрутизацию, правила iptables, или настройки самой VRF. Давайте рассмотрим все шаги, которые могут помочь исправить ситуацию.

1. Проверка конфигурации VRF

Судя по предоставленной вами конфигурации netplan, у вас есть VRF vrf-mgmt, которая привязана к интерфейсу ens3. Убедитесь, что маршрут по умолчанию для VRF настроен правильно и что сеть, к которой вы пытались подключиться, доступна через этот маршрут.

Проверьте маршруты:

ip route show table 1

Убедитесь, что маршрут по умолчанию (default) правильно указывает на IP-адрес вашего шлюза (192.168.40.1).

2. Проверка iptables

Проблемы с блокировкой ICMP могут возникать из-за настроек iptables. Вы можете временно отключить iptables, чтобы проверить, является ли оно причиной проблемы:

iptables -L -n -v

Если правило блокировки есть, вы можете временно отключить iptables командой:

iptables -F

После тестирования, не забудьте вернуть правила обратно.

3. Убедитесь, что интерфейсы VRF активированы

Проверьте состояние интерфейсов в вашей VRF:

ip link show

Интерфейс vrf-mgmt должен быть активен (UP). Если он неактивен, вы можете активировать его:

ip link set dev vrf-mgmt up

4. Проверка ARP и настройка interfaces

Иногда проблемы могут быть связаны с неправильным разрешением ARP. Убедитесь, что ваш сервер правильно разрешает ARP для интерфейсов VRF и что никакие конфликты IP не происходят. Вы можете проверить ARP-таблицу с помощью команды:

arp -n

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

5. Пинг с VRF

Для тестирования вы можете попробовать выполнить ping через конкретную таблицу, используя ip:

ip -4 -o route get 192.168.40.15 dev vrf-mgmt
ping -I vrf-mgmt 192.168.40.15

6. Логи протоколов

Проверьте системные логи на наличие ошибок, связанных с сетью:

journalctl -u systemd-networkd

7. Используйте tcpdump для отладки

Вы уже использовали tcpdump, и это хорошо. Обратите внимание, что на интерфейсе vrf-mgmt вы должны видеть входящие и исходящие пакеты ICMP. Если вы видите исходящий ICMP, но не получаете ответ, это указывает на проблемы с маршрутизацией или фильтрацией трафика.

8. Перезапустите сетевые службы

После внесения изменений в конфигурацию не забудьте перезапустить сетевые службы:

netplan apply

или, если вы используете systemd-networkd:

systemctl restart systemd-networkd

Заключение

Если после всех проведенных действий ping все равно не работает, рекомендуется проверить наличие обновлений для вашей системы и напрямую обратиться к документации Ubuntu по сетевым интерфейсам и VRF. Важно убедиться, что ваша версия ядра поддерживает все необходимые функции для корректной работы VRF.

Надеюсь, это поможет вам решить проблему. Если вопросы останутся, пожалуйста, дайте знать!

Оцените материал
Добавить комментарий

Капча загружается...