前言
在不改变现有网络拓扑的情况下想实现全终端留学,增加一个旁路网关是一个好办法,下文将会介绍具体配置方法
下载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
| 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的流量
|