dnsmasq: failed to create listening socket for port 53
На системах с systemd-resolved порт 53 занят его слушателем на петлевом адресе. Попытка поднять dnsmasq на том же адресе отказывает. Полностью отключать встроенную службу не обязательно: достаточно освободить порт и оставить ей работу с локальными запросами.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Слушатель встроенной службы занимает порт
systemd-resolved слушает петлевой адрес на порту разрешения имён. Второму процессу тот же адрес не достанется.
-
dnsmasq слушает все адреса и упирается в занятый
Без явного указания адреса служба пытается занять все, включая тот, где уже есть слушатель.
-
Файл разрешения имён перезаписывается
После разведения служб остаётся вопрос, кого спрашивает сама система. Ссылка на файл может вести к встроенной службе.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Кто слушает порт разрешения имён.
sudo ss -ulnp | grep :53Какие службы разрешения имён работают одновременно.
systemctl is-active systemd-resolved dnsmasqКак система разрешает имена сейчас.
resolvectl status | head -15Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- systemd-resolved слушает петлевой адрес на порту разрешения имён. Второму процессу тот же адрес не достанется.
- Как проверить
-
Посмотрите, кто держит порт.
sudo ss -ulnp | grep :53 systemctl is-active systemd-resolved
- Как исправить
-
Отключите слушатель встроенной службы параметром
DNSStubListener=noи перезапустите её. Сама служба продолжит работать для локальных запросов.[Resolve] DNSStubListener=no
- Почему происходит
- Без явного указания адреса служба пытается занять все, включая тот, где уже есть слушатель.
- Как проверить
-
Посмотрите настройки прослушивания.
grep -hE "^(listen-address|interface|bind-interfaces)" /etc/dnsmasq.conf /etc/dnsmasq.d/* 2>/dev/null
- Как исправить
- Укажите конкретные адреса прослушивания и привязку к интерфейсам. Это правильнее, чем отключать встроенную службу целиком.
- Почему происходит
- После разведения служб остаётся вопрос, кого спрашивает сама система. Ссылка на файл может вести к встроенной службе.
- Как проверить
-
Посмотрите, куда ведёт файл разрешения имён.
ls -l /etc/resolv.conf; head -3 /etc/resolv.conf
- Как исправить
- Направьте файл на нужный слушатель. Менять его содержимое вручную бесполезно: он перезаписывается при следующем изменении сети.
Пример вывода
Порт занят слушателем встроенной службы. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
dnsmasq[4800]: failed to create listening socket for port 53: Address already in use
dnsmasq[4800]: FAILED to start up
systemd[1]: dnsmasq.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
Связанные ошибки
- Address already in use при запуске службы Порт или адрес уже занят: bind() failed (98: Address already in use). Как найти владельца порта и что делать с остатками прежнего процесса.
- BIND: порт 53 занят systemd-resolved named не может занять порт 53: его держит локальный разрешатель имён. Как развести их по адресам.
- systemd-resolved: resolv.conf заменён обычным файлом Разрешение имён работает частично: поиск по домену и разные серверы по интерфейсам перестают действовать.
- PostgreSQL: could not bind IPv4 address Кластер PostgreSQL не занимает порт: адрес занят другим экземпляром или остался файл сокета. Разбор.
- bind: Permission denied при привязке к порту Отказ при привязке к порту: обычно порт ниже 1024 у службы от непривилегированного пользователя. Как дать возможность CAP_NET_BIND_SERVICE.
- Порт занят, но процесса не видно Адрес занят, а инструменты не показывают владельца: другое сетевое пространство имён, контейнер, сокет systemd.
- Apache: could not bind to address Apache не занимает порт: конфликт с nginx, порт занят, нет прав на привилегированный порт.
- Automount: каталог монтируется не вовремя или отваливается Автомонтирование через .automount: как работает TimeoutIdleSec, почему ресурс отваливается и когда лучше обычный .mount.
Где встречается чаще всего
Источники
-
resolved.conf(5)
Параметр DNSStubListener= и слушатель на петлевом адресе. - Документация dnsmasq
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено запуском dnsmasq при работающем слушателе встроенной службы.