Clash大家一定都不陌生。Clash提供的大量丰富的网络功能可以为上网提供定制化的良好体验,其中tun模式就是特色之一。
本文将会详细说明如何在Linux和Windows平台上手工配置tun模式。也许你已经在使用Clash for Windows
,手动配置是因为我并不喜欢cfw那样的工具,我更喜欢纯粹一点的工具。
什么是tun
tun是操作系统上的一种虚拟网络设备,可以让用户处理网络中的三层数据包(例如IP包)。
与此差不多的还有tap,但tap处理的是二层数据包。
只处理三层数据包这就决定了tun
性能往往比tap
要好一些。
在Windows
平台下,系统内核并不默认提供tun功能,需要安装 Wintun 这个第三方驱动才能支持
在Windows下配置Clash的tun模式
首先当然是下载Clash,需要注意的是Clash有标准版和高级版,tun模式只在高级版提供。下载地址
下载之后解压,并将上面下载好的Wintun.dll
和clash
的可执行文件放在一起。需要注意的是程序位数必须相同。
编写配置文件
也许你已经有了一个配置文件,那就先说明启用tun模式需要添加的内容
1 2 3 4 5 6 7
| tun: enable: true stack: system dns-hijack: - 198.18.0.2:53 auto-route: true auto-detect-interface: true
|
在你的配置文件内添加这部分内容即可启用tun模式,但是这还没完,你必须配置一个有效的DNS服务器。
添加下面的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| dns: enable: true enhanced-mode: redir-host listen: :53 default-nameserver: - 210.5.56.145 nameserver: - 114.114.114.114 fallback: - https://8888.google/dns-query - https://1.0.0.1/dns-query - https://dns.twnic.tw/dns-query - https://doh.opendns.com/dns-query - https://dns-nyc.aaflalo.me/dns-query - https://dns.aa.net.uk/dns-query - https://sg.adhole.org/dns-query - https://kaitain.restena.lu/dns-query - https://hydra.plan9-ns1.com/dns-query - https://jp.tiar.app/dns-query - https://doh.asia.dnswarden.com/adblock fallback-filter: geoip: true geoip-code: CN
|
需要保证本地的53
端口没有被占用。fallback
内的服务器地址是我从互联网上搜索得到可以直连的服务器。服务器地址什么的可以根据自己的需要更改.
到这里其实已经可以用了,但是对于不使用cfw的人来说还需要一个管理页面
添加下面的代码
1 2 3 4
| secret: "" external-controller: 127.0.0.1:9090 external-ui: ui mode: rule
|
然后下载 yacd 并创建ui
文件夹,将文件放到文件夹内,打开 http://127.0.0.1:9090/ui/ 即可看到管理界面。
需要注意的是要下载release内已经打包好的管理面板文件,不是源代码
当然可能大家也有分流的需求,下面是我的配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| proxy-groups: - name: PROXY type: select proxies: - ..... rule-providers: reject: type: http behavior: domain url: https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt path: ./ruleset/reject.yaml interval: 86400 icloud: type: http behavior: domain url: https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/icloud.txt path: ./ruleset/icloud.yaml interval: 86400 apple: type: http behavior: domain url: https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/apple.txt path: ./ruleset/apple.yaml interval: 86400 google: type: http behavior: domain url: https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/google.txt path: ./ruleset/google.yaml interval: 86400 proxy: type: http behavior: domain url: https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt path: ./ruleset/proxy.yaml interval: 86400 direct: type: http behavior: domain url: https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt path: ./ruleset/direct.yaml interval: 86400 cncidr: type: http behavior: ipcidr url: https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/cncidr.txt path: ./ruleset/cncidr.yaml interval: 86400 lancidr: type: http behavior: ipcidr url: https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/lancidr.txt path: ./ruleset/lancidr.yaml interval: 86400 tld-not-cn: type: http behavior: domain url: "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/tld-not-cn.txt" path: ./ruleset/tld-not-cn.yaml interval: 86400 gfw: type: http behavior: domain url: "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/gfw.txt" path: ./ruleset/gfw.yaml interval: 86400 greatfire: type: http behavior: domain url: "https://fastly.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/greatfire.txt" path: ./ruleset/greatfire.yaml interval: 86400
rules: - IP-CIDR,1.0.0.1/32,DIRECT - IP-CIDR,101.101.101.101/32,DIRECT - IP-CIDR,8.8.8.8/32,DIRECT - RULE-SET,icloud,DIRECT - RULE-SET,apple,DIRECT - RULE-SET,google,DIRECT - RULE-SET,proxy,PROXY - RULE-SET,gfw,PROXY - RULE-SET,greatfire,PROXY - GEOIP,CN,DIRECT - GEOIP,HK,DIRECT - GEOIP,TW,DIRECT - MATCH,PROXY
|
可以按需修改
在Linux下配置
同样的,你需要下载clash高级版的Linux版本,不过你并不需要单独下载Wintun
,因为Linux
已经在内核支持了这个功能。
和Windows一样,你也需要像上面一样更改配置文件,与Windows不同的是,在Linux下你需要手动将DNS
服务器指定为本地
以Ubuntu为例,修改/etc/systemd/resolved.conf
1 2 3
| DNS=127.0.0.1 FallbackDNS=114.114.114.114 DNSStubListener=no
|
然后重启服务
1
| systemctl restart systemd-resolved.service
|
然后启动clash即可
启动
将配置文件重命名为config.yaml
并和可执行文件放在一起。打开终端在当前目录输入
1
| .\clash-windows-amd64.exe -d ./
|
无论是哪一个系统,都需要以管理员权限运行
配合WireGuard使用
可能有人需要这个功能
快速搭建wg服务器
由于wg已经集成到了内核中,所以搭建变得非常简单。这里使用NetworkManager
的nmtui作为搭建演示
启用ip转发
1 2 3 4 5 6
| ufw disable
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf echo "net.ipv4.conf.all.proxy_arp = 1" >> /etc/sysctl.conf sysctl -p /etc/sysctl.conf
|
安装工具,生成私钥和公钥
1 2 3 4 5
| apt install wireguard-tools
wg genkey
echo "私钥" | wg pubkey
|
使用nmtui
编辑链接,到最底下找到wg
并添加新链接,按照下面的图片操作
设备
可以填自己喜欢的接口名字,地址
也可以填自己喜欢的
将刚刚生成的公钥发送到手机,然后从手机得到手机生成的公钥,然后添加peer
直接保存即可,在启动链接部分关闭链接并重新开启即可让手机链接。
手机端配置
同样的,将手机的局域网ip设置成和上面peer相同的ip 172.25.0.2
,并将 DNS
服务器设置成服务器配置的内网ipv4 172.25.0.1
。
添加一个peer,公钥设置为刚刚在服务器生成的公钥并填写服务器ip和端口,路由的ip地址设置为 0.0.0.0/0,::/0
这样就可以让所有网络流量经过服务器
这时候启动按上面配置好的clash,你的客户端也就能使用clash的网络了