无名阁

美好的生活需要用心记录

在本地电脑使用clash的tun版本中的realip模式

2020-5-9 笑看风云 linux知识

之前tun版本的clash想要使用realipIP只能在网关或者旁路由上才能使用,之前尝试在本机使用总是失败,今天结合之前的教程总算解决了不能在本地使用的方法.
第一步,创建ipset规则
sudo ipset create realip hash:net
sudo ipset add realip 192.168.0.0/16
sudo ipset add realip 169.254.0.0/16
sudo ipset add realip 240.0.0.0/4
sudo ipset add realip 127.0.0.0/8
sudo ipset add realip 172.16.0.0/12
sudo ipset add realip 10.0.0.0/8
sudo ipset add realip 224.0.0.0/4

第二步,创建iptables规则
sudo iptables -t mangle -N clash
sudo iptables -t mangle -A clash -m set --match-set realip dst -j RETURN
sudo iptables -t mangle -A clash -j MARK --set-mark 0x162
sudo iptables -t mangle -A OUTPUT -j clash 

第三步,创建启动服务
[Unit]
Description=tun-clash proxy
Documentation=https://github.com/Dreamacro/clash
After=network.target

[Service]
Type=simple
#User=clash
#Group=clash
Slice=tun-clash.slice
ExecStart=/usr/local/bin/tun_clash -d /opt/clash 
#ExecStartPost=/usr/bin/iptables -t mangle -I clash -m cgroup --path /tun.slice/tun-clash.slice/tun-clash.service -j RETURN
ExecStartPost=/opt/start_tun_clash.sh
ExecStopPost=/usr/bin/iptables -t mangle -D clash -m cgroup --path /tun.slice/tun-clash.slice/tun-clash.service -j RETURN
Restart=always
RestartSec=1s
StandardOutput=file:/tmp/tun_clash.log

[Install]
WantedBy=default.target

第四步,获取启动服务的cgroup地址
systemctl status tun-clash.service

在我的电脑上输出信息是这样的
➜  ~ systemctl status tun-clash.service 
● tun-clash.service - tun-clash proxy
     Loaded: loaded (/etc/systemd/system/tun-clash.service; enabled; vendor preset: disabled)
     Active: active (running) since Sat 2020-05-09 18:48:36 CST; 35min ago
       Docs: https://github.com/Dreamacro/clash
    Process: 66743 ExecStartPost=/opt/start_tun_clash.sh (code=exited, status=0/SUCCESS)
   Main PID: 66742 (tun_clash)
      Tasks: 15 (limit: 18984)
     Memory: 33.8M
     CGroup: /tun.slice/tun-clash.slice/tun-clash.service
             └─66742 /usr/local/bin/tun_clash -d /opt/clash

5月 09 18:48:35 arch-linux systemd[1]: Starting tun-clash proxy...
5月 09 18:48:36 arch-linux systemd[1]: Started tun-clash proxy.

在服务输出中可以看到cgroup地址是/tun.slice/tun-clash.slice/tun-clash.service

第五步,创建启动脚本
#!/bin/bash
sleep 1
iptables -t mangle -I clash -m cgroup --path /tun.slice/tun-clash.slice/tun-clash.service -j RETURN
ip route add default dev utun table 0x162
exit

注意,这脚本保存位置和文件名就是第四步中ExecStartPost选项中指定的位置.
接着在/etc/rc.local文件中添加下面的内容:
ip rule add fwmark 0x162 table 0x162

保存

第六步,启动服务,然后修改电脑的dns为198.18.0.1
好了现在可以通过透明代理愉快的玩游戏了.

标签: 网络 Linux 网络代理 iptables clash

et_highlighter51