跳转至

服务器配置参考

server.toml 中所有字段的完整参考。


顶级字段

所有字段位于 [server] 部分,或在根级别(两者都被接受)。

字段 类型 默认值 描述
bind_address string "0.0.0.0:443" 监听地址和端口。使用 "0.0.0.0:443" 监听所有接口,或 "127.0.0.1:8443" 仅监听本地( behind a reverse proxy)。
tls_cert_file path "certs/cert.pem" TLS 证书路径(PEM 格式)。
tls_key_file path "certs/key.pem" TLS 私钥路径(PEM 格式)。
identity_key_file path "server_identity.key" 服务器 X3DH 身份密钥的路径。使用 rvpn-server keygen 生成。
websocket_path string "/api/v1/ws" WebSocket 端点路径。更改此路径 per-deployment 以避免检测。
http_port integer (禁用) 如果设置,也在纯 HTTP(例如 80)上监听,用于 ACME 挑战和 HTTP→HTTPS 重定向。
redirect_http_to_https bool true 当设置 http_port 时,将所有 HTTP 请求重定向到 HTTPS。
decoy_root path (无) 静态文件目录路径,为未经身份验证的浏览器提供服务。使服务器看起来像普通网站。
prekey_rotation_hours integer 168 服务器轮换其 X3DH 签名预密钥的频率(小时)。默认为 7 天。
one_time_prekey_count integer 100 在预密钥包中生成和发布的一次性预密钥数量。
prekey_bundle_file path (无) 如果设置,从此文件加载 X3DH 密钥而不是生成新的。使用此文件恢复备份的身份。

[server.rate_limit]

控制 IP 地址可以建立多少个连接。

字段 类型 默认值 描述
max_connections_per_ip integer 500 单个 IP 地址的最大同时连接数。
max_handshakes_per_minute integer 2000 单个 IP 每分钟的最大新握手尝试次数。有助于防止暴力探测。
[server.rate_limit]
max_connections_per_ip     = 10
max_handshakes_per_minute  = 20

[server.network]

TUN/全隧道模式下的服务器端网络设置。

字段 类型 默认值 描述
nat_enabled bool true 为退出服务器的流量启用 NAT(伪装)。客户端通过隧道访问互联网所必需的。
dhcp_range string "10.200.0.0/24" 分配给客户端隧道地址的 IP 池。
dns_servers list ["1.1.1.1"] 推送到隧道模式客户端的 DNS 服务器。
[server.network]
nat_enabled  = true
dhcp_range   = "10.200.0.0/24"
dns_servers  = ["1.1.1.1", "8.8.8.8"]

[server.tun]

真正 TUN 到 TUN 模式的设置。启用时,服务器创建 TUN 接口并通过它路由客户端数据包。

字段 类型 默认值 描述
enabled bool false 启用 TUN 模式。当为 false 时,服务器使用中继模式(Brook 风格)。
tun_ip string "10.200.0.1/24" TUN 接口 IP 地址和子网前缀。
mtu integer 1420 TUN 接口的 MTU。
interface_name string "tun0" 要创建的 TUN 接口的名称。
[server.tun]
enabled = true
tun_ip = "10.200.0.1/24"
mtu = 1420
interface_name = "tun0"

完整示例

[server]
bind_address           = "0.0.0.0:443"
tls_cert_file          = "/etc/rvpn/certs/cert.pem"
tls_key_file           = "/etc/rvpn/certs/key.pem"
identity_key_file      = "/etc/rvpn/server_identity.key"
websocket_path         = "/api/v1/ws"
http_port              = 80
redirect_http_to_https = true
decoy_root             = "/var/www/decoy"
prekey_rotation_hours  = 168
one_time_prekey_count  = 100

[server.rate_limit]
max_connections_per_ip    = 500
max_handshakes_per_minute = 2000

[server.network]
nat_enabled  = true
dhcp_range   = "10.200.0.0/24"
dns_servers  = ["1.1.1.1"]

[server.tun]
enabled = true
tun_ip = "10.200.0.1/24"
mtu = 1420
interface_name = "tun0"

反向代理模式

在 Caddy、nginx 或其他 TLS 终止反向代理后面运行时,将 bind_address 设置为本地端口,让代理处理 TLS。将代理的 WebSocket 转发到相同路径:

[server]
bind_address      = "127.0.0.1:8443"
tls_cert_file     = ""      # 不使用 — 代理处理 TLS
tls_key_file      = ""
websocket_path    = "/api/v1/ws"

Caddy 示例:

your.domain.com {
    handle /api/* {
        reverse_proxy 127.0.0.1:8443
    }
    handle {
        root * /var/www/html
        file_server
    }
}

路径匹配器必须是 /api/*(前缀匹配),而不是 /api(仅精确匹配)。