跳转到内容

全隧道(TUN)模式

TUN 模式创建虚拟网络接口,将机器上所有 IP 流量都通过 VPN 路由——而不仅是支持 SOCKS5 的应用。这等同于传统 VPN。

注意: TUN 模式需要 root 或管理员权限才能创建网络接口。


TUN 模式通过 client.toml 中的 [tun] 段启用,而不是命令行参数:

[tun]
enabled = true

使用你惯常的命令连接(无需 --tun 参数):

Terminal window
sudo rvpn -c ~/.config/rvpn/client.toml

你的客户端 IP 地址和网关 IP 由服务器通过 VirtualIp 消息动态分配。无需在配置中指定它们。服务器同时提供隧道流量使用的 DNS 服务器。


client.toml 中的 [tun] 段支持以下字段:

字段默认值描述
enabledfalse设为 true 以启用 TUN 模式。
interface_name(自动)TUN 接口名。留空则由操作系统分配——通常在 macOS 上为 utun0,在 Linux/FreeBSD 上为 tun0。若为防火墙规则需要指定名称,请设为具体值。
mtu1420TUN 接口的 MTU。较低值可减少高延迟链路上的分片。
routes["0.0.0.0/0"]通过隧道发送的路由。默认路由所有流量。若要分流路由,请指定具体 CIDR。
[tun]
enabled = true
# interface_name = "vpn0" # optional, OS-assigned by default
mtu = 1420
routes = ["0.0.0.0/0"]

除了路由一切外,你也可以只路由特定子网:

[tun]
enabled = true
routes = [
"91.108.0.0/16", # Telegram
"149.154.0.0/16", # Telegram
"172.217.0.0/16", # Google
]

分流在 TUN 模式下的工作方式与 SOCKS5 模式相同。启用 builtin_bypass_countries = ["CN"] 后,中国 IP 会自动从隧道路由中排除:

[split_tunnel]
enabled = true
builtin_bypass_countries = ["CN"]

这意味着国内的中国流量继续走你的正常连接,其他一切通过 VPN。


在 Linux 上,rvpn 二进制需要创建 TUN 接口并修改路由表。可以以 root 身份运行:

Terminal window
sudo rvpn -c /etc/rvpn/client.toml

或授予二进制所需能力:

Terminal window
sudo setcap cap_net_admin+ep /usr/local/bin/rvpn
rvpn -c ~/.config/rvpn/client.toml

在 macOS 上,创建 TUN 接口需要提升的权限。请使用 sudo 运行或配置 LaunchDaemon:

Terminal window
sudo rvpn -c ~/.config/rvpn/client.toml

检查你的出口 IP:

Terminal window
curl https://api.ipify.org

返回的 IP 应为你的 VPN 服务器 IP。

检查接口已启用(具体名称各异):

Terminal window
# macOS
ifconfig utun0
# Linux / FreeBSD
ip -brief addr show # Linux
ifconfig tun0 # FreeBSD
ip route show