设备 MikroTik RB750Gr3
系统 RouterOS 7.16.*
配置
参考1
配置结构
flowchart TD
%% 节点声明
A[Group]
B[Peer]
C[Mode Config]
D[Identity]
E[Profile]
F[Proposal]
G[Policy]
H[Pool]
%% 节点连线
A --> G
B --> D
C --> D
E --> B
H --> C
F --> G
A --> D
★ 1 Groups
IP
-> IPSec
-> Groups
新建项
Name: ikev2-group
命令式:
/ip ipsec policy add group=ikev2-group proposal=ikev2-proposal template=yes
★ 2 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
★ 3 Profiles
IP
-> IPSec
-> Profiles
新建项
Name: ikev2-profile
Hash Algorithms: sha256
PRF Algorithms: auto
Encyption Algorithm:
- aes-256
DH Group:
- modp1024
- nodp2048
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
★ 4 Peers
IP
-> IPSec
-> Peers
新建项
Name: ikve2-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
★ 5 Policies
IP
-> IPSec
-> Policies
新建项
- template
Group: ikev2-group
Proposal: ikev2-proposal
/ip ipsec policy add group=ikev2-group proposal=ikev2-proposal template=yes
★ 6 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
★ 7 Identities
★ PSK (Pre-Shared Key)
[!Note]
Windows 原生不支持 PSK 认证
- Peer: ikev2-peer
- Auth.Method: pre shared key
- Secert: 密码
- 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
★ digital signature (数字签名)
生成证书
参考2
.pri.pem
: 私钥文件
.crt
: 证书文件
pfx
: 同时包含证书和私钥的文件
生成 CA 证书及密钥
openssl req -new -x509 -utf8 \
-days 3650 \
-newkey rsa:2048 -noenc -keyout Example-CA.pri.pem \
-subj "/CN=示例公司" \
-addext basicConstraints=critical,CA:TRUE,pathlen:1 \
-addext keyUsage=critical,digitalSignature,keyCertSign,cRLSign \
-addext subjectKeyIdentifier=hash \
-addext authorityKeyIdentifier=none \
-out Example-CA.crt
生成 Server 证书及密钥
openssl req -new -x509 -utf8 \
-days 365 \
-CA Example-CA.crt \
-CAkey Example-CA.pri.pem \
-newkey rsa:2048 -noenc -keyout Example-Server.pri.pem \
-subj "/CN=IKEv2 Server" \
-addext basicConstraints=critical,CA:FALSE \
-addext authorityKeyIdentifier=keyid \
-addext subjectKeyIdentifier=hash \
-addext keyUsage=critical,digitalSignature,keyEncipherment \
-addext extendedKeyUsage=serverAuth \
-addext subjectAltName=DNS:ikev2.Example-.com \
-out Example-Server.crt
openssl pkcs12 -export \
-out Example-Server.pfx \
-inkey Example-Server.pri.pem \
-certfile Example-CA.crt \
-passout pass: \
-in Example-Server.crt
生成 Client 证书及密钥
openssl req -new -x509 -utf8 \
-days 365 \
-CA Example-CA.crt \
-CAkey Example-CA.pri.pem \
-newkey rsa:2048 -noenc -keyout Example-Client.pri.pem \
-subj "/CN=IKEv2 Server" \
-addext basicConstraints=critical,CA:FALSE \
-addext authorityKeyIdentifier=keyid \
-addext subjectKeyIdentifier=hash \
-addext keyUsage=critical,digitalSignature,keyEncipherment \
-addext extendedKeyUsage=clientAuth \
-addext subjectAltName=DNS:ikev2.Example-.com \
-out Example-Client.crt
openssl pkcs12 -export \
-inkey Example-Client.pri.pem \
-in Example-Client.crt \
-certfile Example-CA.crt \
-passout pass: \
-out Example-Client.pfx
在 routeros
中,点击 Files
-> Upload...
Example-CA.crt
Example-Server.pfx
Example-Client.crt
在 routeros
-> System
-> Certificates
-> Import
导入刚刚上传的3个文件
配置
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:ignore
- Match By: certificate
- Mode Configuration:ikev2-cfg
- Generate Policy:port strict
内网域名解析
参考3
默认情况下 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"
将规则位置调整到 allow IKE
旁边
终端连接
windows IKEv2 + 证书
双击 Example-CA.crt
-> 安装证书
-> 本地计算机
-> 将所有的证书都放入下列存储
-> 浏览
-> 受信任的根证书颁发机构
-> 下一步
-> 完成
双击 Example-Client.pfx
-> 本地计算机
-> 下一步
-> 下一步
-> 下一步
-> 将所有的证书都放入下列存储
-> 浏览
-> 个人
-> 下一步
-> 完成
设置
-> 网络
-> VPN
-> 添加 VPN 连接
-
VPN 提供商
:Windows (内置)
-
连接名称
:连接名称
-
服务器名称或地址
:IP 或域名
-
VPN 类型
:IKEv2
-
登录信息的类型
:证书
-
用户名(可选)
:不填
-
密码(可选)
:不填
Windows 客户端证书必须安装到计算机个人,当前用户个人不行,原因未知
修改控制面板网络中该连接
控制面板
-> 网络和 Internet
-> 网络和共享中心
-> 更改适配器设置
-> 连接名称
右键 -> 安全
身份验证
切换为 使用计算机证书
Android IKEv2 + PSK
名称
:名称
VPN 类型
:IKEV2/IPSec PSK
服务器地址
:IP 或域名
IPSec 标识符
:example.com
# Identities My ID 值IPSec 预共享密钥
:密码
# Identities Secret 值
后记
参考1建立好了连接,但是完全无法访问内网任何地址,给chatgpt看了配置后,他告诉我 Policies
不能用 Template
.于是在他的帮助下,新建了一个非 Template
Policy
就能正常访问了。
https://www.77bx.com/504.html (vvvv) ↩ ↩
https://github.com/GLlgGL/IKEv2-IPsec-on-MikroTik (IKVE2 配置) ↩
https://forum.mikrotik.com/viewtopic.php?t=179430 (IKVE2 内网 DNS 解析) ↩