Ubuntu по умолчанию поддерживает прослушивание порта 53 с разрешением systemd. Если вы хотите запустить собственный DNS-сервер, вы не можете, потому что порт 53 уже используется, поэтому вы получите сообщение об ошибке, подобное этой: «listen tcp 0.0.0.0:53: bind: address already in use».
В этой статье объясняется, как запретить systemd-resolved использовать порт 53 в Ubuntu. Инструкции были протестированы на Ubuntu 20.04, но они также должны работать на других версиях Ubuntu, например, Ubuntu 18.04, предстоящем Ubuntu 20.10, а также в дистрибутивах Linux на основе Ubuntu, таких как Pop! _OS, Zorin OS, Elementary OS, Linux Mint и других. В принципе, это работает в любой системе, имеющей systemd версии 232 или новее.
Чтобы узнать, используется ли порт 53 в вашей системе, используйте:
sudo lsof -i :53
Пример вывода, показывающий, что systemd-resolved использует порт 53 в системе Ubuntu 20.04 по умолчанию:
$ sudo lsof -i :53 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd-r 610 systemd-resolve 12u IPv4 19377 0t0 UDP localhost:domain systemd-r 610 systemd-resolve 13u IPv4 19378 0t0 TCP localhost:domain (LISTEN)
Если вы не получаете никакого вывода, это означает, что порт 53 не используется.
Как запретить systemd-resolved использовать порт 53 в Ubuntu
Стоит отметить, что вы можете освободить порт 53, просто раскомментировав DNSStubListener и установив для него значение no в /etc/systemd/resolved.conf. Остальные шаги предназначены для включения DNS-сервера – без него ваша система не сможет разрешать какие-либо доменные имена, поэтому вы не сможете посещать веб-сайты в веб-браузере и т. д.
1. Отредактируйте /etc/systemd/resolved.conf с помощью текстового редактора (как root), например, откройте его с помощью текстового редактора консоли Nano:
sudo nano /etc/systemd/resolved.conf
И раскомментируйте (удалите #с начала строки) строку DNS= и строку DNSStubListener=. Затем измените значение DNS= в этом файле на DNS-сервер, который вы хотите использовать (например, 127.0.0.1 для использования локального прокси, 1.1.1.1 для использования Cloudflare DNS и т. д.), А также измените значение DNSStubListener= с yes на no.
Вот как должен выглядеть файл после того, как вы внесли эти изменения (мы используем 1.1.1.1 в качестве DNS-сервера здесь, то есть Cloudflare DNS):
[Resolve] DNS=1.1.1.1 #FallbackDNS= #Domains= #LLMNR=no #MulticastDNS=no #DNSSEC=no #DNSOverTLS=no #Cache=no DNSStubListener=no #ReadEtcHosts=yes
Чтобы сохранить файл с помощью текстового редактора Nano, нажмите Ctrl + x, затем введите y и нажмите Enter.
2. Создание символической ссылки для /run/systemd/resolve/resolv.conf на /etc/resolv.conf в качестве пункта назначения:
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Здесь параметр -s предназначен для создания символической, а не жесткой ссылки и -f предназначен для удаления любых существующих файлов назначения (поэтому он удаляется, /etc/resolv.conf если она существует).
3. Перезагрузите вашу систему.
Порт 53 теперь должен быть свободен в вашей системе Ubuntu, и вы больше не должны получать таких ошибок, как “listen tcp 127.0.0.1:53: bind: address already in use”.
Вы можете проверить, используется ли порт 53 или нет, запустив его sudo lsof -i :53- если порт 53 не используется, эта команда не должна показывать никаких выходных данных.
Как отменить изменения
Вы хотите отменить внесенные изменения, следуя инструкциям в этой статье? Это то, что вы должны сделать.
1. Начните с редактирования /etc/systemd/resolved.conf в текстовом редакторе (как root), например откройте его в текстовом редакторе консоли Nano:
sudo nano /etc/systemd/resolved.conf
И закомментируйте (добавьте # перед строкой), DNS=а DNSStubListener=no затем сохраните файл. Чтобы сохранить файл с помощью текстового редактора Nano, нажмите Ctrl + x, затем введите y и нажмите Enter.
2 . Удалите символическую ссылку /etc/resolv.conf:
sudo rm /etc/resolv.conf
3 . Перезагрузите вашу систему.