跳转至

OpenVPN 客户端

自 sing-box 1.14.0 起

构建标签

OpenVPN endpoint 需要 with_openvpn 构建标签。

当禁用 system 时,内部网络栈还需要 with_gvisor 构建标签。

结构

{
  "type": "openvpn-client",
  "tag": "ovpn-client",

  "server": "127.0.0.1",
  "server_port": 1194,
  "servers": [
    {
      "server": "127.0.0.1",
      "server_port": 1194,
      "network": "udp"
    }
  ],
  "remote_random": false,
  "network": "udp",
  "username": "",
  "password": "",
  "auth_retry": "none",
  "static_challenge": "",
  "static_challenge_echo": false,
  "tls": {
    "server_name": "",
    "server_name_type": "name",
    "certificate": [],
    "certificate_path": "",
    "client_certificate": [],
    "client_certificate_path": "",
    "client_key": [],
    "client_key_path": "",
    "peer_fingerprint": [],
    "crl_path": "",
    "remote_certificate_ku": [],
    "remote_certificate_eku": "",
    "version_min": "1.2",
    "version_max": "",
    "cipher": "",
    "groups": "",
    "control_wrap": {
      "type": "",
      "key": [],
      "key_path": "",
      "direction": ""
    }
  },
  "data_ciphers": [],
  "data_ciphers_fallback": "",
  "auth": "",
  "mss_fix": 0,
  "fragment": 0,
  "compression": "",
  "compression_lzo": "",
  "allow_compression": "no",
  "route_no_pull": false,
  "pull_filters": [
    {
      "action": "ignore",
      "text": "route "
    }
  ],
  "routes": [],
  "route_gateway": "",
  "route_metric": 0,
  "redirect_gateway": false,
  "redirect_gateway_flags": [],
  "keepalive_interval": "",
  "keepalive_timeout": "",
  "renegotiate_interval": "",
  "explicit_exit_notify": 0,
  "system": false,
  "name": "",
  "mtu": 1500,
  "udp_timeout": "",

  ... // 拨号字段
}

当内容只有一项时,可以忽略 JSON 数组 [] 标签。

字段

server

OpenVPN 服务器地址。

serverservers 之一必填。

servers 冲突。

server_port

OpenVPN 服务器端口。

设置 server 时必填。

servers

OpenVPN 服务器列表。

客户端按顺序尝试服务器,并在连接失败时尝试下一台服务器。

serverservers 之一必填。

server 冲突。

servers.server

必填

OpenVPN 服务器地址。

servers.server_port

必填

OpenVPN 服务器端口。

servers.network

该服务器的 OpenVPN 传输网络,可选值为 udptcp

默认使用顶层 network

remote_random

连接前随机排列 servers 顺序。

默认禁用。

network

默认 OpenVPN 传输网络,可选值为 udptcp

默认使用 udp

该值应用于 server 和未单独设置 networkservers 条目。

username

OpenVPN 用户名/密码认证的用户名。

password

OpenVPN 用户名/密码认证的密码。

auth_retry

用户名/密码认证失败后的行为,可选值为 nonenointeractinteract

默认使用 none,并将永久认证失败视为终止错误。

nointeractinteract 允许重试认证。

static_challenge

请求认证响应时显示的静态质询文本。

static_challenge_echo

以明文显示静态质询响应。

tls

必填

OpenVPN 控制通道 TLS 配置。

tls.server_name

预期的服务器证书名称。

为空时禁用证书名称验证,但仍会验证证书链或 fingerprint 与服务器证书用途。

tls.server_name_type

tls.server_name 匹配的证书字段,可选值为 subjectnamename-prefix

设置 tls.server_name 时默认使用 name

subject 匹配完整证书 subject,name 精确匹配 common name,name-prefix 匹配 common name 前缀。

tls.certificate

受信任 CA 证书内容。

tls.certificatetls.certificate_pathtls.peer_fingerprint 之一必填。

tls.certificate_path 冲突。

tls.certificate_path

受信任 CA 证书路径。

tls.certificatetls.certificate_pathtls.peer_fingerprint 之一必填。

tls.certificate 冲突。

tls.client_certificate

客户端证书内容。

tls.client_certificate_path 冲突。

tls.client_certificate_path

客户端证书路径。

tls.client_certificate 冲突。

tls.client_key

客户端私钥内容。

tls.client_key_path 冲突。

tls.client_key_path

客户端私钥路径。

tls.client_key 冲突。

客户端证书和私钥必须同时设置或同时为空。

tls.peer_fingerprint

允许的服务器 leaf certificate 的 SHA-256 fingerprint。

每个 fingerprint 必须是不带分隔符的 64 字符小写十六进制字符串。

同时配置受信任 CA 时,会同时验证证书链和 fingerprint。未配置受信任 CA 时,会验证 fingerprint、证书有效期、配置的名称和证书用途,但不验证证书链。

tls.crl_path

用于拒绝已吊销服务器证书的 PEM 或 DER CRL 文件路径。

根据受信任证书链验证 CRL 签名和有效期。

默认禁用。

tls.remote_certificate_ku

服务器证书所需的 Key Usage mask,使用 OpenVPN remote-cert-ku 格式的十六进制值。

多个值会被组合,证书必须包含所有要求的用途。

默认禁用。

tls.remote_certificate_eku

服务器证书所需的 Extended Key Usage,可选值为 serverclient

默认禁用。标准 OpenVPN 服务器证书用途检查仍然生效。

tls.version_min

最低 TLS 版本,可选值为 1.01.11.21.3

默认使用 1.2

tls.version_max

最高 TLS 版本,可选值为 1.01.11.21.3

默认使用支持的最高版本。

该值不能低于 tls.version_min

tls.cipher

TLS 1.2 及更低版本允许的 OpenSSL cipher suite 名称,以冒号分隔。

为空时使用默认 TLS cipher suite。该字段不控制 TLS 1.3 cipher suite。

tls.groups

按偏好顺序排列的 TLS key exchange group,以冒号分隔。

支持 X25519SECP256R1SECP384R1SECP521R1,包括其常用 OpenSSL 和 NIST 别名。

为空时使用默认 TLS group。

tls.control_wrap

OpenVPN 控制通道封装。

等价于 OpenVPN tls-authtls-crypttls-crypt-v2

为空时禁用。

tls.control_wrap.type

控制通道封装类型,可选值为 tls_authtls_crypttls_crypt_v2

tls.control_wrap.key

控制通道封装密钥内容。

tls.control_wrap.key_path 冲突。

tls.control_wrap.key_path

控制通道封装密钥路径。

tls.control_wrap.key 冲突。

tls.control_wrap.direction

tls-auth 密钥方向,可选值为 serverclient

仅当 tls.control_wrap.typetls_auth 时可用。为空时双向使用密钥。

data_ciphers

允许的 OpenVPN 数据通道 cipher。

默认使用 AES-256-GCMAES-128-GCMCHACHA20-POLY1305

data_ciphers_fallback

用于不支持 cipher 协商的对端的数据通道 cipher。

默认禁用。

auth

OpenVPN 数据通道认证摘要。

默认使用 SHA1,仅应用于非 AEAD 数据 cipher 和 tls_auth

mss_fix

OpenVPN UDP packet 的最大大小,用于限制通过隧道发送的 TCP 连接 MSS。

这可以避免 TCP packet 在 OpenVPN 封装后超过 path MTU。

设为 0 时禁用。

fragment

用于 OpenVPN 数据通道 fragmentation 的最大 OpenVPN UDP packet 大小。

设为 0 时禁用。非零值必须至少为 68

与 TCP 传输冲突。

compression

OpenVPN compress framing 模式,可选值为 nonenolz4lz4-v2stubstub-v2disabledoff

默认禁用。

Compression 可能削弱流量机密性。仅在需要 framing 兼容性时使用 stubstub-v2

compression_lzo

OpenVPN comp-lzo 模式,可选值为 nonenoyesadaptiveasymdisabledoff

默认禁用。

Compression 可能削弱流量机密性。仅在服务器要求时启用。

allow_compression

服务器推送的 compression 策略,可选值为 noasymyes

默认使用 no,仅允许 compression stub framing。asym 接受来自服务器的 compressed packet,但不压缩出站 packet。yes 允许双向 compression。

当设为 no 时,与通过 compressioncompression_lzo 启用的非 stub compression 冲突。

route_no_pull

忽略服务器推送的 route、route gateway 和 redirect-gateway 选项。

仍会接受其他推送选项,并继续使用本地配置的 routes

默认禁用。

pull_filters

服务器推送选项的有序 pull filter 列表。

应用第一个 text 为完整推送选项大小写不敏感前缀的 filter。未匹配任何 filter 的选项会被接受。

pull_filters.action

必填

Filter action,可选值为 acceptignorereject

accept 应用选项,ignore 丢弃选项,reject 终止连接。

pull_filters.text

必填

用于匹配推送选项名称和值的大小写不敏感前缀。

例如,route 会匹配推送的 IPv4 route 选项,但不会匹配 route-gateway

routes

通过 OpenVPN endpoint 路由的 IPv4 和 IPv6 route prefix。

这些 route 会与从服务器接受的 route 一起使用。

route_gateway

通过 OpenVPN endpoint 路由的 IPv4 gateway。

为空时使用从服务器接收的 VPN gateway。

route_metric

通过 OpenVPN endpoint 路由的默认 metric。

设为 0 时使用平台默认值。

redirect_gateway

通过 OpenVPN endpoint 路由所有 IPv4 流量。

默认禁用。

redirect_gateway_flags

OpenVPN redirect-gateway flag。

!ipv4 禁用 IPv4 default route,ipv6 还会通过 endpoint 路由所有 IPv6 流量。接受其他 OpenVPN flag 以兼容配置,但它们不会改变 endpoint 路由。

默认为空。

keepalive_interval

发送 OpenVPN keepalive ping packet 的间隔。

本地配置值优先于服务器推送的 keepalive 值。

默认禁用。

keepalive_timeout

未接收 OpenVPN 流量后重新启动连接的时间。

本地配置值优先于服务器推送的 keepalive 值。

默认禁用。

renegotiate_interval

OpenVPN TLS 重新协商间隔。

如果为空或设为 0s,使用 OpenVPN 默认值 1h

explicit_exit_notify

关闭 UDP 连接时发送的 OpenVPN exit notification 数量。

设为 0 时禁用。最多发送 10 个 notification。

system

使用系统接口。

需要权限,且不能与现有系统接口冲突。

禁用时,sing-box 使用内部网络栈。

禁用时需要 with_gvisor 构建标签。

name

系统接口的自定义接口名称。

默认使用自动生成的 ovpn 接口名称。

mtu

OpenVPN 接口 MTU。

为空时使用服务器推送的 MTU;收到服务器配置前使用 1500

udp_timeout

UDP NAT 过期时间。

默认使用 5m

拨号字段

参阅拨号字段

交互式认证

在 sing-box dashboard 或任意 sing-box 图形客户端的 工具 > 端点 中认证和管理 endpoint。