IPsec 配置备忘 Part9 - RouterOS
这篇来填一个在 Part1 的时候挖的坑,简单介绍一下怎么在 RouterOS 和 strongSwan 之间配置一个 Site-to-Site 的 IKEv2 VPN。如果你还没有动手实际配置过 strongSwan,我强烈建议你先读完至少 Part1~5 和 Part7,并且自己动手配置一个能用的 strongSwan 服务端。这样至少能保证你会配置 strongSwan,否则同时学习 RouterOS 和 strongSwan 两种配置方法会让人云里雾里。
网络结构
RouterOS 做路由器,用 DHCP 给内网设备分配192.168.50.0/24
段中的 IP 地址。并且用 IPsec 的 Tunnel 模式将所有来自此 IP 段的数据转发至服务器22.22.22.22
。路由器本身的 IP 并不重要。
阅读基本 RouterOS 命令
在本文中我主要使用 RouterOS 命令来表示具体的配置,但是实际情况下调试 WebUI 会更方便。这里提供一张简图解释怎么阅读 RouterOS 的命令:
证书生成
我这里只贴 certtool 的 template 文件,具体的生成指令请参考 Part2。注意 RouterOS 似乎还不支持 Ed25519 证书,所以需要使用 ECDSA 或者是 RSA 证书。
1 | cn = "随意填, 我们使用 DNS SAN 作为 ID" |
1 | cn = "同样随意填" |
strongSwan 配置
由于这是一个 Site-to-Site 连接,所以不需要 Virtual IP 了。配置基于 Part2 中的hosta.conf
,同样也是有变化的地方做了注释
1 | connections { |
RouterOS DHCP 设置
这里假设读者已经会在 RouterOS 中设置 VLAN。所以只是简单的把我的 LAN 配置列出来,方便读者调试。假设使用 ether8
,bridge 名称为 LAN
,使用 VLAN=50
,子网 IP 段是 192.168.50.100-192.168.50.200
。也可以参考我以前写的一篇《访客网络配置备忘》。
1 | # 将 ether8 加入网桥 |
注意我们没有设置任何 NAT 规则,现在将一台电脑连接到ether8
上,应该能自动获取到 IP 但是上不了网。如果能上网说明你的 NAT 规则设置得太宽了,你在之后需要参考 NAT and Fasttrack bypass 设置额外的规则。
RouterOS IPsec 术语对照表
RouterOS 使用了自己的一套术语来描述 IPsec 相关的配置,我尝试了一下把 RouterOS 中的术语和 strongSwan 的配置文件内容一一对应起来:
RouterOS | strongSwan | Note |
---|---|---|
Peer | {local,remote}_addrs |
|
Profile | IKE_SA parameters | No AES GCM |
Identities | local/remote 身份认证块 |
|
Policy | {local,remote}_ts |
分为普通的 policy 和 policy template |
Proposal | CHILD_SA parameters | 支持 AES GCM |
ModeConfig | Address Pool, DNS, etc. | 暂时用不到。 |
Group | 似乎用来把多个 policy template 合成一组,暂时不清楚是做什么用的。 | |
Active Peer | 已建立的 IKE_SA | |
Installed SA | 已建立的 CHILD_SA | |
Key | 暂时不清楚是做什么用的 |
导入证书
需要导入三个文件,先 scp 进 RouterOS 再/certificate import file-name=xxx.pem
即可,WebUI也行。导入后确认 CA 证书显示为T
,客户端证书显示为KT
。
- 客户端私钥
- 客户端证书
- CA 证书
1 | [admin@RouterOS] > /certificate print |
IPsec 设定
先设置 Profile,Proposal,Peer,Identities
1 | # 指定 IKE_SA 的 ciphersuite |
这样设定完以后应该在 Active Peers 里看到这个 Peer 处于established
状态了。然后再设置 Policy:
1 | # 这里的 {src,dst}-address 类似 {local,remote}_ts |
取决于你的防火墙配置,你可能需要显式放行所有将被 IPsec 加密的 forward 流量:
1 | /ip firewall filter add chain=forward ipsec-policy=out,ipsec action=accept |
最后在服务器上设置 masquerade 规则,应该就能上网了。你应当检查你的外部 IP 是不是确实变成了你的服务器的 IP。
其他资料
- MikroTik 的官方文档 提供了更多配置例子和各种参数的详细解释。
- Packet Flow 页面展示了 RouterOS 的详细数据包处理流程。