Bug 53155 - Proxmox SDN: Проблемы конфигурации DHCP
Summary: Proxmox SDN: Проблемы конфигурации DHCP
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: pve-network (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Alexey Shabalin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-02-19 17:09 MSK by GordeevM
Modified: 2025-11-22 02:47 MSK (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description GordeevM 2025-02-19 17:09:26 MSK
1. Если настроить два SDN, то они конфликтуют, потому что dnsmasq биндится на все интерфейсы, а не только на созданный под SDN.

2. машина не стартует, выглядит как отломавшийся dbus

В логе запуска вот такая ошибка.. ранее на p11 работало .. до какого-то из обновлений. система обновлена до актуального на момент написания сообщения состояния.

org.freedesktop.DBus.Error.ServiceUnknown: The name uk.org.thekelleys.dnsmasq.z0 was not provided by any .service files
qemu-system-x86_64: -netdev type=tap,id=net0,ifname=tap111i0,script=/var/lib/qemu-server/pve-bridge,downscript=/var/lib/qemu-server/pve-bridgedown,vhost=on: network script /var/lib/qemu-server/pve-bridge failed with status 2816
TASK ERROR: start failed: QEMU exited with code 1
Comment 1 GordeevM 2025-02-20 11:51:22 MSK
Используется интерфейс созданный SDN с настроенным DHCP и включенным в этим условия машина не стартует, если отключить галку включения DHCP то машина стартует
Comment 2 Alexey Shabalin 2025-03-13 19:00:16 MSK
Уточните версию пакетов dnsmasq. В новых версиях эта бага не исправлена?
Comment 3 GordeevM 2025-03-28 10:49:22 MSK
Бага с неправильным прослушивание SDN интерфейсов не исправлена

dnsmasq-utils-2.90-alt4.x86_64
dnsmasq-2.90-alt4.x86_64


udp   UNCONN 0      0                                                                                                         127.0.0.1:53               0.0.0.0:*    users:(("dnsmasq",pid=3509086,fd=4))                                                                                                                                                                                                                                           
udp   UNCONN 0      0                                                                                                             [::1]:53                  [::]:*    users:(("dnsmasq",pid=3509086,fd=6))                                                                                                                                                                                                                                           
tcp   LISTEN 0      32                                                                                                        127.0.0.1:53               0.0.0.0:*    users:(("dnsmasq",pid=3509086,fd=5))                                                                                                                                                                                                                                           
tcp   LISTEN 0      32                                                                                                            [::1]:53                  [::]:*    users:(("dnsmasq",pid=3509086,fd=7))
Comment 4 Kozoriz Konstantin 2025-05-12 21:08:14 MSK
Добрый вечер, кажется, у вас включен базовый сервис dnsmasq, выполните;
systemctl disable --now dnsmasq
Comment 5 GordeevM 2025-05-12 23:45:58 MSK
НЕТ .. эта бага возникает при уже двух SDN они слушает их все.. именно SDN
Comment 6 GordeevM 2025-07-05 12:04:10 MSK
(Ответ для Kozoriz Konstantin на комментарий #4)
> Добрый вечер, кажется, у вас включен базовый сервис dnsmasq, выполните;
> systemctl disable --now dnsmasq

нет это именно слушал процеcc, который порожден SDN
Comment 7 GordeevM 2025-11-13 06:33:23 MSK
Проблема находится в файле запуска демона, который запускает dnsmasq для всех интерфейсов, а не только для тех, для которых включен опция DHCP.

и читает файл настроек
/etc/sysconfig/dnsmasq

вместо /etc/sysconfig/dnsmasq.z0

(z0 -- тесовая зона)
(vn0 -- тестовая сеть для которой включена автоматическая выдача адресов)

как вариант строка опция должна быть:
OPTIONS="--bind-interfaces --interface vn0 --except-interface=lo"

вместо:
OPTIONS="--bind-interfaces --interface lo" (что является вообщем случае ошибкой, потому что не возможно запустить второго демона для другой зоны, как пример, да и для другой подсети надо донастраивать интерфейсы, которые он должен прослушивать)
Comment 8 Kozoriz Konstantin 2025-11-18 15:12:25 MSK
(Ответ для GordeevM на комментарий #7)

Добрый день,

> и читает файл настроек
> /etc/sysconfig/dnsmasq
> вместо /etc/sysconfig/dnsmasq.z0
Демон вызывает dnsmasq-helper strart.<zone>. В исходном коде dnsmasq-helper:

SourceIfExists "/etc/sysconfig/dnsmasq${INSTANCE:+.$INSTANCE}"
...
[ -n "$CONFIG_DIR" ] && OPTIONS="$OPTIONS -7 $CONFIG_DIR"
[ -n "$DNSMASQ_OPTS" ] && OPTIONS="$OPTIONS $DNSMASQ_OPTS"
exec /usr/sbin/dnsmasq $OPTIONS $@

В этом фрагменте:
1) dnsmasq-helper загружает конфиг
  - /etc/sysconfig/dnsmasq (если INSTANCE пустой)
  - /etc/sysconfig/dnsmasq.<zone> (если INSTANCE не пустой)

Покажите, пожалуйста, вывод команд:

systemctl status dnsmasq.service dnsmasq@*.service
ls -l /etc/sysconfig/dnsmasq*
ps aux | grep dnsmasq
ss -lntup | grep dnsmasq
Comment 9 GordeevM 2025-11-18 17:10:51 MSK
ss -lntup | grep dnsmasq
udp   UNCONN 0      0          127.0.0.1:53        0.0.0.0:*    users:(("dnsmasq",pid=10340,fd=4))                                                                                                                                                                                                                                             
udp   UNCONN 0      0              [::1]:53           [::]:*    users:(("dnsmasq",pid=10340,fd=6))                                                                                                                                                                                                                                             
tcp   LISTEN 0      32         127.0.0.1:53        0.0.0.0:*    users:(("dnsmasq",pid=10340,fd=5))                                                                                                                                                                                                                                             
tcp   LISTEN 0      32             [::1]:53           [::]:*    users:(("dnsmasq",pid=10340,fd=7))           

ls -l /etc/sysconfig/dnsmasq*
-rw------- 1 root root 1537 мар 26  2025 /etc/sysconfig/dnsmasq
-rw-r--r-- 1 root root  118 ноя 18 17:05 /etc/sysconfig/dnsmasq.z0
-rw-r--r-- 1 root root  118 ноя 18 16:59 /etc/sysconfig/dnsmasq.z1


ps aux | grep dnsmasq
_dnsmasq   10340  0.0  0.0   9868  4364 ?        Ss   17:05   0:00 /usr/sbin/dnsmasq --bind-interfaces --interface lo -s altsup.net -u _dnsmasq -k --pid-file
root       11904  0.0  0.0   3948  2136 pts/0    S+   17:10   0:00 grep --color=auto dnsmasq


первая зона (z0) типа simple настроена и для нее включен dhcp

 systemctl status dnsmasq@z0.servicednsmasq@z0.service - A lightweight DHCP and caching DNS server
     Loaded: loaded (/etc/systemd/system/dnsmasq@.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/dnsmasq@.service.d
             └─00-dnsmasq-after-networking.conf
     Active: active (running) since 

вторая зона (z1) типа simple настроена и для нее включен dhcp

НЕ ЗАПУСКАЕТСЯ
 systemctl status dnsmasq@z1.service 
× dnsmasq@z1.service - A lightweight DHCP and caching DNS server
     Loaded: loaded (/etc/systemd/system/dnsmasq@.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/dnsmasq@.service.d
             └─00-dnsmasq-after-networking.conf
     Active: failed (Result: exit-code) since 


systemd[1]: Starting dnsmasq@z1.service - A lightweight DHCP and caching DNS server...
dnsmasq-helper[8113]: dnsmasq: failed to create listening socket for 127.0.0.1: Address already in use
dnsmasq[8113]: failed to create listening socket for 127.0.0.1: Address already in use
dnsmasq[8113]: FAILED to start up
systemd[1]: dnsmasq@z1.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
systemd[1]: dnsmasq@z1.service: Failed with result 'exit-code'.
systemd[1]: Failed to start dnsmasq@z1.service - A lightweight DHCP and caching DNS server.

Если оставить только первую зону, которая настроена, при включенным DHCP виртуальная машина НЕ ЗАПУСКАЕТСЯ, при этом в IPAM ip выделен

org.freedesktop.DBus.Error.ServiceUnknown: The name uk.org.thekelleys.dnsmasq.z0 was not provided by any .service files
qemu-system-x86_64: -netdev type=tap,id=net0,ifname=tap105i0,script=/usr/libexec/qemu-server/pve-bridge,downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on: network script /usr/libexec/qemu-server/pve-bridge failed with status 2816
TASK ERROR: start failed: QEMU exited with code 1


если удалить настройки, файлы там остаются
Comment 10 Kozoriz Konstantin 2025-11-19 12:40:46 MSK
(Ответ для GordeevM на комментарий #9)
> ss -lntup | grep dnsmasq
> udp   UNCONN 0      0          127.0.0.1:53        0.0.0.0:*   
> users:(("dnsmasq",pid=10340,fd=4))                                          
> 
> udp   UNCONN 0      0              [::1]:53           [::]:*   
> users:(("dnsmasq",pid=10340,fd=6))                                          
> 
> tcp   LISTEN 0      32         127.0.0.1:53        0.0.0.0:*   
> users:(("dnsmasq",pid=10340,fd=5))                                          
> 
> tcp   LISTEN 0      32             [::1]:53           [::]:*   
> users:(("dnsmasq",pid=10340,fd=7))           
> 
> ls -l /etc/sysconfig/dnsmasq*
> -rw------- 1 root root 1537 мар 26  2025 /etc/sysconfig/dnsmasq
> -rw-r--r-- 1 root root  118 ноя 18 17:05 /etc/sysconfig/dnsmasq.z0
> -rw-r--r-- 1 root root  118 ноя 18 16:59 /etc/sysconfig/dnsmasq.z1
> 
> 
> ps aux | grep dnsmasq
> _dnsmasq   10340  0.0  0.0   9868  4364 ?        Ss   17:05   0:00
> /usr/sbin/dnsmasq --bind-interfaces --interface lo -s altsup.net -u _dnsmasq
> -k --pid-file
> root       11904  0.0  0.0   3948  2136 pts/0    S+   17:10   0:00 grep
> --color=auto dnsmasq
> 
> 
> первая зона (z0) типа simple настроена и для нее включен dhcp
> 
>  systemctl status dnsmasq@z0.service 
> ● dnsmasq@z0.service - A lightweight DHCP and caching DNS server
>      Loaded: loaded (/etc/systemd/system/dnsmasq@.service; enabled; preset:
> disabled)
>     Drop-In: /usr/lib/systemd/system/dnsmasq@.service.d
>              └─00-dnsmasq-after-networking.conf
>      Active: active (running) since 
> 
> вторая зона (z1) типа simple настроена и для нее включен dhcp
> 
> НЕ ЗАПУСКАЕТСЯ
>  systemctl status dnsmasq@z1.service 
> × dnsmasq@z1.service - A lightweight DHCP and caching DNS server
>      Loaded: loaded (/etc/systemd/system/dnsmasq@.service; enabled; preset:
> disabled)
>     Drop-In: /usr/lib/systemd/system/dnsmasq@.service.d
>              └─00-dnsmasq-after-networking.conf
>      Active: failed (Result: exit-code) since 
> 
> 
> systemd[1]: Starting dnsmasq@z1.service - A lightweight DHCP and caching DNS
> server...
> dnsmasq-helper[8113]: dnsmasq: failed to create listening socket for
> 127.0.0.1: Address already in use
> dnsmasq[8113]: failed to create listening socket for 127.0.0.1: Address
> already in use
> dnsmasq[8113]: FAILED to start up
> systemd[1]: dnsmasq@z1.service: Main process exited, code=exited,
> status=2/INVALIDARGUMENT
> systemd[1]: dnsmasq@z1.service: Failed with result 'exit-code'.
> systemd[1]: Failed to start dnsmasq@z1.service - A lightweight DHCP and
> caching DNS server.
> 
> Если оставить только первую зону, которая настроена, при включенным DHCP
> виртуальная машина НЕ ЗАПУСКАЕТСЯ, при этом в IPAM ip выделен
> 
> org.freedesktop.DBus.Error.ServiceUnknown: The name
> uk.org.thekelleys.dnsmasq.z0 was not provided by any .service files
> qemu-system-x86_64: -netdev
> type=tap,id=net0,ifname=tap105i0,script=/usr/libexec/qemu-server/pve-bridge,
> downscript=/usr/libexec/qemu-server/pve-bridgedown,vhost=on: network script
> /usr/libexec/qemu-server/pve-bridge failed with status 2816
> TASK ERROR: start failed: QEMU exited with code 1
> 
> 
> если удалить настройки, файлы там остаются

Cпасибо за ответ, cудя по поведению, ваш /etc/systemd/system/dnsmasq@.service запускает dnsmasq напрямую и использует /etc/sysconfig/dnsmasq.

Просьба выполнить у вас:
systemctl cat dnsmasq@z0.service
Comment 11 GordeevM 2025-11-20 13:42:02 MSK
systemctl cat  dnsmasq@z0.service 
# /etc/systemd/system/dnsmasq@.service
[Unit]
Description=A lightweight DHCP and caching DNS server
Before=nss-lookup.target
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/sbin/dnsmasq-helper start -u _dnsmasq -k --pid-file
ExecStartPost=/usr/sbin/dnsmasq-helper poststart
ExecStopPost=/usr/sbin/dnsmasq-helper poststop
ExecReload=/bin/kill -HUP $MAINPID


[Install]
WantedBy=multi-user.target

# /usr/lib/systemd/system/dnsmasq@.service.d/00-dnsmasq-after-networking.conf
# dnsmasq@.service comes with
#    Requires=network.target
#    After=network.target
# Only the After entry makes sense as `network.target` is a passive rule and
# `Require`ing it means that dnsmasq is the "provider" of that unit.
# See https://systemd.io/NETWORK_ONLINE
#
# Additionally, we want ifupdown to have completed its setup, to make sure
# the 'interface=' directives can find the required interfaces at startup.
[Unit]
Requires=
After=networking.service
Comment 12 Kozoriz Konstantin 2025-11-21 15:01:26 MSK
(Ответ для GordeevM на комментарий #11)
> systemctl cat  dnsmasq@z0.service 
> # /etc/systemd/system/dnsmasq@.service
> [Unit]
> Description=A lightweight DHCP and caching DNS server
> Before=nss-lookup.target
> After=network-online.target
> Wants=network-online.target
> 
> [Service]
> ExecStart=/usr/sbin/dnsmasq-helper start -u _dnsmasq -k --pid-file
> ExecStartPost=/usr/sbin/dnsmasq-helper poststart
> ExecStopPost=/usr/sbin/dnsmasq-helper poststop
> ExecReload=/bin/kill -HUP $MAINPID
> 
> 
> [Install]
> WantedBy=multi-user.target
> 
> # /usr/lib/systemd/system/dnsmasq@.service.d/00-dnsmasq-after-networking.conf
> # dnsmasq@.service comes with
> #    Requires=network.target
> #    After=network.target
> # Only the After entry makes sense as `network.target` is a passive rule and
> # `Require`ing it means that dnsmasq is the "provider" of that unit.
> # See https://systemd.io/NETWORK_ONLINE
> #
> # Additionally, we want ifupdown to have completed its setup, to make sure
> # the 'interface=' directives can find the required interfaces at startup.
> [Unit]
> Requires=
> After=networking.service

Судя по выводу systemctl cat dnsmasq@z0.service, у вас используется не пакетный юнит, а локально переопределённый:

# /etc/systemd/system/dnsmasq@.service
[Service]
ExecStart=/usr/sbin/dnsmasq-helper start -u _dnsmasq -k --pid-file
ExecStartPost=/usr/sbin/dnsmasq-helper poststart
ExecStopPost=/usr/sbin/dnsmasq-helper poststop

Обратите внимание, что в ExecStart вызывается просто:
dnsmasq-helper start ... без подстановки имени инстанса (%i).

В таком режиме внутри dnsmasq-helper переменная INSTANCE остаётся пустой, и он всегда читает только из "/etc/sysconfig/dnsmasq", а файлы /etc/sysconfig/dnsmasq.z0, /etc/sysconfig/dnsmasq.z1 игнорируются.

В актуальной конфигурации юнит dnsmasq@.service в пакете выглядит так:

# /usr/lib/systemd/system/dnsmasq@.service
[Service]
Type=forking
PIDFile=/run/dnsmasq.%i.pid
ExecStart=/usr/sbin/dnsmasq-helper start.%i -u _dnsmasq --pid-file=/run/dnsmasq.%i.pid
ExecStartPost=/usr/sbin/dnsmasq-helper poststart.%i
ExecStopPost=/usr/sbin/dnsmasq-helper poststop.%i

Сейчас ваш локальный /etc/systemd/system/dnsmasq@.service полностью перекрывает пакетный юнит и ломает работу SDN.

Рекомендую:
1) Удалить или переименовать локальный юнит

mv /etc/systemd/system/dnsmasq@.service /root/dnsmasq@.service.bak
systemctl daemon-reload

2) Отключить глобальный dnsmasq.service

systemctl disable --now dnsmasq.service

3) Перезапустить инстансы SDN:

systemctl restart dnsmasq@z0.service
systemctl restart dnsmasq@z1.service

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

/usr/sbin/dnsmasq -7 /etc/dnsmasq.d/z0,*.conf --conf-file=/dev/null --enable-dbus=uk.org.thekelleys.dnsmasq.z0 ...
Comment 13 GordeevM 2025-11-22 01:23:40 MSK
убрал юнит который когда-то пытался починить проблему.. проблема биндинга на все адреса все равно осталась

теперь dnsmasq слушает ВООБЩЕ ВСЕ ИНТЕРФЕЙСЫ по tcp, и соответственно второй демон ЗАПУСТИТСЯ НЕ МОЖЕТ

systemctl restart dnsmasq@z1.service
Job for dnsmasq@z1.service failed because the control process exited with error code.
See "systemctl status dnsmasq@z1.service" and "journalctl -xeu dnsmasq@z1.service" for details.

Starting dnsmasq@z1.service - dnsmasq (z1) - A lightweight DHCP and caching DNS server...
dnsmasq: failed to create listening socket for 192.168.1.2: Address already in use
dnsmasq@z1.service: Control process exited, code=exited, status=2/INVALIDARGUMENT
dnsmasq[7837]: failed to create listening socket for 192.168.1.2: Address already in use

и в прослушиваемых интерфейсам все интерфейсы сподряд


192.168.1.2 -- уже стоит dnsmasq от z0
Comment 14 GordeevM 2025-11-22 02:02:20 MSK
выглядит как проблема в генерируемых конфигах



cat    /etc/dnsmasq.d/z0/00-default.conf 
except-interface=lo
enable-ra
quiet-ra
bind-dynamic
no-hosts
dhcp-leasefile=/var/lib/misc/dnsmasq.z0.leases
dhcp-hostsfile=/etc/dnsmasq.d/z0/ethers
dhcp-ignore=tag:!known


вот этого параметра БЫТЬ НЕ ДОЛЖНО: bind-dynamic

а должны быть, как пример вот такие два:
interface=z0n0
bind-interfaces

соответственно параметр interface должен содержать VNets указанной зоны
и похоже что параметр повторяемый interface, и потому в подфайлах логично под них раскидать настройки

проверить кастомизацию не получается, т.к. применить настройки сети ПЕРЕСОЗДАЕТ ВСЕ ФАЙЛЫ С КАТАЛОГАМИ
Comment 15 GordeevM 2025-11-22 02:14:07 MSK
У меня заработало.. вообщем дело было в том похоже что параметр Gateway является обязательным, что, в целом странно потому что не было никаких ошибок, кроме аномальным образом не работающая функция, по какой причине не было ни предупреждения, не объяснения того как именно накостылили работу,

формально DHCP-сервер может не выдавать шлюз по умолчанию, но тут является ОБЯЗАТЕЛЬНЫМ параметром, и нигде в интерфейсе об  этом не сказано
Comment 16 GordeevM 2025-11-22 02:23:54 MSK
Поведение прямо очень и очень не очевидное, как ранее сказано, DHCP вполне может не отдать "шлюз по умолчанию" и это будет вполне корректным поведением.
Comment 17 GordeevM 2025-11-22 02:35:05 MSK
In the same view, create a Subnet in the previously created VNet. This can be done by selecting the VNet and clicking 'Create' in the Subnet panel on the right-hand side. Enter a local Subnet of your choice (in our example 10.0.0.0/24). You also need to define an IP for the gateway, otherwise DHCP will not work (10.0.0.1 in our example). Tick the 'SNAT' option in order to enable SNAT for this VNet.


занятно что я долго этих строк не замечал(официальная документация pve.proxmox) и при этом нет отдельных проверок на соблюдение этого требования
Comment 18 GordeevM 2025-11-22 02:47:05 MSK
https://docs.altlinux.org/ru-RU/alt-server-v/11.0/html/alt-server-v/pve-sdn-sample.html

В документе нет прямого указания что Gateway является обязательным, и в целом не очень прозрачно описана особенность работы типа Simple.