Освободите порт 53 на Ubuntu, чтобы пользовательский DNS-сервер мог его использовать.

Вопрос или проблема

Я разрабатываю собственный 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 функционировать корректно, выполните следующие шаги:

  1. Изменение конфигурации systemd-resolved:

    • Откройте файл /etc/systemd/resolved.conf в вашем любимом текстовом редакторе и снимите комментарии (#) с параметров DNS= и DNSStubListener=, затем измените значения следующим образом:
      DNS=8.8.8.8  # Или укажите ваш предпочитаемый DNS-сервер
      DNSStubListener=no
    • Сохраните изменения и закройте редактор.
  2. Отключение и остановка службы:

    sudo systemctl disable systemd-resolved
    sudo systemctl stop systemd-resolved
  3. Создание символической ссылки для файлов конфигурации:

    • Выполните команду:
      sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
    • Это изменит ссылку /etc/resolv.conf на файл конфигурации, используемый системой, тем самым позволяя bypass systemd-resolved.
  4. Проверка изменений:

    • Перезагрузите вашу систему для применения изменений.
    • Проверьте состояние порта 53 с помощью:
      sudo lsof -i :53
    • Если вывод отсутствует, это означает, что порт 53 теперь свободен для использования вашим кастомным сервером DNS.
  5. Дополнительные конфигурации:

    • Если описанные шаги не дали эффекта, проверьте наличие других возможных конфигурационных файлов, например: /etc/systemd/resolved.conf.d/noresolved.conf, и убедитесь в отсутствии параметра DNSStubListener=yes.
  6. Восстановление конфигураций при необходимости:

    • Для восстановления работы systemd-resolved просто верните изменения в файле конфигурации и удалите созданную символическую ссылку:
      sudo rm /etc/resolv.conf
    • Снова перезагрузите систему.

Применяя эти шаги, вы эффективно освобождаете порт 53 на Ubuntu, что позволяет вашему DNS-серверу работать без конфликтов. Этот детальный подход облегчит процесс управления портами и обеспечит стабильную работу ваших сетевых решений.

Оцените материал
Добавить комментарий

Капча загружается...