| Summary: | Proxmox SDN: Проблемы конфигурации DHCP | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | GordeevM <max.gordeef> |
| Component: | pve-network | Assignee: | Alexey Shabalin <shaba> |
| Status: | NEW --- | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P5 | CC: | darisishe, kozorizki, max.gordeef, shaba |
| Version: | unstable | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||
|
Description
GordeevM
2025-02-19 17:09:26 MSK
Используется интерфейс созданный SDN с настроенным DHCP и включенным в этим условия машина не стартует, если отключить галку включения DHCP то машина стартует Уточните версию пакетов dnsmasq. В новых версиях эта бага не исправлена? Бага с неправильным прослушивание 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))
Добрый вечер, кажется, у вас включен базовый сервис dnsmasq, выполните; systemctl disable --now dnsmasq НЕТ .. эта бага возникает при уже двух SDN они слушает их все.. именно SDN (Ответ для Kozoriz Konstantin на комментарий #4) > Добрый вечер, кажется, у вас включен базовый сервис dnsmasq, выполните; > systemctl disable --now dnsmasq нет это именно слушал процеcc, который порожден SDN Проблема находится в файле запуска демона, который запускает dnsmasq для всех интерфейсов, а не только для тех, для которых включен опция DHCP. и читает файл настроек /etc/sysconfig/dnsmasq вместо /etc/sysconfig/dnsmasq.z0 (z0 -- тесовая зона) (vn0 -- тестовая сеть для которой включена автоматическая выдача адресов) как вариант строка опция должна быть: OPTIONS="--bind-interfaces --interface vn0 --except-interface=lo" вместо: OPTIONS="--bind-interfaces --interface lo" (что является вообщем случае ошибкой, потому что не возможно запустить второго демона для другой зоны, как пример, да и для другой подсети надо донастраивать интерфейсы, которые он должен прослушивать) (Ответ для 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 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
если удалить настройки, файлы там остаются
(Ответ для 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 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 (Ответ для 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 ... убрал юнит который когда-то пытался починить проблему.. проблема биндинга на все адреса все равно осталась теперь 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 выглядит как проблема в генерируемых конфигах 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, и потому в подфайлах логично под них раскидать настройки проверить кастомизацию не получается, т.к. применить настройки сети ПЕРЕСОЗДАЕТ ВСЕ ФАЙЛЫ С КАТАЛОГАМИ У меня заработало.. вообщем дело было в том похоже что параметр Gateway является обязательным, что, в целом странно потому что не было никаких ошибок, кроме аномальным образом не работающая функция, по какой причине не было ни предупреждения, не объяснения того как именно накостылили работу, формально DHCP-сервер может не выдавать шлюз по умолчанию, но тут является ОБЯЗАТЕЛЬНЫМ параметром, и нигде в интерфейсе об этом не сказано Поведение прямо очень и очень не очевидное, как ранее сказано, DHCP вполне может не отдать "шлюз по умолчанию" и это будет вполне корректным поведением. 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) и при этом нет отдельных проверок на соблюдение этого требования https://docs.altlinux.org/ru-RU/alt-server-v/11.0/html/alt-server-v/pve-sdn-sample.html В документе нет прямого указания что Gateway является обязательным, и в целом не очень прозрачно описана особенность работы типа Simple. |