好文分享
本文开始之前,分享一篇近期阅读过的好文,文章详情可点击AI杀疯!介绍一下有趣的AI算法。
此文介绍了几种有趣的AI算法及其应用,涵盖了视频生成、代码生成和游戏AI等领域,领略到了最新的AI技术的魅力与未来的无限潜力。
在使用云上IPSEC VPN打通到云下IDC的场景,因为本地网络规划问题或其它原因,IDC和云上现有的网段存在冲突,不能互通,因此中间需要借助私有NAT来完成地址转换。
比如下面这个架构图:
明面上看,192.168.1.0/24和10.100.1.0/24没有冲突,但由于云下IDC网络,比如已经和10.100.1.0/24有其它通信隧道的路由了,不能再和云上进行互通,需要云上转换一下IP段。因此,这里说的网段冲突,是站在云下的角度,不能再和云上的当前网段进行打通,需要进行中间地址转换才能打通。
本文将使用云联网类型VPN、CCN多路由表、私网NAT来解决网段冲突的问题,优化后架构如下:
在VPN网关控制台,创建CCN类型的VPN网关:
需要注意:
DPD检测和健康检查探测,没有需求场景的话,这里保持关闭,其他参数设置可参照这张图:
最后点击创建。
云下协商参数需和云上协商参数保持一致。篇幅原因这里只演示命令行方式如何创建IPsec VPN和云上建立协商,更为详细的介绍可参考笔者的这篇文章,里面包含了GUI和CLI两种方式建立云上和ros的通信。
[RokasYang@MikroTik] > /ip ipsec profile
[RokasYang@MikroTik] /ip/ipsec/profile> add dh-group=modp768 hash-algorithm=sha1 enc-algorithm=aes-128 name=To_tencent
[RokasYang@MikroTik] /ip/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 |
云上配置的是DH1,因此云下也配置的是modp768,生产环境建议不要使用DH group 1/2/5,加密的比特位较低,可能存在安全风险。
[RokasYang@MikroTik] /ip/ipsec/peer> /ip ipsec profile
[RokasYang@MikroTik] /ip/ipsec/profile> /ip ipsec peer
[RokasYang@MikroTik] /ip/ipsec/peer> add address=119.91.229.51 name=to_tencent profile=To_tencent exchange-mode=ike2
[RokasYang@MikroTik] /ip/ipsec/peer> print where name~"_tencent"
预共享密钥设置和云上保持一致,同时peer参数引用是2.3.2这一步骤的to_tencent配置文件。
[RokasYang@MikroTik] /ip/ipsec/peer> ..
[RokasYang@MikroTik] /ip/ipsec> identity add peer=to_tencent auth-method=pre-shared-key secret=123456
[RokasYang@MikroTik] /ip/ipsec>
[RokasYang@MikroTik] /ip/ipsec> proposal add name=to_tencent auth-algorithms=sha1 enc-algorithms=aes-128-cbc pfs-group=none
[RokasYang@MikroTik] /ip/ipsec> proposal print where name="to_tencent"
Flags: X - disabled; * - default
0 name="to_tencent" auth-algorithms=sha1 enc-algorithms=aes-128-cbc lifetime=30m pfs-group=none
[RokasYang@MikroTik] /ip/ipsec>
[RokasYang@MikroTik] /ip/ipsec> policy add peer=to_tencent tunnel=yes src-address=192.168.1.0/24 dst-address=172.16.1.0/24 protocol=all proposal=to_tencent
[RokasYang@MikroTik] /ip/ipsec>
注意,增加路由后,这里把增加的这条路由,从第23条移动到了第一条:
[RokasYang@MikroTik] /ip/firewall/nat> add action=accept chain=srcnat src-address=192.168.1.0/24 dst-address=172.16.1.0/24
[RokasYang@MikroTik] /ip/firewall/nat> print where dst-address="172.16.1.0/24"
Flags: X - disabled, I - invalid; D - dynamic
23 chain=srcnat action=accept src-address=192.168.1.0/24 dst-address=172.16.1.0/24
[RokasYang@MikroTik] /ip/firewall/nat> move 23 0
[RokasYang@MikroTik] /ip/firewall/nat>
此时在UI界面看,也是生效的:
winbox登录到RouterOS后,在IP-->IPsec选项里打开IPsec的配置界面:
首先配置IPsec profile:
最后点击右下角的Apply应用,配置参数和CLI的参数相对应,不再赘述,看上图标注即可。
配置对端网关、协商模式、引用的ipsec profile等:
配置用于身份验证的字段,包括本端标识、对端表示、预共享密钥等:
配置ipsec提议,指定认证算法、加密算法等:
对应云上的SPD网段,如下配置策略,指定本端和对端通信的网段即协议,并采用隧道模式(Tunnel):
增加一条ACCEPT允许规则,并把优先级调整到第一位:
首先进入到IP --> Firewall 界面:
如下增加一条accpet允许规则:
之后鼠标拖动让此规则置顶。
云上VPN通道标记为“已联通”:
云下RouterOS的IPsec策略标记为Established,此时说明VPN隧道已经建立起来:
[RokasYang@MikroTik] /ip/firewall/nat> /ip ipsec policy print where ph2-state="established"
Flags: A - ACTIVE
Columns: PEER, TUNNEL, SRC-ADDRESS, DST-ADDRESS, PROTOCOL, ACTION, LEVEL, PH2-COUNT
# PEER TUNNEL SRC-ADDRESS DST-ADDRESS PROTOCOL ACTION LEVEL PH2-COUNT
1 A to_tencent yes 192.168.1.0/24 172.16.1.0/24 all encrypt require 1
[RokasYang@MikroTik] /ip/firewall/nat>
到此,仅仅是VPN隧道协商起来而已,云上还没有配置任何路由,因此内网还是通不了的,接着往下看。
在CCN控制台新建CCN后,进入到CCN的路由表页面:
创建两个路由表,名称分别为rtb1、rtb2:
已知业务VPC(即云上需要和云下打通的VPC)为 vpc-6sbvxdzj(10.100.1.0/24),将业务VPC关联到路由表1:
回到CCN路由表1中,点击 路由表接收策略-->添加策略:
添加一条允许业务VPC的策略,添加完成后如下:
登录私网NAT网关控制台,新建私网NAT网关,注意类型一定要选择云联网,关联实例选择我们上面创建的云联网实例id:
创建后,点开基本信息页面,可以看到本端VPC、对端VPC,记住这两个VPC,关联CCN路由表时需要用到。
回到云联网控制台的路由表界面,将私网NAT的本端VPC绑定到CCN实例的路由表1中,绑定完成后如下:
在CCN路由表1中设置路由接收策略,添加一条允许私网NAT的本端VPC的规则,添加完成后如下:
紧接着,将私网NAT的对端VPC绑定到CCN实例的路由表2中,并配置路由接收策略允许接收私网NAT对端VPC的路由。
找到我们前面创建CCN型私网NAT网关,点进去添加SNAT规则。
新增一条SNAT规则,这里我们使用三层NAT映射,当然也可以写四层(IP+端口),根据需求选择:
如上图,我们将云上10.100.1.6的实例,映射给了172.16.1.6,记住这个IP,连通性验证阶段需要用到。
需要注意,三层只能一对一映射,不能映射为IP池,四层则可以映射为IP池。
将上面创建的CCN型VPN网关,关联至CCN实例的路由表2中:
并且路由接收策略增加一条允许VPN网关的接收策略:
到VPN网关控制台的发布网段页面,将到IDC网段的路由发布,进行勾选:
注意:发布路由至CCN,仅当VPN通道为SPD策略型时,才需要在VPN网关这里手动将路由发布至CCN。
回到私网NAT控制台,点击本端VPC,去本端VPC的默认路由表里新增路由:
新增一条到IDC网段的路由(比如下图中的最后一条路由就是新增的路由条目,IDC网段是:192.168.1.0/24),下一跳给CCN型的私网NAT网关,并且一定要点击将这条路由发布给云联网,只操作这一条路由就行,上面的路由不要动:
同理,找到对端VPC的默认路由表,新增一条目的端为NAT映射后的IP,下一跳给私网NAT网关的路由,并且将这条路由发布到云联网:
在云上测试到云下,连通性正常:
云下测试云上,注意此时要访问的是云上映射后的IP,比如我们映射的IP是172.16.1.6,云下任意找一台机器访问云上映射后的IP,连通性测试正常:
在云上使用10.100.1.6机器ping 云下192.168.1.8机器的情况下,在云上云下同时抓ICMP的报文。
云上机器抓包可以是:
tcpdump -i any -nn -s 0 icmp and host 192.168.1.8 -v -w cloud.pcap
云下机器抓包:
tcpdump -i any -nn -s 0 icmp -v -w idc.pcap
可以看到,云上机器10.100.1.6和云下192.168.1.8进行通信时,云下收到的ping请求,因为在云上做了SNAT地址转换,来源变成了172.16.1.6,其余诸如ip.id、icmp.seq等字段不会修改:
在私网NAT抓包可以看到,10.100.1.6访问192.168.1.8时,私网NAT先把源地址snat到172.16.1.6映射后的IP,再发给对端;收到对端过来的响应给172.16.1.6 icmp reply时,再将172.16.1.6修改为10.100.1.6发送给源端。
到此,本文详细介绍了如何通过云联网类型VPN、CCN多路由表和私网NAT,解决云上和云下IDC之间的网段冲突问题,实现两端互通。首先,创建VPN网关和通道,并在云下配置IPsec VPN,确保两端协商一致;然后,通过CCN多路由表和私网NAT进行地址转换和路由管理,绑定业务VPC和NAT实例,并配置IP映射规则,并将路由发布至CCN;最后,进行连通性验证,确保云上和云下能够正常通信,同时在云上、云下、私网NAT抓包,观测中间过程发生的IP转换。
附带PDF版本:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。