Вопрос или проблема
Я разрабатываю собственный DNS-сервер, но при попытке его использования возникает конфликт с занятым портом 53. Изменение файла resolved.config не помогает. Мой файл resolved.conf
выглядит так:
[Resolve]
DNS=127.0.0.1
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
Мой файл /etc/resolv.conf
выглядит так:
nameserver 127.0.0.1
nameserver 192.168.1.1
search lan1
Порт 53 всё ещё используется для разрешения DNS…
$ sudo lsof -i :53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE
systemd-r 636 systemd-resolve 12u IPv4 22828
0t0 UDP 127.0.0.53:domain
systemd-r 636 systemd-resolve 13u IPv4 22829 0t0 TCP
127.0.0.53:domain (LISTEN)
Когда я запускаю собственный DNS-сервер, возникает ошибка,
File "/usr/lib/python3.8/socketserver.py", line 466, in
server_bind
self.socket.bind(self.server_address)
OSError: [Errno 98] Address already in use
Я был бы очень признателен за любой совет.
Как остановить использование порта 53 системой systemd-resolved на Ubuntu
Вы можете найти хороший учебник по ссылке выше. Ниже я отмечу, что находится в учебнике для наглядности.
Отредактируйте от имени root файл /etc/systemd/resolved.conf с помощью вашего текстового редактора.
Теперь вам нужно убрать комментарий (удалить #) у строк DNS= и DNSStubListener=.
Теперь вам нужно изменить значение DNS= на предпочтительный DNS-сервер и изменить значение DNSStubListener= с yes на no
Сохраните изменения и выйдите из редактора.
Затем нужно создать символическую ссылку для /run/systemd/resolve/resolv.conf с указанным местом назначения /etc/resolv.conf.
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Обратите внимание на -s, который делает ссылку символической, а не жёсткой, и -f, чтобы удалить все существующие целевые файлы.
Теперь вы должны перезагрузить систему и сможете использовать порт 53
Вы можете проверить это, выполнив следующую команду:
sudo lsof -i :53
Если вы не видите вывода, значит, порт 53 должен быть открыт.
Чтобы отменить это, вы отредактируете /etc/systemd/resolved.conf и вернёте настройки в исходное состояние.
Добавьте # перед строкой DNS= и измените DNSStubListener= обратно на no.
Затем вы можете удалить символическую ссылку, введя следующее:
sudo rm /etc/resolv.conf
Затем перезагрузите.
Я действительно надеюсь, что это поможет! Посмотрите ссылку для лучшей визуализации ха-ха.
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
Как было дано в другом ответе, вы можете в основном следовать руководству на https://www.linuxuprising.com/2020/07/ubuntu-how-to-free-up-port-53-used-by.html.
Я не буду вдаваться в подробности, но если это не сработает, возможно, вам потребуется внести ещё одно изменение.
Возможно, вам потребуется отключить DNSStubListener в другой части systemd.
Попробуйте отредактировать файл /etc/systemd/resolved.conf.d/noresolved.conf
– если в нём установлено DNSStubListener=yes
, измените это на DNSStubListener=no
.
Возможно, есть и другие конфигурационные файлы с этой настройкой (под директивой [Resolve]
), поэтому вам, возможно, придётся поискать дальше.
Надеюсь, это поможет.
.
Ответ или решение
Для многих специалистов в области ИТ, необходимость освободить порт 53 на Ubuntu может вызвать невероятные трудности, особенно если вы используете нестандартный DNS-сервер, который сталкивается с конфликтом порта из-за его текущего использования. В данном случае, это использование связано с systemd-resolve, составляющей системной службы, отвечающей за отработку DNS-запросов.
Теоретические аспекты
Порт 53 представляет собой стандартный порт, задействованный для обработки DNS-запросов как по протоколу TCP, так и по UDP. На Ubuntu системой по умолчанию назначена служба systemd-resolved, которая обеспечивает локальный кэширующий DNS-сервер для оптимизации процесса разрешения доменных имен. Это делает возможным определенные преимущества в производительности, но в тоже время вызывает конфликты при попытке использования нестандартных DNS-серверов, для которых также требуется доступ к этому порту.
Практический пример
Ваш конфигурационный файл /etc/systemd/resolved.conf
выглядит следующим образом:
[Resolve]
DNS=127.0.0.1
И текущие процессы, прослушивающие порт 53, выводятся командой:
$ sudo lsof -i :53
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE
systemd-r 636 systemd-resolve 12u IPv4 22828
0t0 UDP 127.0.0.53:domain
systemd-r 636 systemd-resolve 13u IPv4 22829 0t0 TCP
127.0.0.53:domain (LISTEN)
Вы столкнулись с ошибкой, вызванной тем, что порт уже используется:
OSError: [Errno 98] Address already in use
Применение теории для решения задачи
Чтобы устранить конфликт использования порта 53 и позволить вашему пользовательскому серверу DNS функционировать корректно, выполните следующие шаги:
-
Изменение конфигурации systemd-resolved:
- Откройте файл
/etc/systemd/resolved.conf
в вашем любимом текстовом редакторе и снимите комментарии (#) с параметровDNS=
иDNSStubListener=
, затем измените значения следующим образом:DNS=8.8.8.8 # Или укажите ваш предпочитаемый DNS-сервер DNSStubListener=no
- Сохраните изменения и закройте редактор.
- Откройте файл
-
Отключение и остановка службы:
sudo systemctl disable systemd-resolved sudo systemctl stop systemd-resolved
-
Создание символической ссылки для файлов конфигурации:
- Выполните команду:
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
- Это изменит ссылку
/etc/resolv.conf
на файл конфигурации, используемый системой, тем самым позволяя bypass systemd-resolved.
- Выполните команду:
-
Проверка изменений:
- Перезагрузите вашу систему для применения изменений.
- Проверьте состояние порта 53 с помощью:
sudo lsof -i :53
- Если вывод отсутствует, это означает, что порт 53 теперь свободен для использования вашим кастомным сервером DNS.
-
Дополнительные конфигурации:
- Если описанные шаги не дали эффекта, проверьте наличие других возможных конфигурационных файлов, например:
/etc/systemd/resolved.conf.d/noresolved.conf
, и убедитесь в отсутствии параметраDNSStubListener=yes
.
- Если описанные шаги не дали эффекта, проверьте наличие других возможных конфигурационных файлов, например:
-
Восстановление конфигураций при необходимости:
- Для восстановления работы systemd-resolved просто верните изменения в файле конфигурации и удалите созданную символическую ссылку:
sudo rm /etc/resolv.conf
- Снова перезагрузите систему.
- Для восстановления работы systemd-resolved просто верните изменения в файле конфигурации и удалите созданную символическую ссылку:
Применяя эти шаги, вы эффективно освобождаете порт 53 на Ubuntu, что позволяет вашему DNS-серверу работать без конфликтов. Этот детальный подход облегчит процесс управления портами и обеспечит стабильную работу ваших сетевых решений.