设备: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

Snipaste_2025-05-15_03-30-08

命令式:

/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

Snipaste_2025-05-15_03-09-07

命令式:

/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

Snipaste_2025-05-15_03-11-05

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

Snipaste_2025-05-15_03-19-37

/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

Snipaste_2025-05-15_03-31-48

/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 + 证书

  1. 安装CA证书,双击 Example-CA.crt -> 安装证书 -> 本地计算机 -> 将所有的证书都放入下列存储 -> 浏览 -> 受信任的根证书颁发机构 -> 下一步 -> 完成

  2. 安装Client证书,双击 Example-Client.pfx -> 本地计算机 -> 下一步 -> 下一步 -> 下一步 -> 将所有的证书都放入下列存储 -> 浏览 -> 个人 -> 下一步 -> 完成

  3. 设置 -> 网络 -> VPN -> 添加 VPN 连接

  • VPN 提供商: Windows (内置)

  • 连接名称: 连接名称

  • 服务器名称或地址: IP 或域名

  • VPN 类型: IKEv2

  • 登录信息的类型: 证书

  • 用户名(可选): 不填

  • 密码(可选): 不填

Windows 客户端证书必须安装到计算机个人,当前用户个人不行,原因未知

  1. 修改控制面板网络中该连接

控制面板 -> 网络和 Internet -> 网络和共享中心 -> 更改适配器设置 -> 连接名称右键 -> 安全 身份验证 切换为 使用计算机证书

  1. 连接

⛤ 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"

参考

RouterOS基于IKEv2/IPSec PSK和安卓Android组网

MikroTik IPSec ike2VPN server

Mikrotik Routeros Offical IPsec Manual