Clash 旁路由透明网关

Sep 12, 2022 • 预计阅读时间 2 分钟

正常的客户端上网流程:

客户端 => 路由器 => 互联网

加上旁路由后,流程变成:

客户端 => 旁路由(透明) => 路由器 => 互联网

客户端的 DNS网关的 IP 都指向旁路由,流量由旁路由转发。

使用树莓派做旁路由,Clash 安装在树莓派上,树莓派运行的系统是 Debian。

Clash 开启透明代理:

redir-port: 7892
bind-address: '*'
allow-lan: true
tun:
  enable: true
  stack: system
  dns-hijack:
    - any:53
  auto-redir: true
  auto-route: true
  auto-detect-interface: true

如果使用 eBPF ,需要关闭 auto-route,手动指定接口为 eth0

tun:
  enable: true
  stack: system
  dns-hijack:
    - any:53
  auto-redir: true
  auto-route: false
  auto-detect-interface: false
ebpf:
  redirect-to-tun:
    - eth0
interface-name: eth0
routing-mark: 0x233

国内网络对于 UDP 流量并不友好,建议禁用 QUIC 协议,使其自动回退到 HTTP/2,配置如下:

script:
  shortcuts:
    quic: network == 'udp' and dst_port == 443
rules:
  - SCRIPT,quic,REJECT

配置 Dashboard 界面,方便查看日志:

cd /usr/local/etc/clash
git clone -b gh-pages --depth 1 https://github.com/Dreamacro/clash-dashboard dashboard

修改 Clash 的配置文件 config.yaml

external-controller: 0.0.0.0:9090
external-ui: dashboard

Dashbaord 的访问地址: http://172.30.30.254:9090/ui

修改配置后需要重启 Clash 使配置生效:

sudo systemctl restart clash

Debian 开启 IPv4 的数据包转发 /etc/sysctl.conf

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

使用 nftables 配置转发规则,先安装:

sudo apt install nftables

配置转发规则 /etc/nftables.d/clash.nft

#!/usr/sbin/nft -f

flush ruleset

define lan = {
  10.0.0.0/8,
  172.16.0.0/12,
  192.168.0.0/16
}

table ip nat {
  chain proxy {
    ip daddr $lan return
    ip protocol tcp redirect to :7892
  }

  chain prerouting {
    type nat hook prerouting priority 0; policy accept;
    jump proxy
  }
}

/etc/nftables.conf 的内容如下:

#!/usr/sbin/nft -f

flush ruleset

include "/etc/nftables.d/*.nft"

把 tcp 转发给 Clash 代理,这样所有流量都可以被 Clash 的规则所控制。

开启 nftables 服务(如果需要):

sudo systemctl enable nftables

启动 nftables 服务:

sudo systemctl start nftables

树莓派上的旁路由配置已经完成了,还需要修改路由器的 DHCP 配置,使分发给客户端的 DNS 和网关的 IP 是树莓派的地址。

我的路由器是 OpenWRT 系统,配置 DHCP 下发的网关和 DNS 为旁路由的地址(10.2.2.254):

Interfaces » LAN » DHCP Server » Advanced Settings » DHCP-Options

3,10.2.2.254
6,10.2.2.254

另外,还需要禁用 IPv6,因为 Clash 和树莓派的配置都是 IPv4 的。

树莓派网卡不支持硬件分流(offloading):

sudo apt install ethtool

查看网卡信息:

$ sudo ethtool -k eth0

tcp-segmentation-offload: off
	tx-tcp-segmentation: off [fixed]
	tx-tcp-ecn-segmentation: off [fixed]
	tx-tcp-mangleid-segmentation: off [fixed]
	tx-tcp6-segmentation: off [fixed]
clash
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

使用 simctl 安装 tvOS 和 watchOS 模拟器

aria2 并发下载