Вопрос или проблема
Я работаю в виртуальной машине с 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-адресов сталкиваются с неудачей.
Применение
-
Проверка правильности конфигурации: Убедитесь, что
enp6s0
действительно соединен с правильной сетью, где работает DHCP-сервер. Проверьте физические соединения и настройки виртуальной машины, чтобы убедиться, что интерфейс может взаимодействовать с внешним сетевым оборудованием. -
Перезагрузка сети и конфигурации: Примените
sudo netplan apply
и убедитесь, что ваш файл имеет правильное форматирование YAML. Опечатка или неверная отступка могут привести к неспособности сети принимать изменения. -
Сетевые правила и фильтры: Проверьте файерволы и любые сетевые фильтры как внутри вашей виртуальной машины, так и на сетевом оборудовании, которое может блокировать трафик к DHCP-серверу.
-
Журнал системы: Обратите внимание на логи из
journalctl
, чтобы заметить ошибки или предупреждения отsystemd-networkd
. Сообщения о потере связи с DHCP-сервером могут указывать на проблемы с сетевыми правилами или настройками безопасности. -
Использование альтернативных методов: Рассмотрите использование статической IP-конфигурации, чтобы проверить, работает ли
br0
с предустановленным IP. Если мост работает со статическим IP, проблемой может быть лишь DHCP. -
Проверка конфигурации хоста: Убедитесь, что на хостовой машине, где исполняется VM, настроены правильные параметры сети, позволяющие виртуальному интерфейсу корректно коммуницировать с реальной сетью.
Если все вышеупомянутые шаги не решают проблему, возможно потребуется дополнительно диагностировать поведение dhcpcd
и сетевых интерфейсов с использованием средств более низкого уровня, таких как tcpdump
или wireshark
, чтобы увидеть, как запросы DHCP обрабатываются в сети.
Это комплексный подход к решению задачи получения IP-адреса через мост на Ubuntu, используя все предоставленные инструменты и проведя тщательный анализ конфигурации и окружающей среды выполнения.