dnsmasq: не удалось создать прослушивающий сокет для порта 53: адрес уже используется
Я настраивал сервер, как показано ниже по ссылке https://help.ubuntu.com/community/Dnsmasq
root@user-desktop:/etc/init.d# sudo apt-get install dnsmasq
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
dnsmasq
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/15.4 kB of archives.
After this operation, 120 kB of additional disk space will be used.
Selecting previously unselected package dnsmasq.
(Reading database ... 146283 files and directories currently installed.)
Unpacking dnsmasq (from .../dnsmasq_2.59-4_all.deb) ...
Processing triggers for ureadahead ...
Setting up dnsmasq (2.59-4) ...
* Starting DNS forwarder and DHCP server dnsmasq
dnsmasq: failed to create listening socket for port 53: Address already in use [fail]
invoke-rc.d: initscript dnsmasq, action "start" failed.
9 ответов
Проверьте, что прослушивает порт 53 (домен) с помощью:
sudo ss -lp "sport = :domain"
Отключите все службы, работающие на этом порту. Обычно это systemd-resolved
,
Я собираюсь также mask
так что он не запускается автоматически при перезагрузке.
sudo systemctl disable systemd-resolved
sudo systemctl mask systemd-resolved
Чтобы отменить то, что вы сделали:
sudo systemctl unmask systemd-resolved
sudo systemctl enable systemd-resolved
Также sudo update-rc.d systemd-resolved disable
может также остановить автоматический запуск при загрузке, но я не проверял это. использование defaults
вместо того disable
отменить команду.
Или вы можете изменить порт, который прослушивает dnsmasq, отредактировав файл конфигурации:
sudo nano /etc/dnsmasq.conf
Нажмите Ctrl+W и введите listen-address=
и нажмите ввод.
Раскомментируйте строку и добавьте 127.0.0.1 с портом, отличным от 53, например:
listen-address=127.0.0.1#5300
У меня та же проблема, что и у вас. Я думаю, что это правда с 12.10, но эта тема была закрыта до выпуска 12.10.
Занимаясь поиском (главным образом вдохновленный отсюда), я нашел это решение:
- редактировать
/etc/NetworkManager/NetworkManager.conf
файл с тобой любимый редактор - прокомментировать строку
dns=dnsmasq
- перезапустите сетевой менеджер:
sudo service network-manager restart
Но в вашей конфигурации dnsmasq (/etc/dnsmasq.conf
), вы должны быть уверены, что слушаете локальные DNS-запросы со строкой listen-address=127.0.0.1
,
Если вы измените конфигурацию dnsmasq, не забудьте запустить sudo /etc/init.d/dnsmasq restart
Я надеюсь, это поможет.
У меня такая же проблема.
dnsmasq-base
был установлен и прослушан порт 53, предотвращающий dnsmasq
начать.
Можно использовать dnsmasq-base
часть dnsmasq
для той же цели: просто используйте другой каталог конфигурации: тот, который находится в Network Manager
папка:
/etc/NetworkManager/dnsmasq.d/
Мое решение: OP: Ubuntu 22.04
Шаг 1. Отредактируйте файл /etc/dnsmasq.conf.
sudo nano /etc/dnsmasq.conf
Шаг 2: Измените порт 53 -> 5353
# Listen on this specific port instead of the standard DNS port
# (53). Setting this to zero completely disables DNS function,
# leaving only DHCP and/or TFTP.
port=5353
# Set Listen address
listen-address=127.0.0.1
Шаг 3: перезапустите dnsmasq.service
sudo systemctl restart dnsmasq.service
Мое решение для Ubuntu 22.04 (улучшенное по сравнению с решением, предоставленным Муратом Чакмаком ), сохраняя оба и .
По сути, мы работаем по другому адресу. Так,/etc/dnsmasq.conf
будут следующие строки...
# If you want dnsmasq to listen for DHCP and DNS requests only on
# specified interfaces (and the loopback) give the name of the
# interface (eg eth0) here.
# Repeat the line for more than one interface.
#interface=
# Or you can specify which interface _not_ to listen on
#except-interface=
# Or which to listen on by address (remember to include 127.0.0.1 if
# you use this.)
listen-address=127.0.53.1
# On systems which support it, dnsmasq binds the wildcard address,
# even when it is listening on only some interfaces. It then discards
# requests that it shouldn't reply to. This has the advantage of
# working even when interfaces come and go and change address. If you
# want dnsmasq to really bind only the interfaces it is listening on,
# uncomment this option. About the only time you may need this is when
# running another nameserver on the same machine.
bind-interfaces
Вышеупомянутое можно автоматизировать, используя следующие строки...
DNSMASQ_ADD=127.0.53.1
sed -i "s:^# \?\(listen-address=\):\1$DNSMASQ_ADD:" /etc/dnsmasq.conf
sed -i "s:^# \?\(bind-interfaces\):\1:" /etc/dnsmasq.conf
Обязательно перезапустите dnsmasq с...
systemctl restart dnsmasq
Тогда пустьsystemd-resolved
слушатьdnsmasq
для любых запросов. Это можно сделать безопасно, создав файл под/etc/systemd/resolved.conf.d/
вроде следующего...
DNSMASQ_ADD=127.0.53.1
[ ! -d /etc/systemd/resolved.conf.d ] && mkdir /etc/systemd/resolved.conf.d
[ ! -f /etc/systemd/resolved.conf.d/dnsmasq.conf ] && \
echo -e "[Resolve]\nDNS=$DNSMASQ_ADD" > /etc/systemd/resolved.conf.d/dnsmasq.conf
systemctl restart systemd-resolved
Для получения дополнительной информации, пожалуйста, ознакомьтесь с справочными страницамиresolved.conf.d
иresolved.conf
. Я надеюсь, что это поможет кому-то!
Если вы не хотите испортить распознаватель, сделайте это с помощью rc.local.
Остановить автоматический запуск dnsmasq.
servicectl disable dnsmasq
Создать файл
/etc/rc.local
или же
/etc/rc.d/rc.local
в зависимости от дистрибутива.
Установить права
chmod +x /etc/rc.local
Изменить файл:
#!/bin/bash
service systemd-resolved stop
service dnsmasq start
Отключение systemd-resolved при запуске вызывает проблемы. Я считаю, что это как-то связано с
/etc/resolv.conf
файл, но я не уверен. Все, что я знаю, это то, что первый ответ вызвал у меня много проблем и в конечном итоге вообще не сработал. Простая остановка systemd-resolved, а затем запуск dnsmasq после полной загрузки работает отлично, по крайней мере, на Mint. Я не могу говорить о других дистрибутивах.
попробуйте это:sudo fuser -k 53/tcp он напечатает вам идентификатор процесса, связанного с этим портом, а затем уничтожит его, используя: sudo kill -9 идентификатор процесса
Это также может произойти, если вы установили dnscrypt-proxy и включили активацию сокета systemd. Это может стать проблемой при попытке использовать dnscrypt с такими системами, как run pi-hole, которые зависят от работы dnsmasq на порту 53. Похоже, что эта функция включена по умолчанию в некоторых дистрибутивах, поэтому ее необходимо отключить вручную, как описано в dnscrypt- . прокси-документы .
Вот шаги, которые они предлагают: Сначала вам нужно будет установить новый порт для прослушивания, отредактировав файл конфигурации dnscrypt-proxy и изменивlisten_addresses
(например, для прослушивания порта 53533 используйте:listen_addresses = ['127.0.0.1:53533']
:
sudo nano /etc/dnscrypt-proxy/dnscrypt-proxy.toml
Затем вам нужно будет остановить и отключить службу, которая привязывает и перенаправляет порт 53 (выполняя активацию сокета systemd), которая называется:
sudo systemctl stop dnscrypt-proxy.socket
sudo systemctl disable dnscrypt-proxy.socket
А затем удалите его из иdnscrypt-proxy-resolvconf.service
конфигурационные файлы (закомментировав любые ссылки наdnscrypt-proxy.socket
то есть, добавив#
символ комментария перед любыми записями: например#After=dnscrypt-proxy.socket
#Requires=dnscrypt-proxy.socket
#Also=dnscrypt-proxy.socket
)
sudo nano /lib/systemd/system/dnscrypt-proxy.service
sudo nano /lib/systemd/system/dnscrypt-proxy-resolvconf.service
Затем вам будет предложено выполнить перезагрузку демона после редактирования файлов конфигурации systemd:
sudo systemctl daemon-reload
И, наконец, вы можете перезапуститьdnscrypt-proxy.service
:
sudo systemctl restart dnscrypt-proxy.service
И процесс инициализации больше не будет привязан к порту 53, и вы увидите только dnscrypt-proxy, подключенный к настроенному вами порту (или 53533, если вы скопировали приведенный выше пример).
РЕДАКТИРОВАТЬ: немного погуглил, и я нашел решение. Кажется, что сетевой менеджер зависит от пакета, называемого "dnsmasq-base", который предоставляет некоторые функции dnsmasq. Запись Dnsmasq в Ubuntu Wiki гласит, что
"Обратите внимание, что пакет"dnsmasq"мешает сетевому менеджеру, который может использовать" dnsmasq-base "для предоставления услуг DHCP при совместном использовании подключения к Интернету. Поэтому, если вы используете сетевой менеджер (хорошо только в простых установках), установите dnsmasq". -base, но не dnsmasq. Если у вас более сложная настройка, удалите сетевой менеджер, используйте dnsmasq или подобное программное обеспечение (bind9, dhcpd и т. д.) и настройте все вручную."
Другими словами: вы хотите использовать dnsmasq? Тогда тебе лучше знать, что ты делаешь. Упомянутое ранее решение предлагает заменить dnsmasq-base на dnsmasq следующим образом (первая команда также удалит network-manager):
sudo apt-get remove dnsmasq-base
sudo apt-get install dnsmasq
sudo apt-get install network-manager network-manager-gnome
И вот некоторые общие комментарии по поиску того, что блокирует ваши порты: вы можете найти то, что прослушивает какой порт, используя lsof
:
lsof -Pn +M -i4
перечислит порты IPv4 из-за -i4, в то время как
lsof -Pn +M -i6
перечислит порты IPv6. Или просто введите
lsof -Pn +M | grep ':53 (LISTEN)'
Это должно (надеюсь) рассказать вам, что использует порт 53. -Pn
параметры командной строки предотвращают преобразование номера порта / IP-адреса хоста в имена.
Или запустить
netstat -utlnp