RouterOS(ros)与云上VPC通过IPsec实现内网互通 - 涵盖GUI/CLI两种配置方式

2022-08-31 02:28:11 浏览数 (1)

一、前言

ipsec诞生于20世纪90年代,迄今为止,在实现内网互通解决方案中ipsec都是较为常用的。不少网关设备都会考虑集成ipsec的能力,ros便是如此,它作为一个软路由系统,支持的ipsec算法较为完善,本文将以GUI、CLI两种方式讲解ros的ipsec配置,与云上VPC网络实现内网互通。

架构图架构图

二、云上VPN网关与通道配置

1.创建VPN网关

在腾讯云VPN控制台新建VPN网关,并选择需要被打通的VPC,如果涉及到云上多个VPC与云下互通,则需要使用云联网类型网关。

2.创建VPN通道

如下所示创建SPD策略型通道,填写基本配置,本端vpc、vpn网关、对端网关IP:

通信模式可选目的路由和SPD策略类型,具体区别可参考官方文档说明。

选择IKE版本、IKE算法、协商模式、远端标识:

需要注意的是,远端标识如果选FQDN,可以是域名也可以是任何标识。是域名的时候,它也只是一个标识,而且云下的本地标识要和云上配置的一样,不要误以为会跟随域名解析到的IP地址来和对端协商,对端网关在第一步基本配置的时候就已经固定了。

配置IPsec算法,生存周期等:

最后点击完成即可。

3.将VPC路由指向VPN网关

修改VPC路由表,将指向192.168.1.0/24的目的路由,下一跳到VPN网关。

到此云上的配置已经完成。

三、GUI模式配置Ros IPsec

1.配置IPsec Profile

winbox登陆到ros后,在IP -> IPsec里打开IPsec配置菜单:

配置IPsec profile:

DH group用来确定密钥交换过程中使用的密钥强度,强度越高开销也会越高,对应比特位参考如下表格:

DH group

Modulus

1

768 bits

2

1024 bits

5

1536 bits

14

2048 bits

15

3072 bits

16

4096 bits

19

ecp256 bits

20

ecp384 bits

21

ecp521 bits

2.配置对端Peer

如下图配置对端网关、协商模式、引用的ipsec profile等:

3.配置身份验证(Identities)

配置用于身份验证的字段,包括本端标识、远端标识、预共享密钥等:

4.配置IPsec Proposal

配置ipsec提议,指定认证算法、加密算法等:

5.配置感兴趣流(Policies)

如下配置策略,指定本端和对端通信的网段即协议,并采用隧道模式(Tunnel):

6.增加NAT ACCEPT规则

增加一条ACCEPT允许规则,并把优先级调整到第一位:

增加一条accept允许规则:

之后鼠标拖动让此规则置顶。

7.查看IPsec状态并测试连通性

上面配置完毕后,回过头来看IPsec的连接状态及系统日志:

可以看到和云上VPC网段已经建联成功。

连通性测试也正常:

到此,本端和云上VPC已实现内网互通。

四、CLI模式配置Ros IPsec

当某些特殊场景下,ros关闭了winbox登陆,只允许ssh的情况下,CLI并发挥用武之地,配置方法和GUI一致,只是用命令行替代图形界面操作,仅此而已,因此在非必要情况下,要写自动化脚本除外,都建议采用GUI配置,对新手较为友好。

1.配置IPsec Profile
代码语言:shell复制
[admin@MikroTik] > /ip ipsec profile
[admin@MikroTik] /ip ipsec profile> add dh-group=modp768 hash-algorithm=md5 enc-algorithm=aes-128 name=to_tencent
[admin@MikroTik] /ip ipsec profile>
2.配置对端Peer
代码语言:shell复制
[admin@MikroTik] /ip ipsec profile> /ip ipsec peer
[admin@MikroTik] /ip ipsec peer> add address=119.91.254.122 name=to_tencent profile=to_tencent exchange-mode=main
[admin@MikroTik] /ip ipsec peer>
3.配置身份验证(Identities)
代码语言:shell复制
[admin@MikroTik] /ip ipsec profile> ..
[admin@MikroTik] /ip ipsec> identity add peer=to_tencent auth-method=pre-shared-key secret=123456
[admin@MikroTik] /ip ipsec> 
4.配置IPsec Proposal
代码语言:shell复制
[admin@MikroTik] /ip ipsec> proposal add name=to_tencent auth-algorithms=md5 enc-algorithms=aes-128-cbc pfs-group=none 
[admin@MikroTik] /ip ipsec> 
5.配置感兴趣流(Policies)
代码语言:shell复制
[admin@MikroTik] /ip ipsec> policy add peer=to_tencent tunnel=yes src-address=192.168.1.0/24 dst-address=10.100.1.0/24 protocol=all proposal=to_tencent
[admin@MikroTik] /ip ipsec> 
6.增加NAT ACCEPT规则

增加一条NAT规则,并把优先级调整到第一位:

代码语言:shell复制
[admin@MikroTik] /ip firewall nat> /ip ipsec 
[admin@MikroTik] /ip ipsec> /ip firewall nat
[admin@MikroTik] /ip firewall nat> print all   #如果规则较多一页展示不完,按Enter键翻页,否则会影响下面的move操作找不到items
[admin@MikroTik] /ip firewall nat> move 20 0
[admin@MikroTik] /ip firewall nat> 
7.查看IPsec状态并测试连通性
代码语言:shell复制
[admin@MikroTik] /ip firewall> /ip ipsec 
[admin@MikroTik] /ip ipsec> active-peers print where comment=to_tencent
Flags: R - responder, N - natt-peer 
 #    ID                   STATE              UPTIME          PH2-TOTAL REMOTE-ADDRESS                                                                                          DYNAMIC-ADDRESS                                                                
 0  N ;;; to_tencent
                           established        10m34s                  1 119.91.254.122                                                                                         
[admin@MikroTik] /ip ipsec> installed-sa print where (spi=0x2953159 or spi=0x8051BFF6) and (src-address="113.87.48.200:4500" or dst-address~"113.87.48.200")
Flags: H - hw-aead, A - AH, E - ESP 
 0  E spi=0x2953159 src-address=119.91.254.122:4500 dst-address=113.87.48.200:4500 state=mature auth-algorithm=md5 enc-algorithm=aes-cbc enc-key-size=128 auth-key="75dfa24b76a571dcc9eccbb5c48b5b5d" enc-key="df47098bf78a98a7be4e45b1f2a64908" 
      addtime=aug/28/2022 17:22:10 expires-in=19m17s add-lifetime=24m/30m current-bytes=3303 current-packets=19 replay=128 

 1  E spi=0x8051BFF6 src-address=113.87.48.200:4500 dst-address=119.91.254.122:4500 state=mature auth-algorithm=md5 enc-algorithm=aes-cbc enc-key-size=128 auth-key="20e63c4d95095d1f8d96c9e5b0f256cf" enc-key="8d33ed1bea1d2df33f8aa8a28fd073b4" 
      addtime=aug/28/2022 17:22:10 expires-in=19m17s add-lifetime=24m/30m current-bytes=4121 current-packets=25 replay=128 
[admin@MikroTik] /ip ipsec> /ip firewall connection print where tcp-state~"est" and (src-address="^192.*" or dst-address~"^10.100.1.*:[0-9] ")
Flags: E - expected, S - seen-reply, A - assured, C - confirmed, D - dying, F - fasttrack, s - srcnat, d - dstnat 
 #          PROTOCOL SRC-ADDRESS           DST-ADDRESS           TCP-STATE   TIMEOUT     ORIG-RATE REPL-RATE ORIG-PACKETS REPL-PACKETS      ORIG-BYTES      REPL-BYTES
 0  SAC     tcp      192.168.1.12:48964    10.100.1.6:18888      established 23h51m23s        0bps      0bps           23           18           4 009           3 263
[admin@MikroTik] /ip ipsec> 

可以看到建联是成功的,使用本端客户端测试:

到此,CLI模式配置也大功告成。

五、建联过程中涵盖的报错及其含义

报错

原因

invalid HASH_V1 payload length, decryption failed? could not decrypt payloads message parsing failed

预共享密钥不一致。

parsed IKE_SA_INIT response 0 N(NO_PROP) received NO_PROPOSAL_CHOSEN notify error received AUTHENTICATION_FAILED error notify

IKE协议版本不一致。

received AUTHENTICATION_FAILED error notifyed

协商模式不一致。

IKE IDir xxxx does not match to xxxx

本端标识和远端标识不一致。

IKE sending retransmit 1 of request message ID 0, seq 1

对端网关不响应。

received UNSUPPORTED_CRITICAL_PAYLOAD error notify

创建用户网关时,设置错误的公网IP。

received INVALID_ID_INFORMATION error notify

主模式下感兴趣流不一致。

received HASH payload does not match integrity check failed

野蛮模式下感兴趣流不一致。

parsed INFORMATIONAL_V1 request xxxx HASH N(NO_PROP) received NO_PROPOSAL_CHOSEN error notify

加密算法或认证算法不一致。

ESP:AES_CBC_256/HMAC_SHA1_96/MODP_1024/NO_EXT_SEQ no matching proposal found, sending NO_PROPOSAL_CHOSEN

DH分组不一致。

建联过程中遇到各类报错,首先可以对比两端参数配置、算法等是否完全保持一致,常见问题及报错含义部分,可参照腾讯云和阿里官方文档说明。

最后,附上PDF版本:

RouterOS(ros)与云上VPC通过IPsec实现内网互通.pdf
RouterOS(ros)与云上VPC通过IPsec实现内网互通(亮色版).pdf

0 人点赞