一、前言
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版本: