Мост Ubuntu не получает IP-адрес.

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

Я работаю в виртуальной машине с Ubuntu 24.04.2 LTS, имеющей два физических сетевых интерфейса: enp1s0 и enp6s0. Я хочу создать мост с помощью netplan, который включает только один из этих интерфейсов. Я использую этот netplan:

DEV2=enp6s0
cat <<EOF | sudo tee /etc/netplan/bridge.yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ${DEV2}:
      dhcp4: false
  bridges:
    br0:
      dhcp4: true
      interfaces:
        - ${DEV2}
EOF
sudo chmod og-r /etc/netplan/bridge.yaml
sudo netplan apply

Однако мост никогда не получает IPv4-адрес от DHCP-сервера, как показано с помощью ip a:

2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 56:6f:94:0a:00:0f brd ff:ff:ff:ff:ff:ff
    inet 172.20.28.115/24 metric 100 brd 172.20.28.255 scope global dynamic enp1s0
       valid_lft 7198sec preferred_lft 7198sec
    inet6 fe80::546f:94ff:fe0a:f/64 scope link 
       valid_lft forever preferred_lft forever
3: enp6s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000
    link/ether 56:6f:94:0a:00:00 brd ff:ff:ff:ff:ff:ff
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 46:f8:7f:dc:43:0a brd ff:ff:ff:ff:ff:ff
    inet6 fe80::44f8:7fff:fedc:430a/64 scope link 
       valid_lft forever preferred_lft forever

Если я пытаюсь получить IP-адрес вручную с помощью dhcpcd --debug br0, но получаю только локальный адрес связи (169.254.107.157/16):

dhcpcd-10.0.6 starting
chrooting as dhcpcd to /usr/lib/dhcpcd
sandbox: seccomp
spawned manager process on PID 1830
spawned privileged proxy on PID 1831
spawned network proxy on PID 1832
spawned controller proxy on PID 1833
br0: spawned DHCP6 proxy fe80::44f8:7fff:fedc:430a on PID 1834
br0: executing: /usr/lib/dhcpcd/dhcpcd-run-hooks PREINIT
br0: executing: /usr/lib/dhcpcd/dhcpcd-run-hooks CARRIER
DUID 00:01:00:01:2f:47:11:66:46:f8:7f:dc:43:0a
br0: IAID 7f:dc:43:0a
br0: delaying IPv6 router solicitation for 1.0 seconds
br0: delaying IPv4 for 0.2 seconds
br0: reading lease: /var/lib/dhcpcd/br0.lease
br0: soliciting a DHCP lease
br0: sending DISCOVER (xid 0x7ac5566c), next in 4.4 seconds
br0: spawned BPF BOOTP on PID 1838
br0: soliciting an IPv6 router
br0: sending Router Solicitation
br0: sending DISCOVER (xid 0x7ac5566c), next in 7.3 seconds
br0: process BPF BOOTP already started on pid 1838
br0: sending Router Solicitation
br0: probing for an IPv4LL address
br0: spawned BPF ARP 169.254.107.157 on PID 1839
br0: probing for 169.254.107.157
br0: ARP probing 169.254.107.157 (1 of 3), next in 1.4 seconds
br0: ARP probing 169.254.107.157 (2 of 3), next in 1.1 seconds
br0: ARP probing 169.254.107.157 (3 of 3), next in 2.0 seconds
br0: sending Router Solicitation
br0: using IPv4LL address 169.254.107.157
br0: adding IP address 169.254.107.157/16 broadcast 169.254.255.255
br0: adding route to 169.254.0.0/16
br0: adding default route
br0: ARP announcing 169.254.107.157 (1 of 2), next in 2.0 seconds
br0: executing: /usr/lib/dhcpcd/dhcpcd-run-hooks IPV4LL
Dropped protocol specifier '.ipv4ll' from 'br0.ipv4ll'. Using 'br0' (ifindex=4).
forked to background

Вот журналы из journalctl:

systemd-networkd[895]: br0: netdev ready
systemd-networkd[895]: enp6s0: Reconfiguring with /run/systemd/network/10-netplan-enp6s0.network.
systemd-networkd[895]: enp1s0: Reconfiguring with /run/systemd/network/10-netplan-enp1s0.network.
kernel: br0: port 1(enp6s0) entered blocking state
kernel: br0: port 1(enp6s0) entered disabled state
kernel: virtio_net virtio5 enp6s0: entered allmulticast mode
kernel: virtio_net virtio5 enp6s0: entered promiscuous mode
systemd-networkd[895]: enp1s0: DHCP lease lost
systemd-networkd[895]: enp1s0: DHCPv6 lease lost
systemd-networkd[895]: br0: Configuring with /run/systemd/network/10-netplan-br0.network.
kernel: br0: port 1(enp6s0) entered blocking state
kernel: br0: port 1(enp6s0) entered forwarding state
systemd-networkd[895]: br0: Link UP
systemd-networkd[895]: br0: Gained carrier
systemd-networkd[895]: enp1s0: Configuring with /run/systemd/network/10-netplan-enp1s0.network.
systemd-networkd[895]: enp1s0: DHCPv6 lease lost
systemd-networkd[895]: br0: Configuring with /run/systemd/network/10-netplan-br0.network.
systemd-networkd[895]: br0: DHCPv6 lease lost
systemd-networkd[895]: enp6s0: Configuring with /run/systemd/network/10-netplan-enp6s0.network.
systemd[1]: Starting netplan-ovs-cleanup.service - OpenVSwitch configuration for cleanup...
systemd[1]: netplan-ovs-cleanup.service: Deactivated successfully.
systemd[1]: Finished netplan-ovs-cleanup.service - OpenVSwitch configuration for cleanup.
sudo[2276]: pam_unix(sudo:session): session closed for user root
systemd-networkd[895]: br0: Gained IPv6LL
systemd-networkd[895]: enp1s0: DHCPv4 address 172.20.28.115/24, gateway 172.20.28.1 acquired from 172.20.28.1

Использование Openvswitch, с указанием опции openvswitch: {} в netplan, не дает никаких результатов. Почему br0 не получает IPv4-адрес? Я исследовал разные пути, такие как установка одного и того же MAC-адреса для моста и интерфейса, но без успеха. Требуются ли виртуальной машине дополнительные настройки?

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

На форум был задан весьма специфический вопрос о проблемах с получением IPv4-адреса мостом на основе Ubuntu 24.04.2 LTS VM. Рассмотрим данный вопрос более детально и попытаемся выявить возможные причины неисправности и их исправление.

Теория

Настройка сетевых интерфейсов в Ubuntu с использованием netplan может быть как эффективной, так и источником ошибок, которые на первый взгляд могут показаться загадочными. Виртуальная машина (VM) имеет два физических сетевых интерфейса: enp1s0 и enp6s0. Вы хотите создать мост br0, используя интерфейс enp6s0, который будет получать IPv4-адрес с DHCP-сервера.

Ваша конфигурация, изложенная в /etc/netplan/bridge.yaml, выглядит следующим образом:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp6s0:
      dhcp4: false
  bridges:
    br0:
      dhcp4: true
      interfaces:
        - enp6s0

Пример

Обратите внимание, что интерфейс enp6s0 не должен иметь собственного IP-адреса, так как он передает данные через мост br0, который и является главным интерфейсом для получения IP от DHCP-сервера. Это также подразумевает, что enp6s0 передает весь трафик админу сети через br0.

По выпискам диагностики видно, что br0 не получает IPv4-адрес и переходит на адресацию IPv4LL (169.254.x.x), что указывает на отсутствие ответа от DHCP-сервера. Аргументы журнала показывают, что попытки получения IPv4-адресов сталкиваются с неудачей.

Применение

  1. Проверка правильности конфигурации: Убедитесь, что enp6s0 действительно соединен с правильной сетью, где работает DHCP-сервер. Проверьте физические соединения и настройки виртуальной машины, чтобы убедиться, что интерфейс может взаимодействовать с внешним сетевым оборудованием.

  2. Перезагрузка сети и конфигурации: Примените sudo netplan apply и убедитесь, что ваш файл имеет правильное форматирование YAML. Опечатка или неверная отступка могут привести к неспособности сети принимать изменения.

  3. Сетевые правила и фильтры: Проверьте файерволы и любые сетевые фильтры как внутри вашей виртуальной машины, так и на сетевом оборудовании, которое может блокировать трафик к DHCP-серверу.

  4. Журнал системы: Обратите внимание на логи из journalctl, чтобы заметить ошибки или предупреждения от systemd-networkd. Сообщения о потере связи с DHCP-сервером могут указывать на проблемы с сетевыми правилами или настройками безопасности.

  5. Использование альтернативных методов: Рассмотрите использование статической IP-конфигурации, чтобы проверить, работает ли br0 с предустановленным IP. Если мост работает со статическим IP, проблемой может быть лишь DHCP.

  6. Проверка конфигурации хоста: Убедитесь, что на хостовой машине, где исполняется VM, настроены правильные параметры сети, позволяющие виртуальному интерфейсу корректно коммуницировать с реальной сетью.

Если все вышеупомянутые шаги не решают проблему, возможно потребуется дополнительно диагностировать поведение dhcpcd и сетевых интерфейсов с использованием средств более низкого уровня, таких как tcpdump или wireshark, чтобы увидеть, как запросы DHCP обрабатываются в сети.

Это комплексный подход к решению задачи получения IP-адреса через мост на Ubuntu, используя все предоставленные инструменты и проведя тщательный анализ конфигурации и окружающей среды выполнения.

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

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