使用 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-sign2. 创建服务器证书
用于 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-server3. 创建客户端证书
为您的第一个客户端(如笔记本电脑、手机)创建证书,key-usage 需包含 tls-client。
add name=client1 \
common-name=client1 \
days-valid=3650 \
key-size=2048 \
key-usage=tls-client重要提示:若需支持多个客户端,请为每个客户端重复执行上述创建命令,并确保name和common-name(通常保持一致)唯一。
1.2 证书签发
使用 CA 证书对服务器证书和客户端证书进行签名。
1. 自签名 CA 证书
为 CA 根证书进行自签名。
sign ovpn-ca name=ovpn-ca2. 签发服务器证书
使用 CA 证书 ovpn-ca 为服务器证书 ovpn-server 签名。
sign ovpn-server name=ovpn-server ca=ovpn-ca3. 签发客户端证书
使用 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=no3.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 脚本示例。在执行前,您需要:
- 将脚本中的
remote ovpn.simaek.com替换为您 RouterOS 的公网 IP 或域名。 - 确保您已从 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>部分将证书和密钥直接整合进一个文件,方便分发。
六、测试连接与路由
- 导入与连接:将生成的
client1.ovpn文件导入到 OpenVPN 客户端(如 OpenVPN Connect)中,然后发起连接。系统会提示输入用户名(simaek)和密码(123456)。 - 连通性测试:连接成功后,在客户端上打开命令行,尝试 ping 服务器端的虚拟接口地址
10.10.10.1。若能 ping 通,则证明 VPN 隧道已成功建立。 - (可选)配置路由:默认情况下,只有访问 VPN 内网(10.10.10.0/24)的流量会通过隧道。若希望所有客户端流量都经过 VPN,请取消客户端配置文件中
redirect-gateway def1一行的注释,并需要在 RouterOS 上配置 NAT(网络地址转换)规则,以允许来自 VPN 客户端的流量访问互联网。
希望这份优化后的教程对您有所帮助。如果您在执行过程中遇到任何问题,欢迎随时提出。