惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
T
The Blog of Author Tim Ferriss
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog
L
LangChain Blog
博客园_首页
Vercel News
Vercel News
月光博客
月光博客
B
Blog RSS Feed
S
SegmentFault 最新的问题
博客园 - Franky
C
Check Point Blog
A
About on SuperTechFans
Stack Overflow Blog
Stack Overflow Blog
J
Java Code Geeks
F
Fortinet All Blogs
Recent Announcements
Recent Announcements
Y
Y Combinator Blog
罗磊的独立博客
D
Docker
酷 壳 – CoolShell
酷 壳 – CoolShell
云风的 BLOG
云风的 BLOG
人人都是产品经理
人人都是产品经理
WordPress大学
WordPress大学

WAYJAM

告别 NPM Token:迁移到 Trusted Publishing 全记录 Sing-box:IPv6 优先出站与 Netflix 强制 IPv6 分流 [All In One] HomeLab 虚拟化 iKuai + Mihomo - IPv6 支持 [All In One] HomeLab 虚拟化 iKuai + Mihomo LiteLLM 多模型 API 中转 MacOS Bootstrp with Nix Fluency Support Full Rss [All In One] PVE 中 OpenWrt LXC 重启问题 Tabby 终端配置以及配置全平台同步 Cloudflare Tunnel + Nginx Proxy Manager:服务穿透 PVE 7 升级 8 笔记 PVE 安装 Android x86 & 安装 Magisk Fly.io 部署 Artalk 评论系统 [All In One] HomeLab 2023 搭建总结 [All In One] 轻量的文件 & 媒体服务器配置 [All In One] R71s 主机散热改造 [All In One] PVE LXC 安装 OpenWrt 软路由以及网络规划 [All In One] 安装 Proxmox VE 7.4 从零开始配置Rime - 2023 Self Hosted Bitwarden + Cloudfare HTTPS Debian NFS Server 以及 MacOS Client 使用 Kind 部署 Prow 手记 BackBlaze B2 + Cloudfare Worker 图床 PicGo Amazon S3 插件 自动给模板生成 Inline-Svg Hugo Theme WeUI 发布! Hugo Theme Fluency 发布! Docker Clash 和 透明代理 有限状态机与分布式熔断器 「家庭娱乐」N1刷 EmuELEC 做游戏盒子
AdguardHome 和 Clash 透明代理配合使用
2021-04-17 · via WAYJAM

image-20210417112325830

配置

我的方案如上图是 Adguard 作为 Clash 的上游 DNS。然后将路由的 DHCP 配置的 DNS 服务器改为 Clash 的 DNS 地址即可。

首先启动 Adguard:

docker run -d \
--name adguard \
--restart unless-stopped \
--log-opt max-size=1m \
-v /root/adguard/work:/opt/adguardhome/work \
-v /root/adguard/conf:/opt/adguardhome/conf \
-p 5656:53/tcp \
-p 5656:53/udp \
-p 3000:3000 \
-p 3001:80 \
adguard/adguardhome

然后 Clash 配置入口 DNS 为 5353 端口,然后设置 nameserver 上游 DNS 为 Adguard 地址。

dns:
  enable: true
  listen: "0.0.0.0:5353"
  ipv6: false
  nameserver:
    - "127.0.0.1:5656"

然后使用 iptables 将 53 端口流量转发到实际的 5353 端口:

iptables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to 5353

部分发行版 53 端口可能已被 systemd-resolved 占用,先改掉:

vi /etc/systemd/resolved.conf

DNSStubListener=no  #取消注释,把yes改为no

问题

但是发现 Clash 的 DNS 查询全部超时失败了,直接使用 AdguardHome 的 DNS 查询也超时。排查日志发现:

  1. Clash 代理流量需要连接代理服务器,我的代理服务器配置的是域名,然后 DNS 查询这个代理服务器的域名失败了
  2. AdguardHome 连接 DOT/DOH DNS 查询时连接失败

想了很久没有想出原因,后来尝试进入 AdguardHome 容器使用 nc 连接 IP 调试:

nc 1.2.3.4 80

# 然后在 clash 日志则出现连接日志
time="2020-11-01T05:59:39Z" level=info msg="[TCP] 172.17.0.3:38804 --> 1.2.3.4 match GeoIP(CN) using Domestic[DIRECT]"

由于我这台旁路由配置了透明代理(详细见Docker Clash 和 透明代理),使用iptables 规则接管了全部网络流量,导致 AdguardHome 容器也走了代理流量,但 Clash 代理服务器的域名解析又依赖 AdguardHome DNS才能初始化代理。解决方案是:

iptables -t nat -I PREROUTING -p udp --dport 53 -d 192.168.0.0/16 ! -i docker0 -j REDIRECT --to 5353 # 只有局域网流量以及非 docker0 网卡的流量才重定向 53 端口

# 流量转发排除 docker0 网卡,即旁路由的所有 docker 容器都不再经过 clash
iptables -t nat -A PREROUTING -p tcp ! -i docker0 -j CLASH
iptables -t mangle -A PREROUTING -p udp ! -i docker0 -j CLASH
iptables -t nat -I CLASH -i docker0 -j RETURN
iptables -t mangle -I CLASH -i docker0 -j RETURN

使用效果

当然只用 Clash 也可以做到去污染、去广告等效果,但配置比 Adguard 麻烦且应用配置需重启服务。以下是 Adguard 使用效果。

image-20210417110255625