docs/configuration/endpoint/openvpn-server.zh.md
!!! question "自 sing-box 1.14.0 起"
{
"type": "openvpn-server",
"tag": "ovpn-server",
... // 监听字段
"system": false,
"name": "",
"mtu": 1500,
"mode": "tls",
"network": "udp",
"remote": "",
"remote_port": 0,
"max_clients": 1024,
"address": [],
"peer_address": "",
"peer_address_ipv6": "",
"topology": "subnet",
"duplicate_cn": false,
"users": [
{
"username": "",
"password": ""
}
],
"static_key": [],
"static_key_path": "",
"key_direction": "",
"tls": {
"certificate": [],
"certificate_path": "",
"key": [],
"key_path": "",
"client_certificate": [],
"client_certificate_path": "",
"verify_client_certificate": "require",
"client_name": "",
"client_name_type": "name",
"peer_fingerprint": [],
"crl_path": "",
"remote_certificate_ku": [],
"remote_certificate_eku": "",
"remote_certificate_tls": "",
"certificate_profile": "",
"ns_certificate_type": "",
"version_min": "1.2",
"version_max": "",
"cipher": "",
"groups": "",
"control_wrap": {
"type": "tls_crypt",
"key": [],
"key_path": "",
"direction": "",
"force_cookie": false
}
},
"cipher": "",
"data_ciphers": [],
"data_ciphers_fallback": "",
"auth": "",
"mss_fix": 0,
"mss_fix_disabled": false,
"mss_fix_mode": "",
"replay_window": 0,
"replay_window_time": "",
"push": {
"routes": [],
"dns": [],
"dns_servers": [],
"search_domains": [],
"dhcp_options": [],
"redirect_gateway": false,
"redirect_gateway_flags": [],
"block_outside_dns": false,
"ping_interval": "",
"ping_restart": ""
},
"ping_interval": "",
"ping_restart": "",
"renegotiate_interval": "",
"renegotiate_disabled": false,
"renegotiate_bytes": 0,
"renegotiate_packets": 0,
"handshake_window": "1m",
... // UDP NAT 字段
}
!!! note ""
当内容只有一项时,可以忽略 JSON 数组 [] 标签
参阅 监听字段。udp_timeout 属于下方的 UDP NAT 字段。
使用系统接口。
需要特权且不能与已有系统接口冲突。
endpoint 会配置接口地址和 MTU,但不会安装操作系统路由或 DNS 设置。
如果禁用,sing-box 将使用内部网络栈。
系统接口的自定义接口名称。
默认使用自动生成的 ovpn 接口名称。
OpenVPN 接口 MTU。
默认使用 1500。
OpenVPN 会话模式,tls 或 static_key 之一。
默认使用 tls。
static_key 在没有 TLS 控制信道和前向保密的情况下服务一个对端,仅作为不可变部署的显式兼容选项保留。该模式不使用 tls、users、推送选项或 TLS 重协商选项。
OpenVPN 传输网络,udp 或 tcp 之一。
默认使用 udp。
每个端点仅服务一种传输网络;如需同时服务 TCP 与 UDP,
需要配置两个端点并使用互不重叠的 address 子网,
与上游 OpenVPN 需要两个服务进程一致。
UDP static_key 服务器的固定远端地址。
在 UDP static_key 模式下与 remote_port 一起必填。TCP 服务器从监听套接字接受单个对端,不使用此字段。
UDP static_key 服务器的固定远端端口。
在 UDP static_key 模式下与 remote 一起必填。
已建立与握手中的 TLS 客户端会话的最大数量。
默认使用 1024。该值必须小于 OpenVPN peer-id 空间的大小 16777216。
static_key 模式仅支持一个对端,因此此值必须为 0 或 1。
==必填==
OpenVPN 服务器地址前缀列表。
最多支持一个 IPv4 前缀和一个 IPv6 前缀。
前缀地址被分配给服务器接口。掩码后的前缀用作客户端地址池和路由。
第一个 IPv4 和 IPv6 前缀地址用作端点的本地地址。
在 static_key 模式下,这些地址是本地隧道前缀,而不是地址池。
IPv4 隧道对端地址。
在 static_key 模式下配置 IPv4 address 时必填。
IPv6 隧道对端地址。
在 static_key 模式下配置 IPv6 address 时必填。
推送给客户端的 OpenVPN topology,subnet、p2p 或 net30 之一。
TLS 模式默认使用 subnet,static_key 模式默认使用 p2p。
允许具有相同认证证书 common name 或用户名的多个客户端同时在线。
禁用时,新认证的会话会替换具有相同身份的现有会话,并在可用时复用其 tunnel 地址。
默认禁用。
仅在 TLS 模式下可用。
OpenVPN 用户名/密码用户列表。
如果设置,客户端除了通过 tls.verify_client_certificate 配置的证书策略外,还必须通过用户名/密码认证。
仅在 TLS 模式下可用。
用户名。
密码。
OpenVPN 静态密钥内容。
在 static_key 模式下必填。
与 static_key_path 冲突。
OpenVPN 静态密钥路径。
在 static_key 模式下未设置 static_key 时必填。
与 static_key 冲突。
静态密钥方向,server 或 client 之一。
为空时双向使用密钥。按照惯例,服务器使用 server,对端使用 client。
仅在 static_key 模式下可用。
在 TLS 模式下必填。
OpenVPN 控制信道 TLS 配置。
TLS 服务器证书内容。
tls.certificate 或 tls.certificate_path 必填其一。
与 tls.certificate_path 冲突。
TLS 服务器证书路径。
tls.certificate 或 tls.certificate_path 必填其一。
与 tls.certificate 冲突。
TLS 服务器私钥内容。
tls.key 或 tls.key_path 必填其一。
与 tls.key_path 冲突。
TLS 服务器私钥路径。
tls.key 或 tls.key_path 必填其一。
与 tls.key 冲突。
TLS CA 证书内容,用于验证客户端证书。
当 tls.verify_client_certificate 为 require 或 optional 时,tls.client_certificate、tls.client_certificate_path 或 tls.peer_fingerprint 必填其一。
与 tls.client_certificate_path 冲突。
TLS CA 证书路径,用于验证客户端证书。
当 tls.verify_client_certificate 为 require 或 optional 时,tls.client_certificate、tls.client_certificate_path 或 tls.peer_fingerprint 必填其一。
与 tls.client_certificate 冲突。
OpenVPN 客户端证书策略,require、optional 或 none 之一。
默认使用 require。
设为 optional 时,客户端提供证书则验证,不提供证书的客户端也被允许。
设为 none 时,不请求客户端证书。
该字段不替代 users;设置 users 后仍然要求用户名/密码认证。
期望的客户端证书名称。为空时禁用。
tls.client_name 匹配的证书字段,subject、name 或 name-prefix 之一。
配置 tls.client_name 时默认使用 name。
允许的客户端叶证书 SHA-256 指纹。可以在没有客户端 CA 时仅使用指纹验证。
用于拒绝已吊销客户端证书的证书吊销列表路径。
OpenVPN remote-cert-ku 格式的客户端证书 Key Usage mask。
客户端证书所需的 Extended Key Usage。与显式配置的 tls.remote_certificate_tls 冲突。
客户端证书用途检查,server、client 或 none 之一。默认使用 client。
证书 profile,可选值为 insecure、legacy、preferred 或 suiteb。
默认使用 legacy。
insecure 为兼容不可变对端而接受使用 MD5 或 SHA-1 签名的证书链和较小的旧密钥,仅应在对端无法升级时使用。legacy 接受 SHA-1 但拒绝 MD5 签名;preferred 要求更强的签名和密钥。
选择 suiteb 且 tls.cipher 为空时,TLS 1.2 cipher 列表默认使用 Suite B ECDHE-ECDSA AES-GCM 套件。该 profile 不限制显式配置的 tls.cipher 和 tls.groups。
已弃用的 Netscape 证书类型检查,server 或 client 之一。
最低 TLS 版本。默认使用 1.2。
最高 TLS 版本。默认使用支持的最高版本。
TLS 1.2 及更低版本允许的 OpenSSL cipher suite 名称,以冒号分隔。
为空时使用默认 TLS cipher suite。该字段不控制 TLS 1.3 cipher suite。
按偏好顺序排列的 TLS key exchange group,以冒号分隔。
OpenVPN 控制信道包装。
等价于 OpenVPN tls-auth、tls-crypt 和 tls-crypt-v2。
默认禁用。
==必填==
控制信道包装类型,tls_auth、tls_crypt 或 tls_crypt_v2 之一。
对于 tls_crypt_v2,密钥为服务器密钥。
控制信道包装密钥内容。
tls.control_wrap.key 或 tls.control_wrap.key_path 必填其一。
与 tls.control_wrap.key_path 冲突。
控制信道包装密钥路径。
tls.control_wrap.key 或 tls.control_wrap.key_path 必填其一。
与 tls.control_wrap.key 冲突。
OpenVPN tls-auth 密钥方向,server 或 client 之一。
仅当 tls.control_wrap.type 为 tls_auth 时可用。
server 对应 OpenVPN 密钥方向 0,client 对应 1;按照惯例服务器使用 0,客户端使用 1。
如果为空,密钥被双向使用,与两端均省略 key-direction 的行为一致。
要求 UDP 上的 tls-crypt-v2 客户端支持无状态 session cookie。
仅当 tls.control_wrap.type 为 tls_crypt_v2 时可用。禁用时,不支持 cookie 的客户端会按照上游 allow-noncookie 行为被接受。
默认禁用。
static_key 模式使用的数据信道加密方式。
为空时使用上游静态密钥模式的默认值 BF-CBC。支持 AES-CBC、ARIA-CBC、Camellia-CBC、DES-CBC、Blowfish-CBC、CAST5-CBC 系列,以及 SEED-CBC、SM4-CBC 和 NONE。
仅在 static_key 模式下可用。NONE 不提供机密性。
允许的 OpenVPN 数据信道加密方式。
默认使用 AES-256-GCM、AES-128-GCM 和 CHACHA20-POLY1305。
AES-GCM 系列还包括 AES-192-GCM。保留的 cipher 包括 AES、ARIA、Camellia、DES、Blowfish、CAST5、SEED 和 SM4 的 CBC、CFB、OFB 形式,以及 NONE。CFB 和 OFB 仅可用于 TLS 模式。旧 cipher 只能提供较弱的机密性或完全不加密,因此默认不启用。
仅在 TLS 模式下可用。
用于不支持加密方式协商的遗留客户端的 OpenVPN 数据信道加密方式。
等价于 OpenVPN data-ciphers-fallback。
默认禁用。
仅在 TLS 模式下可用。
OpenVPN 数据信道认证摘要。
默认使用 SHA1,与上游默认值一致;仅对非 AEAD 数据信道加密方式和 tls_auth 生效。
为兼容既有客户端,显式配置时仍可使用 MD5 和 RIPEMD160 等旧摘要。
用于限制 TCP MSS 的最大封装数据包大小。默认 MTU 下使用上游默认值 1492 计算。
禁用 MSS 限制,包括默认限制。
显式 mss_fix 的计算模式,mtu 或 fixed 之一。需要 mss_fix。
UDP 数据通道重放窗口大小。默认使用 64;TCP 数据包 ID 始终严格连续。
UDP 重放窗口时长。默认使用 15s。该值必须使用整秒。
推送给客户端的选项。
推送给客户端的路由。
IPv4 和 IPv6 前缀可以混用。
推送给客户端的 DNS 服务器地址。
使用传统的 dhcp-option DNS/DNS6。兼容客户端收到现代 DNS 服务器组时会覆盖这些地址。
推送的现代 OpenVPN DNS 服务器组。每项包含 priority、addresses,以及可选的 resolve_domains、dnssec、transport 和 sni。
地址接受 IP 或 IP:port(带端口的 IPv6 使用 [IPv6]:port)。transport 为 plain、dot 或 doh 之一;dnssec 为 yes、optional 或 no 之一。OpenVPN 客户端仅应用优先级数字最低的服务器组。
推送的现代 OpenVPN 搜索域。
推送的额外传统 dhcp-option 值,不包含 dhcp-option 前缀。
向客户端推送 redirect-gateway,根据 push.redirect_gateway_flags 通过 VPN 路由客户端流量。
当 push.redirect_gateway_flags 为空时,默认使用 def1。
向客户端推送的 OpenVPN redirect-gateway flag。
仅当启用 push.redirect_gateway 时可用。
默认使用 def1。
向客户端推送 block-outside-dns,在 Windows 客户端上阻止 VPN 之外的 DNS 查询。
推送给客户端的 OpenVPN ping 间隔。
在该间隔内未发送任何 packet 后,客户端会向服务器发送一个 data channel ping。
该值必须使用整秒。
默认禁用。
推送给客户端的 OpenVPN ping-restart 超时。
在该超时时间内未收到任何 packet 后,客户端会重新连接服务器。
该值必须使用整秒。
默认禁用。
服务器未向客户端发送任何 packet 时,发送 data channel ping 的间隔。
该值应用于服务器。使用 push.ping_interval 配置客户端。
该值必须使用整秒。
默认禁用。
服务器未收到任何 packet 后关闭客户端会话的时间。
该值应用于服务器。使用 push.ping_restart 配置客户端。
服务器超时应长于客户端超时,以便客户端在服务器丢弃其会话前重新连接。
该值必须使用整秒。
默认禁用。
OpenVPN TLS 重协商间隔。
为空时使用 OpenVPN 默认值 1h。
仅在 TLS 模式下可用。
禁用基于时间的 TLS 重协商,包括默认间隔。
仅在 TLS 模式下可用。
传输指定字节数后重新协商数据通道密钥。0 使用与密码算法相关的 OpenVPN 默认值。
仅在 TLS 模式下可用。
传输指定数据包数后重新协商数据通道密钥。0 使用与密码算法相关的 OpenVPN 默认值。
仅在 TLS 模式下可用。
初始 TLS 握手和每次 TLS 重协商允许使用的最长时间。
默认使用 1m。
仅在 TLS 模式下可用。
这些字段配置通过 OpenVPN 接口的流量的 UDP 会话。
参阅 UDP NAT 字段。