Skip to content

OpenVPN — mihomo

mihomo 可以将 OpenVPN 服务器作为出站拨号,运行一个用户态客户端,建立一个 tun 风格的栈设备,并将匹配的流量经加密隧道路由。控制通道通过证书 (ca / cert / key)、可选的 tls-crypt,以及/或 auth-user-pass 凭据进行认证;数据通道使用协商出的 cipher 加密。

出站

位于 proxies: 下、type: openvpn 的条目。内嵌 BasicOption (通用出站字段)。

字段类型默认值允许值描述
namestring(required)<string>唯一的代理名称。
serverstring(required)<host>OpenVPN 服务器主机/IP。
portint(required)<port>服务器端口。
protostringudpudp | tcpOpenVPN 隧道的传输层协议。
devstringtuntun虚拟设备类型(例如 `tun`)。
cipherstring(server-negotiated)AES-256-GCM | AES-128-GCM | <cipher>数据通道加密套件,例如 `AES-256-GCM`。
authstring(unset)SHA256 | SHA512 | <digest>控制通道的 HMAC 摘要算法,例如 `SHA256`。
comp-lzostring(unset)yes | no | adaptiveLZO 压缩设置。
castring(required)<PEM>CA 证书(PEM,内联或文件路径)。
certstring(unset)<PEM>客户端证书(PEM)。
keystring(unset)<PEM>客户端私钥(PEM)。
tls-cryptstring(unset)<key>用于控制通道加密/认证的 tls-crypt 静态密钥。
usernamestring(unset)<string>auth-user-pass 用户名。
passwordstring(unset)<string>auth-user-pass 密码。
pingint(unset)<seconds>保活 ping 间隔(秒)。
ping-restartint(unset)<seconds>在如此多秒数内未收到 ping 后重启隧道(秒)。
mtuint1500<integer>隧道 MTU。
udpboolfalsetrue | false允许 UDP 流量通过代理。
remote-dns-resolveboolfalsetrue | 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)

由 Argsment 出品的 Core Tutorial