IKEv2 EAP between NordVPN and RouterOS
本页将引导用户在 RouterOS v6.45+ 中使用 EAP 认证配置一条通往 NordVPN 服务器的 IKEv2 安全隧道,涵盖根 CA 安装、服务器主机名查找、使用 Phase 1/2 配置文件和策略设置 IPsec 隧道、EAP 认证的模式配置,以及 peer/identity 凭据设置。
NordVPN 与 RouterOS 之间的 IKEv2 EAP
从 RouterOS v6.45 开始,可以使用 EAP 认证建立一条通往 NordVPN 服务器的 IKEv2 安全隧道。本手册页说明如何配置它。

安装根 CA
首先下载并导入 NordVPN 根 CA 证书。
/tool/fetch url="https://downloads.nordvpn.com/certificates/root.der"
/certificate/import file-name=root.der
此时 System/Certificates 菜单中应该已存在受信任的 NordVPN Root CA 证书。
[admin@MikroTik] > /certificate/print where name~"root.der"
Flags: K - private-key, L - crl, C - smart-card-key, A - authority, I - issued, R - revoked, E - expired, T - trusted
# NAME COMMON-NAME SUBJECT-ALT-NAME FINGERPRINT
0 T root.der_0 NordVPN Root CA 8b5a495db498a6c2c8c...
查找服务器的主机名
访问 https://nordvpn.com/servers/tools/ 并查找推荐服务器的主机名。在本例中为 lv20.nordvpn.com。

设置 IPsec 隧道
建议创建单独的 Phase 1 配置文件和 Phase 2 proposal 配置,以免干扰任何现有或未来的 IPsec 配置。
/ip/ipsec/profile
add name=NordVPN
/ip/ipsec/proposal
add name=NordVPN pfs-group=none
虽然可以使用默认的 policy 模板来生成 policy,但最好创建新的 policy 组和模板,以便将此配置与任何其他 IPsec 配置区分开。
/ip/ipsec/policy/group
add name=NordVPN
/ip/ipsec/policy
add dst-address=0.0.0.0/0 group=NordVPN proposal=NordVPN src-address=0.0.0.0/0 template=yes
创建一个新的 mode config 条目,设置 responder=no,它将向服务器请求配置参数。
/ip/ipsec/mode-config
add name=NordVPN responder=no
最后,创建 peer 和 identity 配置。在 username 和 password 参数中指定你的 NordVPN 凭据。
/ip/ipsec/peer
add address=lv20.nordvpn.com exchange-mode=ike2 name=NordVPN profile=NordVPN
/ip/ipsec/identity
add auth-method=eap certificate="" eap-methods=eap-mschapv2 generate-policy=port-strict mode-config=NordVPN peer=NordVPN policy-template-group=NordVPN username=support@mikrotik.com password=secret
验证连接是否成功建立。
/ip/ipsec
active-peers print
installed-sa print
选择通过隧道发送的内容
如果查看生成的动态 policy,我们会发现只有具有特定源地址(由 mode config 接收)的流量会通过隧道发送。但路由器在大多数情况下需要将特定设备或网络路由通过隧道。在这种情况下,我们可以使用源 NAT 将数据包的源地址改为与 mode config 地址匹配。由于 mode config 地址是动态的,无法创建静态源 NAT 规则。在 RouterOS 中,可以为 mode config 客户端生成动态源 NAT 规则。
选项 1:通过隧道发送所有流量
在本例中,路由器后面有一个本地网络 10.5.8.0/24,我们希望将该网络的所有流量通过隧道发送。首先,我们必须创建一个由该本地网络组成的 IP/Firewall/Address list。
/ip/firewall/address-list
add address=10.5.8.0/24 list=local
也可以只指定单个主机,其所有流量将通过隧道发送。例如:
/ip/firewall/address-list
add address=10.5.8.120 list=local
add address=10.5.8.23 list=local
完成后,我们可以将新创建的 IP/Firewall/Address list 分配给 mode config 配置。
/ip/ipsec/mode-config
set [ find name=NordVPN ] src-address-list=local
验证隧道建立时是否动态生成了正确的源 NAT 规则。
[admin@MikroTik] > /ip/firewall/nat/print
Flags: X - disabled, I - invalid, D - dynamic
0 D ;;; ipsec mode-config
chain=srcnat action=src-nat to-addresses=192.168.77.254 src-address-list=local dst-address-list=!local
信息
警告
确保动态 mode config 地址不属于本地网络。
重要: 也可以组合使用两种选项(1 和 2),仅允许特定本地地址/网络访问特定地址。
选项 2:通过隧道访问特定地址
也可以使用 Mangle 防火墙中的 connection-mark 参数,仅通过隧道发送特定流量。其工作方式与选项 1 类似 —— 根据 mode config 下配置的 connection-mark 参数生成动态 NAT 规则。
首先,在你的 mode config 配置下设置 connection-mark。
/ip/ipsec/mode-config
set [ find name=NordVPN ] connection-mark=NordVPN
完成后,会使用服务器提供的动态地址生成一条 NAT 规则:
[admin@MikroTik] > /ip/firewall/nat/print
Flags: X - disabled, I - invalid, D - dynamic
0 D ;;; ipsec mode-config
chain=srcnat action=src-nat to-addresses=192.168.77.254 connection-mark=NordVPN
之后,就可以使用 Mangle 防火墙将此 connection-mark 应用于任何流量。在本例中,通过隧道授予对 mikrotik.com 和 8.8.8.8 的访问权限。
创建一个新的 address list:
/ip/firewall/address-list
add address=mikrotik.com list=VPN
add address=8.8.8.8 list=VPN
将 connection-mark 应用于与所创建 address list 匹配的流量:
/ip/firewall/mangle
add action=mark-connection chain=prerouting dst-address-list=VPN new-connection-mark=NordVPN passthrough=yes
信息
也可以组合使用两种选项(1 和 2),仅允许特定本地地址/网络访问特定地址