You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu下dnsproxy.py报错Address already in use及域名重定向求助

问题解析与解决方案

一、错误中"Address already in use"的具体含义

你遇到的socket.error: [Errno 98] Address already in use,本质是DNS代理脚本dnsproxy.py默认要监听的DNS标准端口(UDP/TCP 53)已经被系统里的其他进程占用了。

因为DNS服务的默认端口是53,dnsproxy.py作为DNS代理,会尝试绑定这个端口来接收DNS查询请求,但Ubuntu 16.04默认会运行dnsmasq或者systemd-resolved这类本地DNS服务,它们已经抢占了53端口,所以脚本无法绑定,抛出这个错误。

二、分步解决方法

1. 先找出占用53端口的进程

执行以下命令之一,查看哪个进程在占用53端口:

sudo lsof -i :53
# 或者
sudo netstat -tulpn | grep :53

输出结果里会显示进程名称(比如dnsmasq、systemd-resolved)和对应的PID,这就是占用端口的进程。

2. 停止占用端口的服务

根据上面查到的进程名,停止对应的服务:

  • 如果是dnsmasq:
    sudo systemctl stop dnsmasq
    # 要是不想永久禁用,用完脚本后可以用start重启:sudo systemctl start dnsmasq
    
  • 如果是systemd-resolved:
    sudo systemctl stop systemd-resolved
    # 同样,后续重启用:sudo systemctl start systemd-resolved
    

3. 重新运行dnsproxy.py

现在端口已经释放,直接执行你的命令即可:

sudo python dnsproxy.py -s 8.8.8.8

可选方案:不停止原有服务,改用其他端口

如果你不想中断系统默认的DNS服务,可以让dnsproxy.py监听非标准端口(比如5353),命令如下:

sudo python dnsproxy.py -s 8.8.8.8 -p 5353

但这样你需要把系统的DNS服务器设置为127.0.0.1:5353才能让代理生效,操作相对繁琐,更推荐前面的停止服务方案。

额外提醒:关于hosts文件的通配符

你在/etc/hosts里添加的*.mydomain.com其实是不生效的——标准的hosts文件不支持通配符匹配,这也是你需要用dnsproxy.py来实现子域名重定向的原因,这点要注意哦。

内容的提问来源于stack exchange,提问作者Simone Bonelli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:46:39