前言
在不改变现有网络拓扑的情况下想实现全终端留学,增加一个旁路网关是一个好办法,下文将会介绍具体配置方法
下载Clash
下载最新版本的clash
然后用gzip命令解压
⚠注意,19.0以下的Clash不支持TPROXY方式的UDP转发
开启转发功能
临时开启
echo "1" > /proc/sys/net/ipv4/ip_forward
永久开启
echo "net.ipv4.ip_forward= 1" >> /etc/sysctl.conf
立即生效
sysctl -p
设置服务
创建服务
vi /lib/systemd/system/clash.service
写入内容
[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用户
加入服务列表
systemctl daemon-reload
systemctl enable clash
运行服务以及查看日志
systemctl start clash
systemctl status clash
测试clash是否配置正确
curl -x socks5://127.0.0.1:7891 google.com
iptables设置
添加标记路由
ip rule add fwmark 0x1 table 100
ip route add local 0.0.0.0/0 dev lo table 100
UDP重路由
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转发
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转发
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到指定端口
应用规则
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的流量
