SOCKS5 代理模式¶
SOCKS5 模式是使用 R-VPN 的默认且最灵活的方式。它运行一个本地 SOCKS5 代理,各个应用可以指向该代理——不会影响您机器上的其他流量。
启动代理¶
默认监听地址:127.0.0.1:1080
运行后将看到:
配置应用¶
macOS — 系统级代理¶
系统设置 → 网络 → 您的连接 → 详细信息 → 代理
启用 **SOCKS 代理**并设置:
- 服务器:127.0.0.1
- 端口:1080
这会将所有系统流量(Safari、curl 等)通过 VPN 路由。
Firefox¶
设置 → 常规 → 网络设置 → 手动代理配置
- SOCKS 主机:
127.0.0.1 - 端口:
1080 - 选择 SOCKS v5
- 勾选 使用 SOCKS v5 时代理 DNS 以防止 DNS 泄漏(如果您已启用 DNS 代理,则不需要)
Chrome / Brave¶
Chrome 在 macOS 上使用系统代理。在 Linux 上,使用 SwitchyOmega 扩展:
- 安装 SwitchyOmega
- 创建新配置文件 → 协议:SOCKS5,服务器:
127.0.0.1,端口:1080 - 当您想使用 VPN 时切换到该配置文件
curl¶
Linux — 系统级(环境变量)¶
export ALL_PROXY=socks5://127.0.0.1:1080
export HTTPS_PROXY=socks5://127.0.0.1:1080
export HTTP_PROXY=socks5://127.0.0.1:1080
添加到 ~/.bashrc 或 ~/.zshrc 以跨会话保持。
分流隧道¶
分流隧道让您仅将特定流量通过 VPN 路由,而其余流量直接连接。当您希望通过 VPN 访问被屏蔽的网站,同时保持本地网络和国内流量不受影响时,这非常有用。
内置中国绕过¶
在 client.toml 中启用自动中国 IP 绕过的分流隧道:
启用后,发往中国 IP 的流量(基于 APNIC 数据——约 8800 个网络)直接连接,其他所有内容通过 VPN 路由。
自定义绕过网络¶
bypass-networks.txt——每行一个 CIDR:
拦截广告¶
在 DNS 层面拦截已知广告和追踪器域名。不发送任何字节,不建立任何连接。
DNS 代理¶
**重要:**如果没有 DNS 代理,即使使用 SOCKS5 代理,您的 DNS 查询也可能泄漏到您的 ISP。请参阅 DNS 泄漏预防 获取完整说明。
默认情况下,DNS 查询由您的系统 DNS 服务器解析——在 VPN 隧道**之外**。这意味着您的 ISP 可以观察到您查找了哪些域名,即使您的流量是通过代理的。
R-VPN 包含一个内置 DNS 代理,可通过相同的加密 WebSocket 隧道在服务器端解析所有查询。它也感知分流隧道:被绕过的域名在本地解析,被拦截的广告/追踪器域名立即返回 NXDOMAIN,不会发送到网络。
启用 DNS 代理¶
**注意:**端口 53 需要 root 或
CAP_NET_BIND_SERVICE。对于无权限测试,请使用端口5353(见下文)。
重启客户端——您应该看到:
macOS — 系统级¶
使用 sudo 运行客户端(以便绑定端口 53),然后将 127.0.0.1 添加为您的 DNS 服务器:
系统设置 → 网络 → 您的连接 → 详细信息 → DNS → + → 127.0.0.1
或通过命令行(将 Wi-Fi 替换为您的接口名称):
完成后恢复原始 DNS:
Linux — 系统级¶
以 root 身份运行客户端(或具有 CAP_NET_BIND_SERVICE 能力),并设置 listen_address = "127.0.0.1:53",然后将解析器指向它。
/etc/resolv.conf(直接):
systemd-resolved——添加到 /etc/systemd/resolved.conf:
sudo systemctl restart systemd-resolved
无权限测试(端口 5353)¶
验证它是否工作:
响应将来自您的 VPN 服务器,而不是您的本地 ISP。
连接模式¶
SOCKS5 代理支持两种连接到服务器的模式:
多路复用模式(默认)¶
所有 SOCKS5 流共享**单个 WebSocket 连接**,并共享一个 DoubleRatchet 会话。每个 SOCKS5 CONNECT 通过同一隧道上的 CreateFlow/CloseFlow 控制消息创建逻辑“流”。
优点: - 单次 TLS 握手,单次 X3DH 密钥交换 — 约 250ms 开销,而旧模式每连接约 600ms - 更低的服务器资源使用(一个 WebSocket,一个 ratchet,而非每个流一个) - 更适合高流数场景(浏览器可打开 100+ 连接) - 服务器每个多路复用会话支持最多 2000 个并发流
工作原理:
1. 第一个 SOCKS5 CONNECT 打开多路复用 WebSocket 隧道({server_path}/mux)
2. 执行 X3DH 握手以建立共享的 DoubleRatchet
3. 后续流通过同一隧道发送 CreateFlow 控制消息
4. 服务器以 FlowCreated 确认响应,然后数据通过多路复用帧流动
配置:
要显式覆盖多路复用端点:
旧版模式(回退)¶
每个 SOCKS5 流打开自己独立的 WebSocket 连接,并执行自己的 X3DH 握手和 DoubleRatchet。这是原始行为。
何时使用: - 故障排除 — 隔离问题是特定于流还是隧道范围 - 与没有多路复用端点的旧版服务器兼容
模式对比¶
| 多路复用 | 旧版 | |
|---|---|---|
| 每会话 WebSocket 数 | 1 | 每个流 1 个 |
| X3DH 握手次数 | 1 | 每个流 1 次 |
| 服务器流限制 | 最多 2000 | 无限制 |
| 服务器端 WS 连接数 | 1 | N |
| 最适合 | 浏览器、重载网站 | 调试、旧服务器 |
故障排除提示:**如果您在多路复用模式下遇到连接问题(例如某些应用无法加载、重载网站超时),请尝试切换到旧版模式,以隔离问题是隧道范围还是特定于流:
请注意,旧版模式为**每个 TCP 流打开一个 WebSocket。在繁忙网络(例如多标签浏览器)上,这可能会很快耗尽服务器的max_connections_per_ip限制。如果您定期使用旧版模式,请相应提高服务器的速率限制:
更改监听地址¶
要监听特定接口(例如与本地网络上的其他设备共享代理):
**安全注意:**仅在可信网络上暴露 SOCKS5 端口。默认没有身份验证。
要添加身份验证:
[socks5]
listen_address = "0.0.0.0:1080"
auth_enabled = true
auth_username = "user"
auth_password = "changeme"
作为服务运行¶
Linux(systemd)¶
[Unit]
Description=r-vpn Client
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=YOUR_USER
ExecStart=/usr/local/bin/rvpn -c /etc/rvpn/client.toml
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
FreeBSD(rc.d)¶
创建 /usr/local/etc/rc.d/rvpn_client: