服务器配置参考¶
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.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]
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(仅精确匹配)。