服务器配置¶
服务器从 TOML 文件(默认:server.toml)读取其配置。
最小配置¶
[server]
bind_address = "0.0.0.0:443"
tls_cert_file = "/etc/letsencrypt/live/your-domain.com/fullchain.pem"
tls_key_file = "/etc/letsencrypt/live/your-domain.com/privkey.pem"
identity_key_file = "/etc/rvpn/server_identity.key"
完整示例¶
[server]
bind_address = "0.0.0.0:443"
tls_cert_file = "/etc/letsencrypt/live/example.com/fullchain.pem"
tls_key_file = "/etc/letsencrypt/live/example.com/privkey.pem"
identity_key_file = "/etc/rvpn/server_identity.key"
websocket_path = "/api/v1/ws"
http_port = 80
[server.network]
nat_enabled = true
dhcp_range = "10.200.0.0/24"
dns_servers = ["1.1.1.1", "8.8.8.8"]
[server.rate_limit]
max_connections_per_ip = 500
max_handshakes_per_minute = 2000
[server.tun]
enabled = true
tun_ip = "10.200.0.1/24"
mtu = 1420
interface_name = "tun0"
密钥管理¶
生成密钥¶
在设置新服务器时运行这些命令一次:
这会生成:
server_identity.key— 服务器的 Ed25519 身份密钥对。备份并保持私密。prekey-bundle.json— 公共预密钥包。分发给客户端。prekey-bundle.private.json— 私有签名预密钥材料。保持私密。
轮换预密钥¶
预密钥每 7 天自动轮换(可通过 prekey_rotation_hours 配置)。预密钥轮换时客户端不需要更新的预密钥包——仅在服务器的 identity key 更改时才需要。
TLS 证书续期¶
Let's Encrypt 证书每 90 天过期。Certbot 会自动安装续期 cron 任务。
续期后,重新加载 R-VPN 以获取新证书:
要实现自动化,请添加部署钩子:
# /etc/letsencrypt/renewal-hooks/deploy/rvpn-reload.sh
#!/bin/bash
systemctl reload rvpn-server 2>/dev/null || systemctl restart rvpn-server
诱饵网站(可选)¶
要使服务器看起来像普通 HTTPS 网站以应对随意探测,请将 decoy_root 指向包含静态 HTML 文件的目录:
任何非有效 R-VPN WebSocket 升级请求都将收到诱饵网站。
无 TLS 运行(反向代理模式)¶
如果您在 Caddy、nginx 或 HAProxy 后面运行,请省略证书/密钥文件并绑定到本地端口:
[server]
bind_address = "127.0.0.1:8443"
websocket_path = "/api/v1/ws"
# 不需要 tls_cert_file / tls_key_file — TLS 在代理层终止
请参阅反向代理设置获取完整的 Caddy、nginx 和 HAProxy 配置,包括诱饵网站设置和多服务器负载均衡。
速率限制¶
服务器对每个客户端 IP 的传入连接进行速率限制,以防止滥用。
max_connections_per_ip— 来自单个 IP 地址的最大并发连接数。max_handshakes_per_minute— 每个 IP 每分钟最大新握手尝试次数。
SOCKS5 客户端需要更高的限制¶
[!WARNING] 在旧版(非多路复用)SOCKS5 模式下,协议为**每个 TCP 流打开一个 WebSocket 连接**。一个现代浏览器页面可以轻松打开 20–50 个并发连接(HTML、CSS、JS、图片、API 调用)。如果速率限制过低,连接将被静默丢弃,页面将无法加载。
为旧版 SOCKS5 客户端提供服务时,请将
max_connections_per_ip设置为**至少 500**,max_handshakes_per_minute设置为**至少 2000**。根据每个用户的预期并发连接数适当调高。[!NOTE] 多路复用 SOCKS5 模式(单个 WebSocket,多个流)是现代客户端的默认模式。由于所有流共享一个连接,它完全消除了速率限制问题。在客户端配置中设置
multiplex = true以使用它。
当连接被限速时,服务器会在调试级别记录 Rate limited: <IP> 并关闭连接而不返回错误响应。
所有选项¶
请参阅服务器配置参考获取每个可用设置的完整列表。