AdGuardHome端口冲突,3步彻底解决
【免费下载链接】AdGuardHomeNetwork-wide ads & trackers blocking DNS server项目地址: https://gitcode.com/gh_mirrors/ad/AdGuardHome
第一次启动 AdGuardHome,安装页停在validating ports: listen tcp 0.0.0.0:53: bind: address already in use。这类 AdGuardHome端口冲突 几乎只有一个原因:系统自带的 DNS 服务占了 53,或者别的 Web 服务占了 3000。
不用慌,先用一条命令确认谁在占用,再改配置文件里的两行,最后一步验证就能闭环。
查谁占了 53 或 3000
在服务器上执行:
ss -tulnp | grep -E ':(53|3000)\b'看输出里的进程名:如果出现0.0.0.0:53的 LISTEN 行,且进程是named或systemd-resolved,就是它冲突了,Linux 默认用 systemd-resolved 占着 53。如果什么都没打印出来,说明不是端口问题,去查防火墙或服务日志。
改这两行(裸机安装)
配置文件是安装目录下的AdGuardHome.yaml,结构可对照 internal/next/AdGuardHome.example.yaml。只动dns.addresses和http.addresses两处:
dns: addresses: - '0.0.0.0:5353' http: addresses: - '0.0.0.0:8080'dns.addresses决定 DNS 监听端口,http.addresses决定管理界面端口。5353 和 8080 很少被占用,换成任意空闲端口都可以。保存后重启服务即可生效。
改 -p 映射(Docker 部署)
容器内部本来就监听 53 和 3000,你只需要改-p里宿主侧的端口,配置文件一个字都不用动:
docker run -d -p 127.0.0.1:5353:53 \ -p 127.0.0.1:8080:3000 adguard/adguardhome原理和裸机一样:左边是宿主机端口,右边是容器内端口。用 compose 的话同步改ports字段。
验证新端口通了没
curl -s http://127.0.0.1:8080/control/status dig @127.0.0.1 -p 5353 example.com +short成功的标准:第一条返回含"dns_status": "running"的 JSON,第二条返回 example.com 的 IP 地址。两条都通了才算改对。万一不生效,把这两行改回原值重启即可回退。
避开 4 个常见坑
| 坑 | 现象 | 一句话处理 |
|---|---|---|
| 客户端没更新 DNS 地址 | 设备仍指旧 53,广告没拦住 | 设备/路由器改成新端口 |
| 防火墙没放行 | 浏览器打不开管理界面 | ufw/firewalld 放行新端口 |
| Docker 映射没改 | 宿主机旧端口仍被占 | 复查两条 -p 映射 |
| pprof 调试端口被占 | 日志报 6060 in use | 改 http.pprof.enabled: false |
【免费下载链接】AdGuardHomeNetwork-wide ads & trackers blocking DNS server项目地址: https://gitcode.com/gh_mirrors/ad/AdGuardHome
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考