OpenVPN 服务器
自 sing-box 1.14.0 起
构建标签
OpenVPN 端点需要 with_openvpn 构建标签。
禁用 system 时,内部网络栈还需要 with_gvisor 构建标签。
结构
{
"type": "openvpn-server",
"tag": "ovpn-server",
... // 监听字段
"system": false,
"name": "",
"mtu": 1500,
"network": "udp",
"max_clients": 1024,
"address": [],
"topology": "subnet",
"users": [
{
"username": "",
"password": ""
}
],
"tls": {
"certificate": [],
"certificate_path": "",
"key": [],
"key_path": "",
"client_certificate": [],
"client_certificate_path": "",
"verify_client_certificate": "require",
"control_wrap": {
"type": "tls_crypt",
"key": [],
"key_path": "",
"direction": ""
}
},
"data_ciphers": [],
"data_ciphers_fallback": "",
"auth": "",
"push": {
"routes": [],
"dns": [],
"redirect_gateway": false,
"redirect_gateway_flags": [],
"block_outside_dns": false
},
"keepalive_interval": "",
"keepalive_timeout": "",
"renegotiate_interval": "",
"udp_timeout": ""
}
当内容只有一项时,可以忽略 JSON 数组 [] 标签
监听字段
参阅 监听字段。
字段
system
使用系统接口。
需要特权且不能与已有系统接口冲突。
如果禁用,sing-box 将使用内部网络栈。
禁用时需要 with_gvisor 构建标签。
name
系统接口的自定义接口名称。
默认使用自动生成的 ovpn 接口名称。
mtu
OpenVPN 接口 MTU。
默认使用 1500。
network
OpenVPN 传输网络,udp 或 tcp 之一。
默认使用 udp。
每个端点仅服务一种传输网络;如需同时服务 TCP 与 UDP,
需要配置两个端点并使用互不重叠的 address 子网,
与上游 OpenVPN 需要两个服务进程一致。
max_clients
已建立与握手中的 TLS 客户端会话的最大数量。
默认使用 1024。该值必须小于 OpenVPN peer-id 空间的大小 16777216。
address
必填
OpenVPN 服务器地址前缀列表。
最多支持一个 IPv4 前缀和一个 IPv6 前缀。
前缀地址被分配给服务器接口。掩码后的前缀用作客户端地址池和路由。
第一个 IPv4 和 IPv6 前缀地址用作端点的本地地址。
topology
推送给客户端的 OpenVPN topology,subnet、p2p 或 net30 之一。
默认使用 subnet。
users
OpenVPN 用户名/密码用户列表。
如果设置,客户端除了通过 tls.verify_client_certificate 配置的证书策略外,还必须通过用户名/密码认证。
users.username
用户名。
users.password
密码。
tls
必填
OpenVPN 控制信道 TLS 配置。
tls.certificate
TLS 服务器证书内容。
tls.certificate 或 tls.certificate_path 必填其一。
与 tls.certificate_path 冲突。
tls.certificate_path
TLS 服务器证书路径。
tls.certificate 或 tls.certificate_path 必填其一。
与 tls.certificate 冲突。
tls.key
TLS 服务器私钥内容。
tls.key 或 tls.key_path 必填其一。
与 tls.key_path 冲突。
tls.key_path
TLS 服务器私钥路径。
tls.key 或 tls.key_path 必填其一。
与 tls.key 冲突。
tls.client_certificate
TLS CA 证书内容,用于验证客户端证书。
tls.client_certificate 或 tls.client_certificate_path 必填其一。
与 tls.client_certificate_path 冲突。
tls.client_certificate_path
TLS CA 证书路径,用于验证客户端证书。
tls.client_certificate 或 tls.client_certificate_path 必填其一。
与 tls.client_certificate 冲突。
tls.verify_client_certificate
OpenVPN 客户端证书策略,require、optional 或 none 之一。
默认使用 require。
设为 optional 时,客户端提供证书则验证,不提供证书的客户端也被允许。
设为 none 时,不请求客户端证书。
该字段不替代 users;设置 users 后仍然要求用户名/密码认证。
tls.control_wrap
OpenVPN 控制信道包装。
等价于 OpenVPN tls-auth、tls-crypt 和 tls-crypt-v2。
默认禁用。
tls.control_wrap.type
必填
控制信道包装类型,tls_auth、tls_crypt 或 tls_crypt_v2 之一。
对于 tls_crypt_v2,密钥为服务器密钥。
tls.control_wrap.key
控制信道包装密钥内容。
tls.control_wrap.key 或 tls.control_wrap.key_path 必填其一。
与 tls.control_wrap.key_path 冲突。
tls.control_wrap.key_path
控制信道包装密钥路径。
tls.control_wrap.key 或 tls.control_wrap.key_path 必填其一。
与 tls.control_wrap.key 冲突。
tls.control_wrap.direction
OpenVPN tls-auth 密钥方向,server 或 client 之一。
仅当 tls.control_wrap.type 为 tls_auth 时可用。
server 对应 OpenVPN 密钥方向 0,client 对应 1;按照惯例服务器使用 0,客户端使用 1。
如果为空,密钥被双向使用,与两端均省略 key-direction 的行为一致。
data_ciphers
允许的 OpenVPN 数据信道加密方式。
默认使用 AES-256-GCM、AES-128-GCM 和 CHACHA20-POLY1305。
data_ciphers_fallback
用于不支持加密方式协商的遗留客户端的 OpenVPN 数据信道加密方式。
等价于 OpenVPN data-ciphers-fallback。
默认禁用。
auth
OpenVPN 数据信道认证摘要。
默认使用 SHA1,与上游默认值一致;仅对非 AEAD 数据信道加密方式和 tls_auth 生效。
push
推送给客户端的选项。
push.routes
推送给客户端的路由。
IPv4 和 IPv6 前缀可以混用。
push.dns
推送给客户端的 DNS 服务器地址。
push.redirect_gateway
向客户端推送 redirect-gateway,根据 push.redirect_gateway_flags 通过 VPN 路由客户端流量。
当 push.redirect_gateway_flags 为空时,默认使用 def1。
push.redirect_gateway_flags
向客户端推送的 OpenVPN redirect-gateway flag。
仅当启用 push.redirect_gateway 时可用。
默认使用 def1。
push.block_outside_dns
向客户端推送 block-outside-dns,在 Windows 客户端上阻止 VPN 之外的 DNS 查询。
keepalive_interval
推送给客户端的 OpenVPN keepalive ping 间隔。
默认禁用。
keepalive_timeout
推送给客户端的 OpenVPN keepalive ping 超时。
默认禁用。
renegotiate_interval
OpenVPN TLS 重协商间隔。
如果为空或设为 0s,使用 OpenVPN 默认值 1h。
udp_timeout
通过 OpenVPN 接口的流量的 UDP NAT 过期时间。
默认使用 5m。