OpenVPN — mihomo
mihomo 可以将 OpenVPN 服务器作为出站拨号,运行一个用户态客户端,建立一个 tun 风格的栈设备,并将匹配的流量经加密隧道路由。控制通道通过证书 (ca / cert / key)、可选的 tls-crypt,以及/或 auth-user-pass 凭据进行认证;数据通道使用协商出的 cipher 加密。
出站
位于 proxies: 下、type: openvpn 的条目。内嵌 BasicOption (通用出站字段)。
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
name | string | (required) | <string> | 唯一的代理名称。 |
server | string | (required) | <host> | OpenVPN 服务器主机/IP。 |
port | int | (required) | <port> | 服务器端口。 |
proto | string | udp | udp | tcp | OpenVPN 隧道的传输层协议。 |
dev | string | tun | tun | 虚拟设备类型(例如 `tun`)。 |
cipher | string | (server-negotiated) | AES-256-GCM | AES-128-GCM | <cipher> | 数据通道加密套件,例如 `AES-256-GCM`。 |
auth | string | (unset) | SHA256 | SHA512 | <digest> | 控制通道的 HMAC 摘要算法,例如 `SHA256`。 |
comp-lzo | string | (unset) | yes | no | adaptive | LZO 压缩设置。 |
ca | string | (required) | <PEM> | CA 证书(PEM,内联或文件路径)。 |
cert | string | (unset) | <PEM> | 客户端证书(PEM)。 |
key | string | (unset) | <PEM> | 客户端私钥(PEM)。 |
tls-crypt | string | (unset) | <key> | 用于控制通道加密/认证的 tls-crypt 静态密钥。 |
username | string | (unset) | <string> | auth-user-pass 用户名。 |
password | string | (unset) | <string> | auth-user-pass 密码。 |
ping | int | (unset) | <seconds> | 保活 ping 间隔(秒)。 |
ping-restart | int | (unset) | <seconds> | 在如此多秒数内未收到 ping 后重启隧道(秒)。 |
mtu | int | 1500 | <integer> | 隧道 MTU。 |
udp | bool | false | true | false | 允许 UDP 流量通过代理。 |
remote-dns-resolve | bool | false | true | false | 使用隧道的 DNS 解析目标名称。 |
dns | []string | [] | [<server>] | 用于隧道的 DNS 服务器。 |
源码: adapter/outbound/openvpn.go:43-66 · 锚定版本 v1.19.27 (5184081)
示例
出站——证书认证:
yaml
proxies:
- name: ovpn-cert
type: openvpn
server: vpn.example.com
port: 1194
proto: udp
cipher: AES-256-GCM
auth: SHA256
ca: |
-----BEGIN CERTIFICATE-----
<ca-certificate>
-----END CERTIFICATE-----
cert: |
-----BEGIN CERTIFICATE-----
<client-certificate>
-----END CERTIFICATE-----
key: |
-----BEGIN PRIVATE KEY-----
<client-private-key>
-----END PRIVATE KEY-----
udp: true出站——带保活的用户名/密码认证:
yaml
proxies:
- name: ovpn-userpass
type: openvpn
server: vpn.example.com
port: 1194
proto: tcp
ca: |
-----BEGIN CERTIFICATE-----
<ca-certificate>
-----END CERTIFICATE-----
username: <username>
password: <password>
ping: 10
ping-restart: 60
udp: true说明
proto选择链路传输:udp(默认)或tcp。数据通道的cipher与服务器 协商;显式设置以固定某个值,例如AES-256-GCM。ca是必需的。cert+key提供证书认证;username+password提供auth-user-pass认证。当服务器同时要求两者时可以组合使用。PEM 材料可以 内联给出(块标量)或作为文件路径给出。tls-crypt提供加密并认证控制通道的静态密钥,隐藏 OpenVPN 握手。ping按给定间隔发送保活;ping-restart在如此多秒内未收到数据包后拆除 隧道,以便重新建立。两者均以秒表示。mtu设置隧道 MTU,默认为1500。remote-dns-resolve使用dns中列出的服务器,将目标名称查找经隧道路由; 除非dns非空,否则不生效。
跨内核说明
- 在这三个内核中,OpenVPN 是 mihomo 特有的。Xray-core 与 sing-box 均未 提供 OpenVPN 出站——若要用这些内核桥接 OpenVPN 端点,你需要运行一个独立的 OpenVPN 客户端,并将
socks/http或 TUN 入站指向它。
源码: adapter/outbound/openvpn.go:43-66 · v1.19.27 (5184081)
