Clash旁路网关设置

前言

在不改变现有网络拓扑的情况下想实现全终端留学,增加一个旁路网关是一个好办法,下文将会介绍具体配置方法

下载Clash

下载最新版本的clash
然后用gzip命令解压

⚠注意,19.0以下的Clash不支持TPROXY方式的UDP转发

开启转发功能

临时开启

1
echo "1" > /proc/sys/net/ipv4/ip_forward

永久开启

1
echo "net.ipv4.ip_forward= 1" >> /etc/sysctl.conf

立即生效

1
sysctl -p

设置服务

创建服务

1
vi /lib/systemd/system/clash.service

写入内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
Description=clash service

[Service]
Type=simple
StandardError=journal
User=clash
Group=clash
CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_NET_ADMIN
AmbientCapabilities=CAP_NET_BIND_SERVICE CAP_NET_ADMIN
ExecStart=/home/clash/clash -d /home/clash
LimitNPROC=500
LimitNOFILE=1000000

[Install]
WantedBy=multi-user.target

⚠可选添加名为clash的用户,或者替换成其它非root用户

加入服务列表

1
2
systemctl daemon-reload
systemctl enable clash

运行服务以及查看日志

1
2
systemctl start clash
systemctl status clash

测试clash是否配置正确

1
curl -x socks5://127.0.0.1:7891 google.com

iptables设置

添加标记路由

1
2
ip rule add fwmark 0x1 table 100
ip route add local 0.0.0.0/0 dev lo table 100

UDP重路由

1
2
3
4
5
6
iptables -t mangle -N P_MARK  #新建表
iptables -t mangle -A P_MARK -d 127.0.0.1 -j RETURN
iptables -t mangle -A P_MARK -d 192.168.0.0/16 -j RETURN #放行局域网数据
iptables -t mangle -A P_MARK -d 255.255.255.255 -j RETURN #放行广播数据包
iptables -t mangle -A P_MARK -m owner --uid-owner clash -j RETURN #放行clash发出的数据
iptables -t mangle -A P_MARK -p udp -j MARK --set-mark 0x1 #标记并重路由

TCP转发

1
2
3
4
iptables -t nat -N TCP_REDIR
iptables -t nat -A TCP_REDIR -d 127.0.0.1/8 -j RETURN
iptables -t nat -A TCP_REDIR -d 192.168.0.0/16 -j RETURN
iptables -t nat -A TCP_REDIR -p tcp -j REDIRECT --to-ports 7892 #转发TCP到指定端口

UDP转发

1
2
3
4
5
iptables -t mangle -N UDP_REDIR
iptables -t mangle -A UDP_REDIR -d 127.0.0.1 -j RETURN
iptables -t mangle -A UDP_REDIR -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A UDP_REDIR -d 255.255.255.255 -j RETURN
iptables -t mangle -A UDP_REDIR -p udp -j TPROXY --on-port 7892 --tproxy-mark 0x1/0x1 #按标记路由转发UDP到指定端口

应用规则

1
2
3
4
iptables -t mangle -A PREROUTING -j UDP_REDIR   #转发来自其它设备的UDP包
iptables -t mangle -A OUTPUT -j P_MARK #重路由本机发出的UDP包
iptables -t nat -A PREROUTING -j TCP_REDIR #转发来自其它设备的TCP包
iptables -t nat -A OUTPUT -m owner ! --uid-owner clash -j TCP_REDIR #转发本机非clash的流量

感谢您的阅读,本文由 NewHanly 版权所有。如若转载,请注明出处:NewHanly(http://newhanly.com/2020/04/28/clash/
简单理解iptables