Karakeep 踩坑日记(二):AdGuard 与 Mihomo 的 DNS 冲突
日期:2026-09-04
今天继续处理 Karakeep 的网络问题。
之前导入书签后,Karakeep 抓取部分网页时报错:
Refusing to access disallowed resolved address 198.18.3.50
排查发现并不是网站本身有问题,而是服务器开启 Mihomo 后,DNS 被 Fake-IP 接管了。
执行:
nslookup www.fnnas.com
返回:
198.18.x.x
关闭 Mihomo 后重新解析,就恢复成正常公网 IP。
原因是 Mihomo 原来的 TUN 配置开启了:
dns-hijack:
- any:53
- tcp://any:53
同时 DNS 使用:
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
Karakeep 本身带有 SSRF 防护,因此看到 198.18.x.x 这种特殊地址后会直接拒绝访问。
调整 AdGuard Home
AdGuard Home 原来使用 Docker 端口映射,今天改成了 Host 网络:
services:
adguardhome:
image: adguard/adguardhome:latest
container_name: adguardhome
restart: unless-stopped
network_mode: host
volumes:
- ./work:/opt/adguardhome/work
- ./conf:/opt/adguardhome/conf
DNS 直接监听:
192.168.5.100:53
管理页面:
http://192.168.5.100:3001
同时继续保留内部域名解析:
rewrites:
- domain: '*.home.52huahua.cn'
answer: 192.168.5.100
enabled: true
现在局域网、宿主机和 Docker 的 DNS 都统一交给 AdGuard。
Mihomo 的问题
测试 Google:
curl -I https://www.google.com --max-time 10
开始会出现:
TLS connect error
unexpected eof while reading
但显式通过 Mihomo:
curl -I -x http://192.168.5.100:7890 https://www.google.com --max-time 10
可以正常返回:
HTTP/2 200
说明代理节点没问题,问题出在透明代理。
最后给 Mihomo 增加:
sniffer:
enable: true
sniff:
HTTP:
ports:
- 80
- 8080-8880
override-destination: true
TLS:
ports:
- 443
- 8443
QUIC:
ports:
- 443
- 8443
TUN 增加:
auto-redirect: true
并删除:
dns-hijack:
- any:53
- tcp://any:53
最终 TUN:
tun:
enable: true
stack: mixed
auto-route: true
auto-redirect: true
auto-detect-interface: true
strict-route: true
route-exclude-address:
- 127.0.0.0/8
- 10.0.0.0/8
- 100.64.0.0/10
- 172.16.0.0/12
- 192.168.0.0/16
- 169.254.0.0/16
Mihomo 自己的 DNS 只监听本机:
dns:
enable: true
ipv6: false
listen: 127.0.0.1:1053
不再参与整个局域网的 DNS。
最终效果
重启 Mihomo:
mihomoctl restart
直接测试:
curl -I https://www.google.com --max-time 10
成功:
HTTP/2 200
也就是说现在的结构变成了:
AdGuard
→ 负责 DNS
Mihomo TUN
→ 负责接管流量
Sniffer
→ 从 HTTP / TLS / QUIC 中识别域名
Rules
→ 决定 DIRECT / PROXY
最重要的是 AdGuard 不再依赖 Mihomo。
以后即使:
mihomoctl stop
局域网 DNS、内部域名和国内网络依然可以正常使用,只是 Google、YouTube 等需要代理的网站无法访问。
这才是我想要的结构:
AdGuard = 基础 DNS 服务
Mihomo = 可随时开关的代理增强层
另外 Karakeep 这种带 SSRF 防护的程序不适合直接使用 Fake-IP,后续继续让它使用 AdGuard 的真实 DNS,需要代理时再单独走 Mihomo。