设备:MikroTik RB750Gr3
系统:RouterOS 7
配置
配置结构
flowchart TD
%% 节点声明
Group[Group]
Peer[Peer]
CFG[Mode Config]
Identity[Identity]
Profile[Profile]
Proposal[Proposal]
Policy[Policy]
Pool[Pool]
%% 节点连线
Group --> Policy
Peer --> Identity
CFG --> Identity
Profile --> Peer
Pool --> CFG
Proposal --> Policy
Group --> Identity
★ Groups
IP -> IPSec -> Groups
新建项
Name: IKEv2-group

命令式:
/ip ipsec policy add group=IKEv2-group proposal=ikev2-proposal template=yes
★ Proposals
IP -> IPSec -> proposal
新建项
Name: IKEv2-proposal
Auth.Algorithms:
- sha1
- sha256
Encr.Algorithms:
- aes-256 cbc
PFS Group: modp2048

命令式:
/ip ipsec proposal add auth-algorithms=sha256,sha1 enc-algorithms=aes-256-cbc name=IKEv2-proposal pfs-group=modp2048
★ Profiles
IP -> IPSec -> Profiles
新建项
Name: IKEv2-profile
Hash Algorithms: sha256
PRF Algorithms: auto
Encyption Algorithm:
- aes-256
DH Group:
- modp1024
- modp2048
Proposal Check: obey
- NAT Traversal
DPD Interval: 30
DPD Maximum Failures: 10

DPD Interval
- 作用:指定检测报文发送的间隔时间。
- 单位:秒(seconds)
- 例子:如果设置为
10,表示每 10 秒发送一次 DPD 检测包。
DPD Maximum Failures
- 作用:指定在连续多少次未收到对端响应后,认为连接失效。
- 例子:如果设置为
5,表示连续 5 次未收到回应就判定对端已经离线。
/ip ipsec profile add dpd-interval=1m dpd-maximum-failures=10 enc-algorithm=aes-256 hash-algorithm=sha256 name=IKEv2-profile
★ Peers
IP -> IPSec -> Peers
新建项
Name: IKEv2-peer
Profile:IKEv2-profile
Exchange Mode:IKE2
- Passive
- Send INITIAL_CONTACT

/ip ipsec peer add exchange-mode=ike2 name=IKEv2-peer passive=yes profile=IKEv2-profile
★ Policies
IP -> IPSec -> Policies
新建项
- template
Group: IKEv2-group
Proposal: ikev2-proposal

/ip ipsec policy add group=IKEv2-group proposal=IKEv2-proposal template=yes
★ Mode Configs
IP -> IPSec -> Mode Configs
Name: IKEv2-mode
- Responder
Address Pool: 地址池
Address Prefix Length: 24
Split Include:
- 192.168.8.0/24
- 192.168.89.0/24
Split DNS:
xyh.moe
System DNS
Static DNS:
- 192.168.8.1
System DNS: 勾选的话终端会继承路由器的 DNS IP,也就是IP -> DNS -> Servers 的值,不会从路由器解析 DNS。
/ip ipsec mode-config add address-pool=地址池 name=IKEv2-cfg split-dns=xyh.moe split-include=192.168.8.0/24,192.168.89.0/24 static-dns=192.168.8.1 system-dns=no
★ 完整脚本配置(不含Identity)
{
# 地址池
/ip pool
add name=IKEv2-pool ranges=192.168.89.0/24
# Config
/ip ipsec mode-config
add address-pool=IKEv2-pool name=IKEv2-cfg static-dns=192.168.8.1 system-dns=no
# Proposal
/ip ipsec proposal
add auth-algorithms=sha256 enc-algorithms=aes-256-cbc name=IKEv2-proposal pfs-group=modp2048
# Group
/ip ipsec policy group
add name=IKEv2-group
# Policy
/ip ipsec policy
add group=IKEv2-group proposal=IKEv2-proposal template=yes
# Profile
/ip ipsec profile
add dh-group=modp2048 enc-algorithm=aes-256 hash-algorithm=sha256 name=IKEv2-profile
# Peer
/ip ipsec peer
add exchange-mode=ike2 name=IKEv2-peer passive=yes profile=IKEv2-profile
}
★ Identities PSK (pre shared key)
[!Note]
Windows 不支持 PSK 认证
- Peer: ikev2-peer
- Auth.Method: pre shared key
- Secret: 密码
- Policy Template Group: ikev2-group
- My ID Type: fqdn
- My ID: example.com
- Remote ID Type: auto
- Match By: remote id
- Mode Configuration: ikev2-mode
- Generate Policy: port strict
★ Identities digital signature (数字签名)
创建证书1
{
# 作者:仙玉衡
# 通讯:xian.yuheng@outlook.com
#
# 变量说明
# CN CommonName
# 域名:*.google.com
# 昵称:google
# 格式
# :local CN "XYH"
# :local CN "*.xyh.moe"
# AN subjectAltName
# 有域名填域名
# 没有域名填IP
# 还可以填邮箱
# 格式
# 单个域名 :local CN "DNS:*.xyh.moe"
# 多个域名 :local CN "DNS:*.xyh.moe,DNS:ikev2.xyh.moe"
# 单个IP :local CN "IP:8.8.8.8"
# 多个IP :local CN "IP:8.8.8.8,IP:9.9.9."
# 邮箱 :local CN "email:yourname@mail.com"
# 混合 :local CN "DNS:*.xyh.moe,IP:8.8.8.8"
#
# PASS p12文件密码
# 虽然可以不设(留空)
# 但是有些设备导入时必须要求输入密码
# 所以,还是设一个吧
#
# 关于中文说明
# RouterOS支持中文,但是不那么支持
# 在Winbox中可直接编辑中文
# 但在terminal中必须转换成hex形式
# 比如 "\E4\BB\99\E7\8E\89\E8\A1\A1" = "仙玉衡"
:local CN "\E4\BB\99\E7\8E\89\E8\A1\A1 ROS"
:local SAN "DNS:ikev2.xyh.moe,IP:8.8.8.8"
:local PASS "12345678"
# 创建 CA
/certificate add name=IKEv2-CA common-name=$CN key-size=2048 key-usage=key-cert-sign,crl-sign days-valid=3650
/certificate sign IKEv2-CA ca-crl-host="" name=IKEv2-CA ca=IKEv2-CA
# 创建 Server 证书
/certificate add name=IKEv2-Server common-name="IKEv2 Server" subject-alt-name=$SAN key-size=2048 key-usage=digital-signature,key-encipherment,tls-server days-valid=3650
/certificate sign IKEv2-Server ca=IKEv2-CA name=IKEv2-Server
# 创建 Client 证书
/certificate add name=IKEv2-Client common-name="IKEv2 Client" subject-alt-name=$SAN key-size=2048 key-usage=digital-signature,key-encipherment,tls-client days-valid=3650
/certificate sign IKEv2-Client ca=IKEv2-CA name=IKEv2-Client
# 导出证书
## CA
/certificate export-certificate IKEv2-CA file-name="\E4\BB\99\E7\8E\89\E8\A1\A1 IKEv2 CA"
/certificate export-certificate IKEv2-CA file-name="\E4\BB\99\E7\8E\89\E8\A1\A1 IKEv2 CA" type=pkcs12 export-passphrase=$PASS
## Server
/certificate export-certificate IKEv2-Server file-name="\E4\BB\99\E7\8E\89\E8\A1\A1 IKEv2 Server"
/certificate export-certificate IKEv2-Server file-name="\E4\BB\99\E7\8E\89\E8\A1\A1 IKEv2 Server" type=pkcs12 export-passphrase=$PASS
## Client
/certificate export-certificate IKEv2-Client file-name="\E4\BB\99\E7\8E\89\E8\A1\A1 IKEv2 Client"
/certificate export-certificate IKEv2-Client file-name="\E4\BB\99\E7\8E\89\E8\A1\A1 IKEv2 Client" type=pkcs12 export-passphrase=$PASS
}
会生成以下共六个证书文件
| 安装到 | 备注 | ||
|---|---|---|---|
| X IKEv2 CA.crt | 根证书 | 服务端+客户端 | |
| X IKEv2 CA.p12 | 根证书+私钥 | ||
| X IKEv2 Server.crt | 服务端证书 | ||
| X IKEv2 Server.p12 | 服务端证书+私钥 | 服务端 | |
| X IKEv2 Client.crt | 客户端证书 | 服务端 | |
| X IKEv2 Client.p12 | 客户端证书+私钥 | 客户端 |
flowchart TB
%% --- 服务端模块 ---
subgraph SERVER_CERTS [服务端证书]
direction LR
SERVER_C[服务端 证书]
SERVER_P[服务端 私钥]
SERVER_X[服务端 p12]
SERVER_C --> |合成| SERVER_X
SERVER_P --> |合成| SERVER_X
end
%% --- CA 模块 ---
subgraph CA_CERTS [CA根证书]
direction LR
CA_C[CA 证书]
CA_P[CA 私钥]
CA_X[CA p12]
CA_C --> |合成| CA_X
CA_P --> |合成| CA_X
end
%% --- 客户端模块 ---
subgraph CLIENT_CERTS [客户端证书]
direction LR
CLIENT_C[客户端 证书]
CLIENT_P[客户端 私钥]
CLIENT_X[客户端 p12]
CLIENT_C --> |合成| CLIENT_X
CLIENT_P --> |合成| CLIENT_X
end
%% --- 核心实体 ---
CLIENT["客户端 <br>(手机 / 电脑 / 路由器)"]
SERVER["服务端 <br>(路由器)"]
%% --- 部署/信任链连线 ---
CA_C ==> |导入| SERVER
SERVER_X ==> |导入| SERVER
CLIENT_C ==> |导入| SERVER
CA_C ===> |导入| CLIENT
CLIENT_X ===> |导入| CLIENT
CA_CERTS ==> |签发| SERVER_CERTS
CA_CERTS ==> |签发| CLIENT_CERTS
配置
IP -> IPSec -> Identities
- Peer:ikev2-peer
- Auth Method: digital signature
- Certificate: 服务端证书
- Remote Certificate: 客户端证书
- Policy Template Group:ikev2-group
- Notrack Chain:
- My ID Type:auto
- Remote ID Type:auto
- Match By: certificate
- Mode Configuration:ikev2-cfg
- Generate Policy:port strict
⛤ Identities EAP-MSCHAPv2
服务端:
- CA
- Server证书
客户端:
- CA证书
- 用户名密码
特点:
- 简单
- iOS原生支持好
不需要 Client 证书。
终端连接
★ Windows IKEv2 + 证书
-
安装CA证书,双击
Example-CA.crt->安装证书->本地计算机->将所有的证书都放入下列存储->浏览->受信任的根证书颁发机构->下一步->完成 -
安装Client证书,双击
Example-Client.pfx->本地计算机->下一步->下一步->下一步->将所有的证书都放入下列存储->浏览->个人->下一步->完成 -
设置->网络->VPN->添加 VPN 连接
-
VPN 提供商:Windows (内置) -
连接名称:连接名称 -
服务器名称或地址:IP 或域名 -
VPN 类型:IKEv2 -
登录信息的类型:证书 -
用户名(可选):不填 -
密码(可选):不填
Windows 客户端证书必须安装到计算机个人,当前用户个人不行,原因未知
- 修改控制面板网络中该连接
控制面板 -> 网络和 Internet -> 网络和共享中心 -> 更改适配器设置 -> 连接名称右键 -> 安全
身份验证 切换为 使用计算机证书
- 连接
⛤ Windows IKEv2 EAP-MSCHAPv2
Android IKEv2 + PSK
名称:名称VPN 类型:IKEV2/IPSec PSK服务器地址:IP 或域名IPSec 标识符:example.com# Identities My ID 值IPSec 预共享密钥:密码# Identities Secret 值
★ Android IKEv2 + 证书
⛤ IOS + PSK
⛤ IOS + 证书
⛤ RouterOS 互联
⛤ 内网域名解析2
默认情况下 IP 解析出来还是公网的地址
IP -> Firewall -> FilterRules
/ip firewall address-list
add address=192.168.0.0/24 list=LAN
add address=192.168.13.0/24 list=LAN
/ip firewall filter add action=accept chain=input protocol=tcp src-address-list=LAN comment="Internal Router access"
/ip firewall filter add action=accept chain=input protocol=udp src-address-list=LAN comment="Internal Router access"