clash TUN模式 - mj5219054/clash_for_windows_pkg GitHub Wiki
Tun 模式可以通过新建一个 Tun 虚拟网卡接受操作系统的三层流量,从而拓展 Clash 入口(inbound) 转发能力。Tun 模式有以下潜在的优点:
- 提升 Clash 处理 UDP 的能力 从Inbound发回三层流量时,IP 源地址可由 Clash 控制,因此在使用 socks5或shadowsoks协议时,可以表达 socks5/ss 协议发回的 UDP 流量中不同的源IP地址。因此,有可能通过 OutBound 代理实现 STUN因此,对在代理条件下很多游戏的体验会有提升。
- 可以劫持任何三层流量,Clash 可以在任何IP地址和任何端口提供某些服务,非常灵活因而可以实现 DNS 劫持
- 可以与操作系统的网络栈结合,利用 iptables 等组件的能力 实现
Tun 模式的核心问题有两个:
使用操作系统的 API 建立 Tun NIC(Network Interface Card),得到 IP Packet
由三层IP Packet 重组传输层 TCP stream / UDP Packet,交由 Clash 进行转发
其中,创建 NIC 并得到三层网络包可以由一系列系统调用实现。而由三层流量重组四层流量需要用户态网络栈。因为 Clash 使用 Go 语言,PR393 使用了 gvisor 的网络栈。gvisor 的网络栈前身是 netstack 。 配置
首先在setting中配置相关的策略
然后编写相关的策略,下图是我写的内容
当然,也可以选择JavaScript作为自己的脚本语言。
module.exports.parse = async ( { content, name, url }, { axios, yaml, notify } ) => { const extra = { dns: { enable: true, listen: ":53", nameserver: ["8.8.8.8"], }, }; return { ...content, ...extra }; };
参考样例: 当然,也可以选择JavaScript作为自己的脚本语言。
参考样例:
CFW 调用用户定义的parse方法时,会传入 2 个参数,分别是配置文件元数据以及工具类对象/方法
配置文件元数据
包括:
content:yaml 格式化后的 JavaScript 对象
name:配置文件文件名
url:配置文件下载地址
当出现绿色的小地球就代表了成功,成功之后即可做一个底层的代理,可以ping通google哦。
TUN模式
在常规(General)页面中找到服务模式(Service Mode),点击后面的管理(Manage)。点击之后会弹出小窗口。
注意:下列代码中的空格缩进,一定要复制完整代码,不要删除代码前面的空格。 mixin:
- hosts:
-
'mtalk.google.com': 108.177.125.188
-
'services.googleapis.cn': 74.125.203.94
-
'raw.githubusercontent.com': 151.101.76.133
- dns:
-
enable: true
-
default-nameserver:
-
- 223.5.5.5
-
- 1.0.0.1
-
ipv6: false
-
nameserver: - https://dns.rubyfish.cn/dns-query - https://223.5.5.5/dns-query - https://dns.pub/dns-query fallback: - https://1.0.0.1/dns-query - https://public.dns.iij.jp/dns-query - https://dns.twnic.tw/dns-queryenhanced-mode: redir-host #fake-ip
-
fallback-filter:
-
geoip: true
-
ipcidr: - 240.0.0.0/4 - 0.0.0.0/32 - 127.0.0.1/32 domain: - +.google.com - +.facebook.com - +.twitter.com - +.youtube.com - +.xn--ngstr-lra8j.com - +.google.cn - +.googleapis.cn - +.gvt1.com
- tun:
- enable: true
- stack: gvisor
- dns-hijack:
-
- 198.18.0.2:53
- macOS-auto-route: true
- macOS-auto-detect-interface: true # 自动检测出口网卡