当我完成 dnsmasq 设置时出现此错误。
ashokkrishna@krishna:~$ sudo dnsmasq
dnsmasq: failed to create listening socket for port 53: Address already in use
ashokkrishna@krishna:~$ netstat -lpn | grep :53
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN -
tcp6 0 0 :::53 :::* LISTEN -
tcp6 0 0 :::53755 :::* LISTEN -
udp 0 0 0.0.0.0:53 0.0.0.0:* -
udp 0 0 0.0.0.0:5353 0.0.0.0:* -
udp6 0 0 :::53 :::* -
udp6 0 0 :::5353 :::* -
那么如何解决这个问题或者如何停止这些套接字。
答案1
你可以这样做:
netstat -tupln
你会得到这样的结果:
tcp 0 0 :::80 :::* LISTEN 713/httpd
获取监听端口 53 的进程的 pid,然后使用此命令将其终止
kill -9 pid
答案2
我只是花了几个小时尝试以合理的方式解决这个问题,而无需进行任何重大的系统修改。
停止 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,然后在完全启动后启动 dnsmasq 即可,至少在 Mint 上如此。我无法谈论其他发行版。
答案3
检查端口使用情况;
lsof -i -n -P
就我的情况而言,systemd-resolved 阻止使用端口 53,如下所示:
systemd-r 640 systemd-resolve 12u IPv4 22295 0t0 UDP 127.0.0.53:53
systemd-r 640 systemd-resolve 13u IPv4 22296 0t0 TCP 127.0.0.53:53 (LISTEN)
在启用 dnsmasq 之前,只需禁用 systemd-resolved;
sudo systemctl disable systemd-resolved --now
sudo systemctl enable dnsmasq --now