AC68U上配置Clash透明Proxy记录

家里路由器是华硕AC68U,已经刷了Merlin,但是里面集成的koolshare软件市场的科学Proxy工具实在难用,测速慢、无法自动切换、手动切换一次需要不下30s。Clash的Auto-UrlTest实在是香但koolshare一直没给支持,后面发现社区出了Clash透明Proxy的教程,就跟着一步步实践成功了,这里记录一下。

文件准备

  1. clash下载,在这里 下载对应版本的clash,解压得到二进制文件并重命名为clash。这里我踩到坑了,明明通过uname -a查看到AC68U的cpu是armv7,但对应的二进制死活无法运行,后面搜了一堆相关问题,有人提到了该型号可以使用armv5的版本,试了下,成功跑起来了,不清楚是不是编译的问题。

  2. ip数据库:Country.mmdb,虽然clash启动后会自动下载,但由于下载速度比较慢,建议自行准备,下载该文件,解压得到的文件改名为Country.mmdb

  3. 规则文件可以使用这个模板,加入自己的Proxy配置。由于要做透明Proxy,基本必要的选项如下:

# 透明Proxy端口号,iptables配置时会用到
redir-port: 9280

# 允许局域网的连接
allow-lan: true

# clash 的 RESTful API,用于clash-dashboard连接
external-controller: 0.0.0.0:9090

# RESTful API 的口令 (可选),当允许局域网调用RESTful API时,建议设置secret
secret: "xxxxxxxxxx"

dns:
  enable: true
  listen: 0.0.0.0:55  # 53被DNSmasq占用了,iptables配置会将53转到55
  enhanced-mode: redir-host # 或 fake-ip
  nameserver:
    - 1.2.4.8
    - 114.114.114.114
    - 223.5.5.5
    - tls://13800000000.rubyfish.cn:853
  fallback: # 与 nameserver 内的服务器列表同时发起请求,当规则符合 GEOIP 在 CN 以外时,fallback 列表内的域名服务器生效。
    - tls://13800000000.rubyfish.cn:853
    - tls://1.0.0.1:853
    - tls://dns.google:853
# 1. clash DNS 请求逻辑:
#   (1) 当访问一个域名时, nameserver 与 fallback 列表内的所有服务器并发请求,得到域名对应的 IP 地址。
#   (2) clash 将选取 nameserver 列表内,解析最快的结果。
#   (3) 若解析结果中,IP 地址属于 国外,那么 clash 将选择 fallback 列表内,解析最快的结果。
#
#   因此,我在 nameserver 和 fallback 内都放置了无污染、解析速度较快的国内 DNS 服务器,以达到最快的解析速度。
#   但是 fallback 列表内服务器会用在解析境外网站,为了结果绝对无污染,我仅保留了支持 DoT/DoH 的两个服务器。
# 
# 2. clash DNS 配置注意事项:
#   (1) 如果您为了确保 DNS 解析结果无污染,请仅保留列表内以 tls:// 或 https:// 开头的 DNS 服务器,但是通常对于国内域名没有必要。
#   (2) 如果您不在乎可能解析到污染的结果,更加追求速度。请将 nameserver 列表的服务器插入至 fallback 列表内,并移除重复项。
# 
# 3. 关于 DNS over HTTPS (DoH) 和 DNS over TLS (DoT) 的选择:
#   对于两项技术双方各执一词,而且会无休止的争论,各有利弊。各位请根据具体需求自行选择,但是配置文件内默认启用 DoT,因为目前国内没有封锁或管制。
#   DoH: 以 https:// 开头的 DNS 服务器。拥有更好的伪装性,且几乎不可能被运营商或网络管理封锁,但查询效率和安全性可能略低。
#   DoT: 以 tls:// 开头的 DNS 服务器。拥有更高的安全性和查询效率,但端口有可能被管制或封锁。
#   若要了解更多关于 DoH/DoT 相关技术,请自行查阅规范文档。

三个文件齐活:clash,config.yaml,Country.mmdb

路由器设置

  1. 在路由器管理页面中开启 ssh

  2. 上传上述仨文件,由于路由器是精简的linux系统,所以不集成包管理工具,无法安装lrzsz,得通过scp完成上传:

scp -r ~/clash admin@192.168.1.1:~/clash
  1. 给clash增加执行权限
chmod +x clash
  1. 尝试启动,看看是否有报错
./clash -d . 
  1. iptables 配置
    > iptables 配置还要学习,这里综合了几份别人的配置,不清楚有没有冗余或错误,实验来看,能正常访问网站,国内的请求好像有些慢,但确定没走代理。
# ssh 的22端口
iptables -t nat -A PREROUTING -p tcp --dport 22 -j ACCEPT

# 创建链
iptables -t nat -N Clash

# 保留地址、私有地址、回环地址 不走代理
iptables -t nat -A Clash -d 0.0.0.0/8 -j RETURN
iptables -t nat -A Clash -d 10.0.0.0/8 -j RETURN
iptables -t nat -A Clash -d 127.0.0.0/8 -j RETURN
iptables -t nat -A Clash -d 169.254.0.0/16 -j RETURN
iptables -t nat -A Clash -d 172.16.0.0/12 -j RETURN
iptables -t nat -A Clash -d 192.168.0.0/16 -j RETURN
iptables -t nat -A Clash -d 224.0.0.0/4 -j RETURN
iptables -t nat -A Clash -d 240.0.0.0/4 -j RETURN

# 9280 是clash的redir端口
iptables -t nat -A Clash -p tcp -j REDIRECT --to-ports 9280
iptables -t nat -A PREROUTING -p tcp -j Clash
# 53端口到55
iptables -t nat -A PREROUTING -p udp -m udp --dport 53 -j DNAT --to-destination 192.168.1.1:55

6 . 启动

./clash -d . &
# 或者 
nohup ./clash -d .

clash自启动或iptables配置持久化什么的,暂时就没搞了,这个也只是暂时的方案,后面整个软路由,刷lede吧,折腾没个头了。