我正在实现一个自定义 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
我将非常感谢任何建议。
答案1
如何在 Ubuntu 上阻止 systemd-resolved 使用端口 53
您可以在上面的链接中找到一个很棒的教程。下面我将记下教程中的内容以提高可见性。
以 root 身份编辑/etc/systemd/resolved.conf使用您选择的文本编辑器。
现在,您需要取消注释(去除 #) 这域名解析=和DNSStubListener=线。
您现在想要更改域名解析=值到您选择的 DNS 服务器,然后更改DNSStubListener=从是的到不
现在,保存更改并退出编辑器。
接下来,您需要创建一个符号链接为了/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并将设置恢复到原来的样子。
添加#回到前面域名解析=行并更改DNSStubListener=回到不。
然后您可以通过键入以下内容删除该符号链接:
sudo rm /etc/resolv.conf
然后重新启动。
我真的希望这有帮助!查看链接以获得更好的视觉效果哈哈。
答案2
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
答案3
正如另一个答案中给出的那样,您主要可以按照此处的教程进行操作:https://www.linuxuprising.com/2020/07/ubuntu-how-to-free-up-port-53-used-by.html
。我不会重复这些细节,但如果那个不起作用,您可能需要进行另一次修改。
您可能必须关闭 systemd 另一部分中的 DNSStubListener。
尝试编辑该文件/etc/systemd/resolved.conf.d/noresolved.conf
- 如果有DNSStubListener=yes
,请将其更改为DNSStubListener=no
.
可能还有其他conf文件保存了这个集合(在[Resolve]
说明符下,所以你可能需要进一步查看。
希望有帮助。