使用 MikroTik RouterOS 搭建 OpenVPN 服务器

本文将详细介绍如何在 MikroTik RouterOS 上,利用其内置功能,从零开始搭建一个安全、可靠的 OpenVPN 服务器。

一、证书管理与签发

OpenVPN 使用证书进行身份验证。我们将使用 RouterOS 自身的证书管理工具,创建并签发所需的全部证书。

首先,在 RouterOS 命令行界面中,切换到证书管理上下文:

[admin@RouterOS] > /certificate
[admin@RouterOS] /certificate>

1.1 创建证书签名请求

依次创建 CA 根证书、服务器证书以及一个客户端证书。

1. 创建 CA 根证书
作为证书链的起点,CA 证书用于签发其他所有证书,有效期建议设置较长(例如 10 年)。

add name=ovpn-ca \
common-name=ovpn-ca \
days-valid=3650 \
key-size=2048 \
key-usage=crl-sign,key-cert-sign

2. 创建服务器证书
用于 OpenVPN 服务器,其 key-usage 必须包含 tls-server

add name=ovpn-server \
common-name=ovpn-server \
days-valid=3650 \
key-size=2048 \
key-usage=digital-signature,key-encipherment,tls-server

3. 创建客户端证书
为您的第一个客户端(如笔记本电脑、手机)创建证书,key-usage 需包含 tls-client

add name=client1 \
common-name=client1 \
days-valid=3650 \
key-size=2048 \
key-usage=tls-client
重要提示:若需支持多个客户端,请为每个客户端重复执行上述创建命令,并确保 namecommon-name(通常保持一致)唯一。

1.2 证书签发

使用 CA 证书对服务器证书和客户端证书进行签名。

1. 自签名 CA 证书
为 CA 根证书进行自签名。

sign ovpn-ca name=ovpn-ca

2. 签发服务器证书
使用 CA 证书 ovpn-ca 为服务器证书 ovpn-server 签名。

sign ovpn-server name=ovpn-server ca=ovpn-ca

3. 签发客户端证书
使用 CA 证书 ovpn-ca 为客户端证书 client1 签名。

sign client1 name=client1 ca=ovpn-ca
重要提示:对于每一个创建的客户端证书,都需要重复此签发步骤。

二、配置 IP 地址池

为了让服务器能为连接的客户端动态分配内网 IP,我们需要创建一个 IP 池。服务器自身的虚拟接口将使用该网络中的一个独立地址(本例中为 10.10.10.1),该地址不应包含在分配给客户端的地址池范围内。

/ip pool add name=ovpn-pool ranges=10.10.10.100-10.10.10.199

三、配置 PPP 服务

OpenVPN 在 RouterOS 中被视为一种 PPP 服务,因此需要进行相关配置。

3.1 创建 PPP 配置文件

此配置文件定义了 VPN 连接的网络层参数。

/ppp profile add name=ovpn-profile \
use-encryption=yes \                     # 强制加密
local-address=10.10.10.1 \                # 服务器端虚拟接口地址
remote-address=ovpn-pool \                 # 引用上一步创建的地址池
change-tcp-mss=yes \                       # 调整 TCP MSS 以避免 PMTU 问题
use-compression=yes \                      # 允许数据压缩
use-ipv6=no

3.2 创建用户认证信息

创建一个 PPP Secret,用于客户端的用户名/密码验证。此账户将与客户端证书共同构成双重认证。

/ppp secret add name=simaek \               # 用户名
password=123456 \                           # 密码
profile=ovpn-profile \                       # 绑定到 VPN 配置文件
service=ovpn                                 # 指定服务类型为 OpenVPN

四、启用并配置 OpenVPN 服务器接口

最后一步是启用 OpenVPN 服务器接口,并将之前创建的所有组件关联起来。

/interface ovpn-server server set \
default-profile=ovpn-profile \               # 指定默认 PPP 配置
protocol=tcp \                               # 使用 TCP 协议(也可选择 UDP)
netmask=24 \                                  # 分配给客户端网络的掩码
mode=ip \                                     # 工作模式为 IP 层隧道
port=1194 \                                   # 标准 OpenVPN 端口
certificate=ovpn-server \                      # 指定服务器证书
require-client-certificate=yes \                # 强制要求客户端证书
auth=sha1 \                                     # 认证算法
cipher=aes128,aes192,aes256 \                    # 允许的加密算法(按优先级排列)
enabled=yes                                      # 立即启用服务器

五、生成客户端配置文件

为了方便客户端连接,需要生成一个 .ovpn 配置文件。此文件包含了连接参数以及所需的证书和密钥。

以下是一个自动化生成该配置的 Linux/macOS 脚本示例。在执行前,您需要:

  1. 将脚本中的 remote ovpn.simaek.com 替换为您 RouterOS 的公网 IP 或域名。
  2. 确保您已从 RouterOS 导出了相应的 CA 证书、客户端证书和客户端密钥,并将它们放在与脚本相同的目录下,文件名与 cat 命令中引用的保持一致(如 cert_export_ovpn-ca.crt)。
cat > client1.ovpn << EOF
client
nobind
pull
persist-key
persist-tun
dev tun
proto tcp-client
remote-cert-tls server
remote ovpn.simaek.com   # 请替换为您的服务器地址
port 1194
auth SHA1
auth-user-pass
auth-nocache
cipher AES-256-CBC
#redirect-gateway def1   # 如需将所有流量都通过 VPN,请取消注释
resolv-retry infinite
reneg-sec 0
verb 3

<ca>
$(cat cert_export_ovpn-ca.crt)
</ca>

<cert>
$(cat cert_export_client1.crt)
</cert>

<key>
$(cat client1.key)
</key>
EOF

配置文件说明

  • auth-user-pass:指示客户端在连接时需要额外输入我们在“三-2”步中设置的用户名和密码。
  • 嵌入的 <ca><cert><key> 部分将证书和密钥直接整合进一个文件,方便分发。

六、测试连接与路由

  1. 导入与连接:将生成的 client1.ovpn 文件导入到 OpenVPN 客户端(如 OpenVPN Connect)中,然后发起连接。系统会提示输入用户名(simaek)和密码(123456)。
  2. 连通性测试:连接成功后,在客户端上打开命令行,尝试 ping 服务器端的虚拟接口地址 10.10.10.1。若能 ping 通,则证明 VPN 隧道已成功建立。
  3. (可选)配置路由:默认情况下,只有访问 VPN 内网(10.10.10.0/24)的流量会通过隧道。若希望所有客户端流量都经过 VPN,请取消客户端配置文件中 redirect-gateway def1 一行的注释,并需要在 RouterOS 上配置 NAT(网络地址转换)规则,以允许来自 VPN 客户端的流量访问互联网。

希望这份优化后的教程对您有所帮助。如果您在执行过程中遇到任何问题,欢迎随时提出。

最后修改:2026 年 03 月 13 日
如果觉得我的文章对你有用,请随意赞赏