H3C 点对点IPSec 添加NAT穿越的实验

实验的目的

        实验本身使用的是H3C的HCL 5.10.1来做的。公司原本是两台H3C的F100-C-G2防火墙,分别部署在公司网络出口和数据机房的网络出口,但是集团要求,要把防火墙的出接口接入到集团防火墙,给公司分配了一个内网地址,以前的公网地址收回,所有流量都要经过集团防火墙,由于集团防火墙使用的是华为的USG6000,在HCL上无法进行试验,我就用另外一台防火墙进行代替。

实验的原因

        本人是一个网络初学者,这个实验主要涉及到IPSec以及NAT穿越,现在网上胡说八道的教程太多了,像什么“NAT穿越实验” ,我在网上搜了一大把,不是在说理论,就是不假思索的复制粘贴,许多文章的实验结果根本没有体现NAT穿越,但是却说自己是NAT穿越实验,这就非常恶心了,你就不能抄的细心点儿吗?我在网上一直没有找到一个正确的答案,最后是在一个热心网友的提示下完成的,所以把这个实验发布在网上,希望能帮上更多的初学者,不要被网上个各种复制粘贴误导。

拓扑图

划入集团前的网络拓扑

划入集团后的网络拓扑

IP规划

公司的局域网IP:10.0.3.0/24,网关10.0.3.1

公司原有公网出口IP:110.1.1.2/24,网关110.1.1.1

纳入集团网络后的出口IP:172.16.0.249,网关172.16.0.254

机房的局域网IP:10.98.0.0/24,网关10.98.0.1

机房的公网出口IP:220.1.1.2/24,网关220.1.1.2

需要说明

1. 本实验实际是两个实验,第一个实验是创建公司和机房的IPSec连接,第二个实验是在原有的基础上,把公司路由器前面再加一个NAT设备,由于集团加的是防火墙,我也用防火墙代替。

2. 由于本实验主要是IPSec和NAT穿越的实验,我这里就不再添加防火墙规则了,直接放行所有的流量,不再配置防火墙。

实验步骤

第一步:先配置实验设备的名称

公司路由器命名为:COM

<H3C>sys
System View: return to User View with Ctrl+Z.
[H3C]sysn COM
[COM]

模拟运营商命名为:ISP

<H3C>sys
System View: return to User View with Ctrl+Z.
[H3C]sysn ISP
[ISP]

机房路由器命名为:IDC

<H3C>sys
System View: return to User View with Ctrl+Z.
[H3C]sysn IDC
[IDC]

第二步:配置ISP(运营商)的IP

说明一下,这里主要是模拟真实的布网环境,我看网上有些人没加这个,对于实验来说有没有都行,但是我觉得如果没有,可能会有人看不懂,所以还是加上了,你可以把它当作联通或者电信的运营商,分别给公司和机房做了公网网关,没这个你就不能上网。

[ISP]int gig 0/1
[ISP-GigabitEthernet0/1]ip addr 110.1.1.1 24
[ISP-GigabitEthernet0/1]qu
[ISP]int gig 0/2
[ISP-GigabitEthernet0/2]ip addr 220.1.1.1 24
[ISP-GigabitEthernet0/2]qu
[ISP]

第三步:配置公司路由器

# 配置路由器接公网端口0/1
[COM]int gig 0/1
# 配置IP地址为110.1.1.2 子网掩码24位(也可以写成255.255.255.0)
[COM-GigabitEthernet0/1]ip addr 110.1.1.2 24
# 配置完退出
[COM-GigabitEthernet0/1]qu
[COM]
# 由于公司的主机都是DHCP获取IP,所以一定要先开启路由器的DHCP服务,要不肯定忘
[COM]dhcp enable
# 创建DHCP池名称为pool
[COM]dhcp server ip-pool pool
# 配置DHCP的网段为10.0.3.0 24位掩码
[COM-dhcp-pool-pool]network 10.0.3.0 24
# 配置DHCP的网关为10.0.3.1
[COM-dhcp-pool-pool]gateway 10.0.3.1
# 配置DHCP的DNS为114.114.114.114(由于是实验环境,配不配都行,习惯了)
[COM-dhcp-pool-pool]dns 114.114.114.114
# 退出DHCP地址池配置(还可以在里面设置排除的IP以及IP的存活时间,和实验无关的我就不设置了)
[COM-dhcp-pool-pool]qu
# 创建VLAN100
[COM]vlan 100
# 退出
[COM-vlan100]qu
# 进入到VLAN100进行配置
[COM]int vlan 100
# 配置VLAN100的IP地址为10.0.3.1 掩码24位
[COM-Vlan-interface100]ip addr 10.0.3.1 24
# 把地址池应用到vlan100中
[COM-Vlan-interface100]dhcp server apply ip-pool pool
# 退出vlan配置
[COM-Vlan-interface100]qu
# 进入网卡接口的0/2
[COM]int gig 0/2
# 修改接口模式为桥接模式
[COM-GigabitEthernet0/2]port link-mode bridge
# 设置数据桥接至vlan100
[COM-GigabitEthernet0/2]port access vlan 100
# 退出接口设置
[COM-GigabitEthernet0/2]qu
# 配置一条静态路由,让设备能够上网
[COM]ip route-static 0.0.0.0 0 110.1.1.1
# 现在局域网中的设备还不能上网,所以需要做NAT,创建一个标号为2000的基本访问控制列表
[COM]acl basic 2000
# 列表中增加一条标号为10的规则(rule 10) 允许源地址是10.0.3.0 的24位地址的流量
[COM-acl-ipv4-basic-2000]rule 10 permit source 10.0.3.0 0.0.0.255
# 退出ACL配置
[COM-acl-ipv4-basic-2000]qu
# 进入接口0/01
[COM]int gig 0/1
# 把ACL 2000里面规定的流量作为NAT流量转出
[COM-GigabitEthernet0/1]nat outbound 2000
# 退出0/1接口配置
[COM]quit

经过上面的操作,公司一侧的上网基本上就没啥问题了,机房一侧也是同样设置,机房的设置我就复制粘贴了,重复写没啥意义。

第四步:配置机房路由器

# 配置路由器接公网端口0/1
[COM]int gig 0/1
# 配置IP地址为220.1.1.2 子网掩码24位(也可以写成255.255.255.0)
[COM-GigabitEthernet0/1]ip addr 220.1.1.2 24
# 配置完退出
[COM-GigabitEthernet0/1]qu
[COM]
# 由于公司的主机都是DHCP获取IP,所以一定要先开启路由器的DHCP服务,要不肯定忘
[COM]dhcp enable
# 创建DHCP池名称为pool
[COM]dhcp server ip-pool pool
# 配置DHCP的网段为10.98.0.0 24位掩码
[COM-dhcp-pool-pool]network 10.98.0.0 24
# 配置DHCP的网关为10.98.0.1
[COM-dhcp-pool-pool]gateway 10.98.0.1
# 配置DHCP的DNS为114.114.114.114(由于是实验环境,配不配都行,习惯了)
[COM-dhcp-pool-pool]dns 114.114.114.114
# 退出DHCP地址池配置(还可以在里面设置排除的IP以及IP的存活时间,和实验无关的我就不设置了)
[COM-dhcp-pool-pool]qu
# 创建VLAN100
[COM]vlan 100
# 退出
[COM-vlan100]qu
# 进入到VLAN100进行配置
[COM]int vlan 100
# 配置VLAN100的IP地址为10.98.0.1 掩码24位
[COM-Vlan-interface100]ip addr 10.98.0.1 24
# 把地址池应用到vlan100中
[COM-Vlan-interface100]dhcp server apply ip-pool pool
# 退出vlan配置
[COM-Vlan-interface100]qu
# 进入网卡接口的0/2
[COM]int gig 0/2
# 修改接口模式为桥接模式
[COM-GigabitEthernet0/2]port link-mode bridge
# 设置数据桥接至vlan100
[COM-GigabitEthernet0/2]port access vlan 100
# 退出接口设置
[COM-GigabitEthernet0/2]qu
# 配置一条静态路由,让设备能够上网
[COM]ip route-static 0.0.0.0 0 220.1.1.1
# 现在局域网中的设备还不能上网,所以需要做NAT,创建一个标号为2000的基本访问控制列表
[COM]acl basic 2000
# 列表中增加一条标号为10的规则(rule 10) 允许源地址是10.98.0.0 的24位地址的流量
[COM-acl-ipv4-basic-2000]rule 10 permit source 10.98.0.0 0.0.0.255
# 退出ACL配置
[COM-acl-ipv4-basic-2000]qu
# 进入接口0/01
[COM]int gig 0/1
# 把ACL 2000里面规定的流量作为NAT流量转出
[COM-GigabitEthernet0/1]nat outbound 2000
# 退出0/1接口配置
[COM]quit

配置完第四步以后,两边的公网已经可以互通了,如下图

公司向机房ping

 机房向公司ping

—————————————基础设置完成后下面就开始配置IPSec了 ———————————

第五步:配置公司一侧的IPSec连接 

# 创建一个标号位1的密钥交换的建议
[COM]ike proposal 1
# 加密协议使用3des-cbc(有许多加密协议,可以自选,我就是图个省事)
[COM-ike-proposal-1]encryption-algorithm 3des-cbc
# 验证协议使用md5(加密协议和验证协议是一对,缺哪个都不行)
[COM-ike-proposal-1]authentication-algorithm md5
# Tips:这里的dh是“迪菲、赫尔曼”的两个人名字的缩写,是两个研究加密算法的牛人,后面的group2就是加密算法的第二个规则组,有许多的加密算法,group2的加密是1024位加密
[COM-ike-proposal-1]dh group2
# 退出建议配置
[COM-ike-proposal-1]quit
# 配置钥匙链,配置的名称叫keychain
[COM]ike keychain keychain
# 设置一个用于对方解密的密码,所以,address后面应该是对端的IP地址,不要写错哦!
[COM-ike-keychain-keychain]pre-shared-key address 220.1.1.2 key simple 123456
# 退出keychain配置
[COM-ike-keychain-keychain]qu
# 创建ike的配置文件,后面在IPSec连接时就会用到,配置名称我设置的是ikep
[COM]ike profile ikep
# 把刚才设置好的密钥交换建议写进去
[COM-ike-profile-ikep]proposal 1
# 把刚才的钥匙链写进去
[COM-ike-profile-ikep]keychain keychain
# 本端的身份写本机的出口地址
[COM-ike-profile-ikep]local-identity address 110.1.1.2
# 需要配对的对端身份写对端的出口地址
[COM-ike-profile-ikep]match remote identity address 220.1.1.2
# 退出ike配置
[COM-ike-profile-ikep]qu
# 创建IPSec的封装
[COM]ipsec transform-set trans
# 以ESP来封装认证方式md5
[COM-ipsec-transform-set-trans]esp authentication-algorithm md5
# 以ESP来封装加密方式3des-cbc
[COM-ipsec-transform-set-trans]esp encryption-algorithm 3des-cbc
# 由于IPSec需要让两端的局域网能够互访,所以要保护两个局域网互放的流量,写一个列表,创建保护规则,许多人喜欢管这个数据流叫做“兴趣流量”,由于涉及到目标地址,所以需要使用高级ACL,基本ACL仅涉及源地址,凡是涉及到目标地址、端口号、协议的规则,都需要使用高级ACL。下面创建一个标号为3000的高级列表
[COM]acl adv 3000
# 允许通行10.0.3.0/24到10.98.0.0/24的流量
[COM-acl-ipv4-adv-3000]rule 0 permit ip source 10.0.3.0 0.0.0.255 destination 10
.98.0.0 0.0.0.255
[COM-acl-ipv4-adv-3000]qu
# 创建ipsec的连接策略,配置名称叫ipp,标号为1,让ipsec在连接时自动协商(即isakmp,大部分都是让他自动协商,除非真的有特殊需求)
[COM]ipsec policy ipp 1 isakmp
# 把ike的配置放进去
[COM-ipsec-policy-isakmp-ipp-1]ike-profile ikep
# 把封装转换配置放进去
[COM-ipsec-policy-isakmp-ipp-1]transform-set trans
# 设置安全规则为访问控制列表标号为3000的规则
[COM-ipsec-policy-isakmp-ipp-1]security acl 3000
# IPSec的本地地址为110.1.1.2
[COM-ipsec-policy-isakmp-ipp-1]local-address 110.1.1.2
# IPSec的对端地址为220.1.1.2
[COM-ipsec-policy-isakmp-ipp-1]remote-address 220.1.1.2
# 退出IPSec的建议配置
[COM-ipsec-policy-isakmp-ipp-1]qu
# 进入公网接口0/1
[COM]int gig 0/1
# 把刚刚创建的IPSec策略配置写进去,一定一定一定不要忘,这个特别容易忘了
[COM-GigabitEthernet0/1]ipsec apply policy ipp

至此,你以为配置完了?其实真没有,因为出口在NAT的时候会把局域网的所有流量都给转换成公网IP,结果就是IPSec无法通,因为所有出去的流量都会变成公网地址,那么也就没有本地局域网啥事了,所以,在NAT的时候不让本地局域网的流量去找对端的局域网。所以就需要写一条ACL让本地局域网的地址在NAT时不去找对端的局域网地址,由于需要指定目标地址,所以,肯定是写一条高级ACL,原有的ACL2000因为是基本ACL,无法设计目标地址,那么不用他就好了。继续。

# 创建高级ACL3001
[COM]acl adv 3001
# 拒绝掉10.0.3.0到10.98.0.0的所有流量,注意,这个和刚才的ACL3000不一样,这个是写在NAT里的,和保护流量是两回事
[COM-acl-ipv4-adv-3001]rule 0 deny ip source 10.0.3.0 0.0.0.255 destination 10.9
8.0.0 0.0.0.255
#允许通行10.0.3.0的流量
[COM-acl-ipv4-adv-3001]rule 10 permit ip source 10.0.3.0 0.0.0.255
[COM-acl-ipv4-adv-3001]qu
# 进入出口0/1
[COM]int gig 0/1
# 删除掉原来的outbound 2000规则
[COM-GigabitEthernet0/1]undo nat outbound 2000
# 添加新的nat出口规则
[COM-GigabitEthernet0/1]nat outbound 3001
[COM-GigabitEthernet0/1]quit

至此,公司侧的IPSec才是真的配置完成,作为对端的机房一侧,只需要修改部分IP地址即可

不过有一个地方需要特别特别特别注意!就是ACL的标号,不知是HCL的软件BUG还是IPSec本身就这么规定的,就是两端在IPSec中使用的流量保护ACL,标号不能相同,这样会造成隧道无法激活,不知是不是个例,总之,本身也不是什么麻烦事,在机房一侧换一个ACL标号就好了,我在公司侧的ACL是3000,那么就把机房一侧IPSec流量保护设计为ACL 3100就行了。

第六步:配置机房一侧的IPSec连接

# 创建一个标号位1的密钥交换的建议
[COM]ike proposal 1
# 加密协议使用3des-cbc(有许多加密协议,可以自选,我就是图个省事)
[COM-ike-proposal-1]encryption-algorithm 3des-cbc
# 验证协议使用md5(加密协议和验证协议是一对,缺哪个都不行)
[COM-ike-proposal-1]authentication-algorithm md5
# Tips:这里的dh是“迪菲、赫尔曼”的两个人名字的缩写,是两个研究加密算法的牛人,后面的group2就是加密算法的第二个规则组,有许多的加密算法,group2的加密是1024位加密
[COM-ike-proposal-1]dh group2
# 退出建议配置
[COM-ike-proposal-1]quit
# 配置钥匙链,配置的名称叫keychain
[COM]ike keychain keychain
# 最后的密码必须两端一致
[COM-ike-keychain-keychain]pre-shared-key address 110.1.1.2 key simple 123456
# 退出keychain配置
[COM-ike-keychain-keychain]qu
# 创建ike的配置文件,后面在IPSec连接时就会用到,配置名称我设置的是ikep
[COM]ike profile ikep
# 把刚才设置好的密钥交换建议写进去
[COM-ike-profile-ikep]proposal 1
# 把刚才的钥匙链写进去
[COM-ike-profile-ikep]keychain keychain
# 本端的身份写本机的出口地址
[COM-ike-profile-ikep]local-identity address 220.1.1.2
# 需要配对的对端身份写对端的出口地址
[COM-ike-profile-ikep]match remote identity address 110.1.1.2
# 退出ike配置
[COM-ike-profile-ikep]qu
# 创建IPSec的封装
[COM]ipsec transform-set trans
# 以ESP来封装认证方式md5
[COM-ipsec-transform-set-trans]esp authentication-algorithm md5
# 以ESP来封装加密方式3des-cbc
[COM-ipsec-transform-set-trans]esp encryption-algorithm 3des-cbc
# 由于IPSec需要让两端的局域网能够互访,所以要保护两个局域网互放的流量,写一个列表,创建保护规则,许多人喜欢管这个数据流叫做“兴趣流量”,由于涉及到目标地址,所以需要使用高级ACL,基本ACL仅涉及源地址,凡是涉及到目标地址、端口号、协议的规则,都需要使用高级ACL。下面创建一个标号为3100的高级列表
[COM]acl adv 3100
# 允许通行10.98.0.0/24到10.0.3.0/24的流量
[COM-acl-ipv4-adv-3100]rule 0 permit ip source 10.98.0.0 0.0.0.255 destination 10.0.3.0 0.0.0.255
[COM-acl-ipv4-adv-3100]qu
# 创建ipsec的连接策略,配置名称叫ipp,标号为1,让ipsec在连接时自动协商(即isakmp,大部分都是让他自动协商,除非真的有特殊需求)
[COM]ipsec policy ipp 1 isakmp
# 把ike的配置放进去
[COM-ipsec-policy-isakmp-ipp-1]ike-profile ikep
# 把封装转换配置放进去
[COM-ipsec-policy-isakmp-ipp-1]transform-set trans
# 设置安全规则为访问控制列表标号为3000的规则
[COM-ipsec-policy-isakmp-ipp-1]security acl 3100
# IPSec的本地地址为110.1.1.2
[COM-ipsec-policy-isakmp-ipp-1]local-address 220.1.1.2
# IPSec的对端地址为220.1.1.2
[COM-ipsec-policy-isakmp-ipp-1]remote-address 110.1.1.2
# 退出IPSec的建议配置
[COM-ipsec-policy-isakmp-ipp-1]qu
# 进入公网接口0/1
[COM]int gig 0/1
# 把刚刚创建的IPSec策略配置写进去,一定一定一定不要忘,这个特别容易忘了
[COM-GigabitEthernet0/1]ipsec apply policy ipp
[COM-GigabitEthernet0/1]qu
# 创建高级ACL3101
[COM]acl adv 3101
# 拒绝掉10.98.0.0到10.0.3.0的所有流量,注意,这个和刚才的ACL3100不一样,这个是写在NAT里的,和保护流量是两回事
[COM-acl-ipv4-adv-3101]rule 0 deny ip source 10.98.0.0 0.0.0.255 destination 10.0.3.0 0.0.0.255
#允许通行10.98.0.0的流量
[COM-acl-ipv4-adv-3101]rule 10 permit ip source 10.98.0.0 0.0.0.255
[COM-acl-ipv4-adv-3101]qu
# 进入出口0/1
[COM]int gig 0/1
# 删除掉原来的outbound 2000规则
[COM-GigabitEthernet0/1]undo nat outbound 2000
# 添加新的nat出口规则
[COM-GigabitEthernet0/1]nat outbound 3101
[COM-GigabitEthernet0/1]quit

至此,公司和机房全部配置完成,带源ping一下试试,如下图

从公司一侧激活IPSec

从机房一侧激活IPSec 

IPSec的SA信息 

注意看我上面画红线的地方,NAT穿越功能并没有启用,网上许多的文章都是到这里就结束了,然后大笔一挥写上“NAT穿越成功” 这就是睁着眼睛说瞎话,哪里有NAT穿越啊,穿个毛线,现在仅仅是IPSec的隧道连接成功而已。废话不多说,上面说了,集团要求在公司一侧的路由接入集团的防火墙,由防火墙来作为NAT设备上网,下面来操作,这也是困扰了我好久的问题,因为网上确实没有什么靠谱的实例说明,大部分都是Ctrl+A、Ctrl+C、Ctrl+V的不负责任的案例。

第七步:根据要求,修改公司一侧路由的IP地址

集团分配给公司的IP地址是172.16.0.249,所以需要把原来路由器上的出口IP从110.1.1.2改成172.16.0.249,同时,由于出口IP和拓扑变了,静态路由也要随之改变,出公网的静态路由要去找NAT设备,配置如下:

# 进入公司路由器的0/1接口
[COM]int gig 0/1
# 把IP设为集团分配的地址,这里直接输入就会覆盖掉之前的配置
[COM-GigabitEthernet0/1]ip addr 172.16.0.249 24
# 还需要额外的把0/1接口的NAT去掉,因为NAT已经由前面防火墙来做了,不去掉会出问题
[COM-GigabitEthernet0/1]undo nat outbound 3001
# 退出0/1配置
[COM-GigabitEthernet0/1]qu
# 既然不是接公网的设备,就可以把原来的静态路由去掉了
[COM]undo ip route-static 0.0.0.0 0 110.1.1.1
# 增加一条新的静态路由,出公网的设备去找NAT上面配置的网关172.16.0.254
[COM]ip route-static 0.0.0.0 0 172.16.0.254

公司这边的路由器修改完了。

第八步:在公司一侧增加NAT设备

我前面说了,由于是实验环境,防火墙仅仅是模拟NAT,我就不单独设置防火墙的规则了。

老规矩,增加新设备后先把设备的名字改一下,省的弄混了

<H3C>sys
System View: return to User View with Ctrl+Z.
[H3C]sysn NAT
[NAT]

开始配置NAT设备的信息

# 由于NAT设备放置在了公司路由器之前,公网出口就变成了从NAT出,所以进入1/0/1端口配置IP为110.1.1.2
[NAT]int gig 1/0/1
[NAT-GigabitEthernet1/0/1]ip addr 110.1.1.2 24
# 退出1/0/1
[NAT-GigabitEthernet1/0/1]qu
# 进入1/0/2端口配置IP为172.16.0.249
[NAT]int gig 1/0/2
[NAT-GigabitEthernet1/0/2]ip addr 172.16.0.254 24
# 退出1/0/2
[NAT-GigabitEthernet1/0/2]qu
# 配置两条静态路由
# 由于接公网设备别了,所以第一条路由是去公网的,第二条路由是让局域网找NAT设备的
[NAT]ip route-static 0.0.0.0 0 110.1.1.1
[NAT]ip route-static 10.0.3.0 24 172.16.0.249
# 由于用的是防火墙,所以还需要把网络接口分配到不同的区域
[NAT]security-zone name Untrust
# 把出公网接口1/0/1导入到非信任区域
[NAT-security-zone-Untrust]import int gig 1/0/1
[NAT-security-zone-Untrust]qu
# 把局域网接口1/0/2导入到信任区域
[NAT]security-zone name Trust
[NAT-security-zone-Trust]imp
[NAT-security-zone-Trust]import int gig 1/0/2
[NAT-security-zone-Trust]qu
# 创建一个防火墙策略
[NAT]security-policy ip
# 规则名称叫permit
[NAT-security-policy-ip]rule name permit
# 规则内容是全部放行
[NAT-security-policy-ip-0-permit]action pass
[NAT-security-policy-ip-0-permit]qu
[NAT-security-policy-ip]qu
# 局域网需要穿过NAT设备和机房进行互访,所以,需要在NAT设备上映射端口,进入出公网接口1/0/1
[NAT]int gig 1/0/1
# IPSec的端口是500,端口映射把110.1.1.2的UDP 500公网端口映射给局域网172.16.0.249的UDP 500端口
[NAT-GigabitEthernet1/0/1]nat server protocol udp global 110.1.1.2 500 inside 17
2.16.0.249 500
# 要实现NAT穿越,需要开放UDP 4500端口,把这个端口也映射给172.16.0.249
[NAT-GigabitEthernet1/0/1]nat server protocol udp global 110.1.1.2 4500 inside 1
72.16.0.249 4500
[NAT-GigabitEthernet1/0/1]qu
# 因为是出公网设备,还需要在公网出口做NAT,为了防止在出口的地方把公司到机房的流量给NAT,所以依然要写一条ACL,来控制公司到机房局域网的流量不进行NAT转换
[H3C]acl adv 3200
# 拒绝掉公公司到机房的局域网NAT流量
[H3C-acl-ipv4-adv-3200]rule deny ip source 10.0.3.0 0.0.0.255 destination 10.98.
0.0 0.0.0.255
# 放行其他流量
[H3C-acl-ipv4-adv-3200]rule permit ip
[H3C-acl-ipv4-adv-3200]qu
# 进入公网接口1/0/1
[H3C]int gig 1/0/1
# 把设置好的ACL加入到NAT流量里面
[H3C-GigabitEthernet1/0/1]nat outbound 3200
[H3C-GigabitEthernet1/0/1]qu
#现在两端都可以从公网层面相互ping通了

好了,NAT设备也配置完成,试验一下

 不通?查看一下ike的sa

Flag是unknow,也就是说IPSec的第一阶段都没有成功,对于一个初学者的我来说,这个问题卡了我很久,我相信许多初学者都会卡在这里一段时间,自信分析一下,就能明白了,既然第一阶段有问题,那么肯定是在ike相关的地方出了问题,最有可能的就是ike profile,那么检查一下这个地方。

本端身份刚才并没有该,还是110.1.1.2,那么问题来了,在对端的和本端的IPSec进行连接时,第一个接入的IP是110.1.1.2没错,但是110.1.1.2的IP是在NAT设备上,并不在IPSec配置的设备上,所以本段身份必须是IPSec所在的出口IP,也就是172.16.0.249,否则,机房那边是找不到对应的IPSec配置的,相应的ipsec police配置里的local-address也需要改,一共修改这两个地方,然后试一下。

# 改IP的时候直接写新的就行,会覆盖掉前面错误的信息
[COM]ike profile ikep
[COM-ike-profile-ikep]local-identity 172.16.0.249
[COM-ike-profile-ikep]qu
[COM]ipsec policy ipp 1 isakmp
[COM-ipsec-policy-isakmp-ipp-1]local-address 172.16.0.249
[COM-ipsec-policy-isakmp-ipp-1]qu

修改完了,再试一下吧 

哈哈,依然不通,再看一下ike sa信息

奇怪了,ike是没问题的,为啥不通呢?再从机房一侧ping一下试试

从机房往公司ping就可以通了,奇怪吧!哈哈!其实一点儿都不奇怪,这个问题我看网上有些人也出现了,他们最后的结论就是只能从公网一侧激活IPSec,而不能从NAT一侧激活,也有奇葩的答案就是必须用野蛮模式连接。这些方法我都测试过了,要么是不靠谱,要么就是胡来,实际上仔细研究一下就会发现,机房一侧的IPSec配置,在ike的keychain和profile两个部分,对应的对端地址都是公网地址,而公网地址的第一个接入设备是NAT,并不是发起IPSec连接的设备,发起的设备地址是172.16.0.249,而不是110.1.1.2,也就是说,机房一侧和公司NAT设备达成了协商一致,但是因为实际需要达成协商一致的是后面的公司路由器,在机房一侧看来,他的ike设置里面并没有和公司路由器的协商,所以解决这个问题的方法就是,在机房路由器的ike中加上路由器的地址进行协商,也就是ike keychain和profile中加上172.16.0.249这个地址,就是说让机房的IPSec即和公司路由器协商,也和公司NAT协商,这样就可以完美解决只能单边激活的问题了,具体如下

# 进入机房路由器的keychain设置
[IDC]ike keychain keychain
# 增加一条协商地址密钥,后面的密钥必须和对端一样
[IDC-ike-keychain-keychain]pre-shared-key address 172.16.0.249 key simple 123456
# 进入ike设置
[IDC]ike profile ikep
# 加上一条对端协商地址
[IDC-ike-profile-ikep]match remote identity address 172.16.0.249
[IDC-ike-profile-ikep]qu

 再试一下,完美了

再看一下IPSec的SA信息

 

NAT穿越成功

总结一下

本次实验里面有一部分我只是做了皮毛,大部分配置都是可以自己定制的,我写这篇文章的主要目的就是为了让新手能够有一个相对靠谱的答案,其实本次实验可能在高手看来不足为奇,但是如果是对于初学者来说,还是有难度的,特别是在NAT设备加入以后,整个的思路可能就乱了,我也乱了好久,因为我以前对什么IPSec真的一窍不通,通过这次学习,也算是了解了一部分知识。我相信只要又不断的求知欲,再难的问题也可以解决,不要怕麻烦,解决问题不麻烦那不就都成神了。另外,还要再次吐槽一下网络答案,真的很误导人,百度一搜一大把一样的答案,后来我都放弃百度了,有搜索的功夫不如自己去实践研究。最后感谢一下那位热心的网友,知了社区的名字叫“奇怪的流量”,多亏了他的提点我才研究明白到底问题如何解决,非常感谢!

此文是本人原创,不收钱,不用会员必看,就是为了那些和我一样的初学者,参考没问题,但是请不要无脑的复制粘贴。

  • 27
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坚强的松紧带

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值