内网地址重叠环境下
部署IPSec VPN
Bati-gol
概述
在部署IPSec VPN的过程中,很多时间都是在两端内网地址网段不同的情况下进行部署。不同网段的内网进行互联IPSec VPN也是最常见,用的最多的。
在一些特殊环境下,例如两家公司合并,内网地址是重叠的,同时管理员不想对内部地址进行重新编址时,这个时候就需要在内网地址重叠的环境下部署IPSec VPN。
案例分析
见如下Topology

上述拓扑中,模拟了这样一个环境,两端内网的地址段都为192.168.1.0/24
Site_A
Lan:192.168.1.1/24
Wan:10.1.1.2/24
Site_B
Lan:192.168.1.1/24
Wan:172.16.1.2/24
Internet Router模拟公网环境,配置IP地址即可,无需添加任何路由,保持有两条直连路由即可。
部署思路:VPN隧道内NAT
在该环境下需要互联相同地址段的内网,就需要在IPSec VPN隧道中采用NAT对地址做转换,对于Site_A来说,需要将Site_B的内网网段转换为10.10.10.0/24,对于Site_B来说,需要将Site_A的内网网段转换为10.5.5.0/24
通过在VPN隧道中启用NAT,当Site_A访问Site_B的内网资源时,目的IP网段为10.10.10.0/24;当Site_B访问Site_A的内网资源时,目的IP网段为10.1.1.0/24。
举例:
Site_A的Client: 192.168.1.100 被转换后IP:10.1.1.100
Site_B的Server:192.168.1.200 被转换后IP:10.10.10.200
Site_A Clinet 访问Site_B Srever
源地址:192.168.1.100,目的地址10.10.10.200(Site_B Server 192.168.1.200转换后的IP)
Site_B Server 访问 Site_A Client
源地址:192.168.1.200.,目的地址10.1.1.100(Site_A Clinet 192.168.1.100转换后的IP)
配置概要
Site_A:
ip nat inside source static network 192.168.1.0 10.5.5.0 /24
将Site_A的内网网段192.168.1.0/24转换成10.5.5.0/24网段
ip nat outside source static network 192.168.1.0 10.10.10.0 /24
将从外部进来,源地址为192.168.1.0/24的网段转化为10.10.10.0/24,用于在数据回包时,将Site_B的内网IP192.168.1.0 转换为10.10.10.0/24网段
通过以上两条NAT转换,实现相同网段的互访。
access-list 101 permit ip 10.5.5.0 0.0.0.255 192.168.1.0 0.0.0.255
定义源地址为10.5.5.0/24网段(Site_A转换后的网段),目的地址为192.168.1.0/24(对端已被转换成10.10.10.0/24)的数据进行加密
访问方式
Site_A ------------------------> Site_B
源地址 目的地址
192.168.1.0/24 10.10.10.0/24
Site_B------------------------->Site_A
源地址 目的地址
192.168.1.0/24 10.5.5.0/24
Site_A配置
Site_A#
crypto isakmp policy 10
hash md5
authentication pre-share
crypto isakmp key cisco address 172.16.1.2 255.255.255.0
!
!
crypto ipsec transform-set myset esp-des esp-md5-hmac
!
crypto map mymap 10 ipsec-isakmp
set peer 172.16.1.2
set transform-set myset
match address 101
!
!
!
!
interface Serial0/0
ip address 10.1.1.2 255.255.255.0
ip nat outside
ip virtual-reassembly
serial restart-delay 0
crypto map mymap
interface FastEthernet1/0
ip address 192.168.1.1 255.255.255.0
ip nat inside
ip virtual-reassembly
duplex auto
speed auto
!
ip http server
no ip http secure-server
!
ip route 0.0.0.0 0.0.0.0 10.1.1.1(该路由条目是为了让A能找到B的Wan口,以及A访问对端内网的数据丢进VPN隧道)
如果没有必要访问Internet,可以删除以上路由,替换成
ip route 172.16.1.2 255.255.255.255 s0/0 A必须找到B的Wan口,才能建立VPN
ip route 10.10.10.0 255.255.255.0 s0/0 A访问B内网转换过的网段,丢进VPN隧道
!
ip nat inside source static network 192.168.1.0 10.5.5.0 /24
将Site_A的内网网段192.168.1.0/24转换成10.5.5.0/24网段
ip nat outside source static network 192.168.1.0 10.10.10.0 /24
将从外部进来,源地址为192.168.1.0/24的网段转化为10.10.10.0/24,用于在数据回报时,将Site_B的内网IP192.168.1.0 转换为10.10.10.0/24网段
access-list 101 permit ip 10.5.5.0 0.0.0.255 192.168.1.0 0.0.0.255
定义源地址为10.5.5.0/24网段(Site_A转换后的网段),目的地址为192.168.1.0/24(对端已被转换成10.10.10.0/24)的数据进行加密
Site_B配置
Site_B#
crypto isakmp policy 10
hash md5
authentication pre-share
crypto isakmp key cisco address 10.1.1.2 255.255.255.0
!
!
crypto ipsec transform-set myset esp-des esp-md5-hmac
!
crypto map mymap 10 ipsec-isakmp
set peer 10.1.1.2
set transform-set myset
match address 101
!
!
!
!
interface Serial0/0
ip address 172.16.1.2 255.255.255.0
ip nat outside
ip virtual-reassembly
serial restart-delay 0
crypto map mymap
!
interface FastEthernet1/0
ip address 192.168.1.1 255.255.255.0
ip nat inside
ip virtual-reassembly
duplex auto
speed auto
!
ip http server
no ip http secure-server
!
ip route 0.0.0.0 0.0.0.0 172.16.1.1 (该路由条目是为了让B能找到A的Wan口建立VPN所必须的,以及A访问对端内网的数据丢进VPN隧道)
如果没有必要访问Internet,可以删除以上路由,替换成
ip route 10.10.10.2 255.255.255.255 s0/0 B必须找到A的Wan口,才能建立VPN
ip route 10.5.5.0 255.255.255.0 s0/0 B访问A转换过的内网后,将数据丢进VPN隧道
!
!
access-list 101 permit ip 192.168.1.0 0.0.0.255 10.5.5.0 0.0.0.255
定义源地址为192.168.1.0网段(Site_B真实网段),目的地址为10.5.5.0/24(Site_A转换后的网段)的数据进行加密
!
control-plane
测试
Site_A#ping 10.10.10.1 source 192.168.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.10.10.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 120/172/244 ms
10.10.10.1为Site_B内网IP192.168.1.1转换后的IP 10.10.10.1,source为Site_A的真实内网IP
Site_B#ping 10.5.5.1 source 192.168.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.5.5.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 140/156/168 ms
10.5.5.1为Site_A内网IP192.168.1.1转换后的IP 10.10.10.1,source为Site_B的真实内网IP
Site_A#show crypto isakmp sa
dst src state conn-id slot status
172.16.1.2 10.1.1.2 QM_IDLE 1 0 ACTIVE
Crypto map tag: mymap, local addr 10.1.1.2
local ident (addr/mask/prot/port): (10.5.5.0/255.255.255.0/0/0) 本地为10.5.5.0/24
remote ident (addr/mask/prot/port): (192.168.1.0/255.255.255.0/0/0) 远端为192.168.1.0/24
current_peer 172.16.1.2 port 500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 9, #pkts encrypt: 9, #pkts digest: 9
#pkts decaps: 9, #pkts decrypt: 9, #pkts verify: 9
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#pkts no sa (send) 1, #pkts invalid sa (rcv) 0
#pkts encaps failed (send) 0, #pkts decaps failed (rcv) 0
#pkts invalid prot (recv) 0, #pkts verify failed: 0
#pkts invalid identity (recv) 0, #pkts invalid len (rcv) 0
#pkts replay rollover (send): 0, #pkts replay rollover (rcv) 0
##pkts replay failed (rcv): 0
#pkts internal err (send): 0, #pkts internal err (recv) 0
path mtu 1500, ip mtu 1500, ip mtu idb Serial0/0
current outbound spi: 0x153C47D6(356272086)
spi: 0x7890B629(2022749737)
transform: esp-des esp-md5-hmac ,
in use settings ={Tunnel, }
conn id: 2001, flow_id: SW:1, crypto map: mymap
sa timing: remaining key lifetime (k/sec): (4530262/3355)
IV size: 8 bytes
replay detection support: Y
Status: ACTIVE
spi: 0x153C47D6(356272086)
transform: esp-des esp-md5-hmac ,
in use settings ={Tunnel, }
conn id: 2002, flow_id: SW:2, crypto map: mymap
sa timing: remaining key lifetime (k/sec): (4530262/3355)
IV size: 8 bytes
replay detection support: Y
Status: ACTIVE
Crypto map tag: mymap, local addr 172.16.1.2
local ident (addr/mask/prot/port): (192.168.1.0/255.255.255.0/0/0) 本端为192.168.1.0/24
remote ident (addr/mask/prot/port): (10.5.5.0/255.255.255.0/0/0) 远端为10.5.5.0/24
current_peer 10.1.1.2 port 500
PERMIT, flags={origin_is_acl,}
#pkts encaps: 9, #pkts encrypt: 9, #pkts digest: 9
#pkts decaps: 9, #pkts decrypt: 9, #pkts verify: 9
#pkts compressed: 0, #pkts decompressed: 0
#pkts not compressed: 0, #pkts compr. failed: 0
#pkts not decompressed: 0, #pkts decompress failed: 0
#pkts no sa (send) 0, #pkts invalid sa (rcv) 0
#pkts encaps failed (send) 0, #pkts decaps failed (rcv) 0
#pkts invalid prot (recv) 0, #pkts verify failed: 0
#pkts invalid identity (recv) 0, #pkts invalid len (rcv) 0
#pkts replay rollover (send): 0, #pkts replay rollover (rcv) 0
##pkts replay failed (rcv): 0
#pkts internal err (send): 0, #pkts internal err (recv) 0
path mtu 1500, ip mtu 1500, ip mtu idb Serial0/0
current outbound spi: 0x7890B629(2022749737)
spi: 0x153C47D6(356272086)
transform: esp-des esp-md5-hmac ,
in use settings ={Tunnel, }
conn id: 2001, flow_id: SW:1, crypto map: mymap
sa timing: remaining key lifetime (k/sec): (4484569/3187)
IV size: 8 bytes
replay detection support: Y
Status: ACTIVE
spi: 0x7890B629(2022749737)
transform: esp-des esp-md5-hmac ,
in use settings ={Tunnel, }
conn id: 2002, flow_id: SW:2, crypto map: mymap
sa timing: remaining key lifetime (k/sec): (4484569/3187)
IV size: 8 bytes
replay detection support: Y
Status: ACTIVE
Site_A#show ip nat translations
Pro Inside global Inside local Outside local Outside global
--- --- --- 10.10.10.1 192.168.1.1
--- --- --- 10.10.10.0 192.168.1.0
icmp 10.5.5.1:14 192.168.1.1:14 10.10.10.1:14 192.168.1.1:14
--- 10.5.5.1 192.168.1.1 --- ---
--- 10.5.5.0 192.168.1.0 --- ---
数据VPN隧道内NAT分析
Sending 5, 100-byte ICMP Echos to 10.10.10.1, timeout is 2 seconds:
Packet sent with a source address of 192.168.1.1
!!!!!
第一条NAT ip nat inside source static network 192.168.1.0 10.5.5.0 /24起作用
将源地址192.168.1.1NAT成10.5.5.1,目的地仍为10.10.10.1
*Mar 1 01:08:14.151: NAT: s=10.5.5.1, d=10.10.10.1->192.168.1.1 [163]
第二条NAT ip nat outside source static network 192.168.1.0 10.10.10.0 /24起作用
将目的地址为10.10.10.1NAT成192.168.1.1,
最终源地址为10.5.5.1,目的地址为192.168.1.1。也就符合感兴趣流量ACL
access-list 101 permit ip 10.5.5.0 0.0.0.255 192.168.1.0 0.0.0.255
总结
通过在隧道内进行NAT地址转换实现地址重叠环境下的IPSec VPN互联,NAT转换只用在一台路由器上做设置。
ip nat inside source static network 192.168.1.0 10.5.5.0 /24
ip nat outside source static network 192.168.1.0 10.10.10.0 /24
将A的内网换成10.5.5.0/24,B的内网换成10.10.10.0/24,当A访问B时,源地址为192.168.1.0/24,目的地址为10.10.10.0/24;当B访问A时,源地址为192.168.1.0/24,目的地址为10.5.5.0/24。
另外,A,B上的默认路由不是为了访问互联网用的,只是为了让A能找到B,A访问B转换后的内网数据丢进隧道,B访问A转换后的内网丢进隧道。如果没有必要访问Internet,可以将A,B上的默认路由替换成两条静态路由:
A:ip route 0.0.0.0 0.0.0.0 10.1.1.1
替换成
ip route 172.16.1.2 255.255.255.255 s0/0 A必须找到B的Wan口,才能建立VPN
ip route 10.10.10.0 255.255.255.0 s0/0 A访问B内网转换过的网段,丢进VPN隧道
B:ip route 0.0.0.0 0.0.0.0 172.16.1.1
替换成
ip route 10.10.10.2 255.255.255.255 s0/0 B必须找到A的Wan口,才能建立VPN
ip route 10.5.5.0 255.255.255.0 s0/0 B访问A转换过的内网后,将数据丢进VPN隧道
除了路由器可以在隧道内做NAT,一些防火墙如juniper,fortigate等也支持在隧道内做NAT转换实现内网地址重叠环境下IPSec VPN的互联。
参考文档
Cisco Document ID: 107992
《IPsec Between Two IOS Routers with Overlapping Private Networks Configuration Example》







发表评论 评论 (29 个评论)
有个路由的问题请楼主赐教:当VPN通道建立之后,SiteA要访问SiteB使用哪条路由?还走那条缺省路由吗?由于互联网路由器不是VPN内网设备,它还能为SiteA路由吗?以前我在SiteA和SiteB之间建立GRE通道来解决这个问题.楼主这个的方法大大简化了这个步骤,不知实现原理是什么?
有个路由的问题请楼主赐教:当VPN通道建立之后,SiteA要访问SiteB使用哪条路由?还走那条缺省路由吗?由于互联网路由器不是VPN内网设备,它还能为SiteA路
一旦VPN连接后,Site_A主机访问Site_B的数据转发路径,不会出现互联网路由器的任何IP,数据从A的Wan口出来后,直接穿越VPN隧道被转发至B的Wan口,到B的内网。
A--->B
第一跳为A的Lan口IP,第二跳的Wan口IP,最后到B的内网Server
这个时候VPN连接好后,ACL告诉A到对端的数据直接放进VPN隧道,可以理解成被强制丢进VPN隧道,而不是走默认路由到公网路由器,放进隧道后到B,再到B的内网。VPN建立好优先走VPN隧道
类似防火墙的VPN,有两种,一种是基于路由,一种是基于策略
基于路由的VPN是需要配置到对端内网指定自己的Tunnel接口出去,这种是需要A查路由表的
基于策略的VPN,只要指定源和目的,将数据强制丢进VPN隧道中即可,无需查找路由,因为只有一条默认路由,只要将数据通过策略方式丢进VPN隧道即可
上面的例子就类似于基于策略的VPN,不是通过路由丢进隧道,而是通过ACL将数据优先丢进了VPN隧道,因为这个时候VPN隧道已经建立
A------>B 第一跳:A的Lan IP 第二跳 B的WanIP 最后到B的内网
如果这个时候同时需要访问Internet的话,需要通过ACL将数据进行分割
ACL permie A内网到B内网,被调用丢进VPN
ACL2 deny A内网到B内网
ACL2 permit any any
ACL2调用访问Internet
这样访问对端的被丢进隧道,访问互联网走默认路由到互联网
这个时候VPN连接好后,ACL告诉A到对端的数据直接放进VPN隧道,可以理解成被强制丢进VPN隧道,而不是走默认路由到公
将Site_A的内网网段192.168.1.0/24转换成10.5.5.0/24网段
ip nat outside source static network 192.168.1.0 10.10.10.0 /24
将从外部进来,源地址为192.168.1.0/24的网段转化为10.10.10.0/24,用于在数据回报时,将Site_B的内网IP192.168.1.0 转换为10.10.10.0/24网段
access-list 101 permit ip 10.5.5.0 0.0.0.255 192.168.1.0 0.0.0.255
定义源地址为10.5.5.0/24网段(Site_A转换后的网段),目的地址为192.168.1.0/24(对端已被转换成10.10.10.0/24)的数据进行加密
主要是隧道中的NAT起了作用,A如果访问192.168.1.0/24的确会在自己内部转,但是由于B内网已经被NAT成10.10.10.0/24,所以访问目的地改成了10.10.10.0/24网段,ping 10.10.10.1 source 192.168.1.1,这样数据就会走进隧道
如果B访问A,目的地变成了10.5.5.0/24,源地址还是B的192.1681.0/24
将Site_A的内网网段192.168.1.0/24转换成10.5.5.0/24网段
ip nat outside source static
你能把这个实验从路由、VPN及NAT三个技术层面进行一个分门别类的、详细的解释吗?
A:ip route 172.1.1.2 255.255.255.255 S0/0
ip route 10.10.10.0 255.255.255.0 S0/0
B:ip route 10.1.1.2 255.255.255.255 s0/0
ip route 10.5.5.0 255.255.255.0 s0/0
第一条路由是为了让A的Wan口找到B的Wan口建立VPN
第二条是为了把到对端内网的数据丢进VPN
这样理解比较清晰了,呵呵!
A:ip route 172.1.1.2 255.255.255.255 S0/0
ip route 10.10.10.0 255.255.255.0 S0/0
B:ip route 10.1.1.2 255.255.2
将A的默认路由换成
A:ip route 172.1.1.2 255.255.255.255 S0/0
ip route 10.10.10.0 255.255.255.0 S0/0
这时是可以正常通信的,如果删除其中任何一条,清除VPN连接后重连,都是无法连接的
我的理解是这样的,首先路由器通过ACL匹配到感兴趣数据流,然后查找路由,丢进VPN隧道
首先ip route 172.1.1.2 255.255.255.255 S0/0让A找到B,然后
ip route 10.10.10.0 255.255.255.0 S0/0让被ACL匹配的数据丢进VPN
换成两条静态路由后,可以正常通信,如果删除任何一条,debug ip packet detail会显示数据包不可路由,所以换成两条路由是可以的。当然这个时候只能访问VPN
Site_A#debug ip nat detailed
Site_A#ping 10.10.10.1 source 192.168.1.1
查看NAT debug info
*Mar 1 01:00:49.679: NAT: i: icmp (192.168.1.1, 36) -> (10.10.10.1, 36) [158]
*Mar 1 01:00:49.683: NAT: s=192.168.1.1->10.5.5.1, d=10.10.10.1 [158]
*Mar 1 01:00:49.683: NAT: s=10.5.5.1, d=10.10.10.1->192.168.1.1 [158]
*Mar 1 01:00:49.887: NAT*: o: icmp (192.168.1.1, 36) -> (10.5.5.1, 36) [158]
*Mar 1 01:00:49.887: NAT*: s=192.168.1.1->10.10.10.1, d=10.5.5.1 [158]
*Mar 1 01:00:49.887: NAT*: s=10.10.10.1, d=10.5.5.1->192.168.1.1 [158]
首先源地址192.168.1.1被NAT称10.5.5.1
源地址变成10.5.5.1,目的地址为10.10.10.1(第一个NAT
ip nat inside source static network 192.168.1.0 10.5.5.0 /24起作用了)
然后源地址为10.5.5.1,目的地10.10.10.1被NAT称192.168.1.1(第二条NAT
ip nat outside source static network 192.168.1.0 10.10.10.0 /24 起作用)
最终变成10.5.5.0/24 访问192.168.1.0/24 也就是ACL匹配的流量
Site_A#debug ip nat detailed
Site_A#ping 10.10.10.1 source 192.168.1.1
查看NAT debug info
*Mar 1 01:00:49.679: NAT: i
由于经过一系列的NAT转换,源目IP地址分别变成了10.5.5.0/24及192.168.1.0/24.也就是说SiteA路由器的路由表需要有到达SiteB的192.168.1.0/24的路由条目.但是,它在哪儿呢?虽然我们看到了:
ip route 172.1.1.2 255.255.255.255 S0/0
ip route 10.10.10.0 255.255.255.0 S0/0
这两条路由.但它们怎么理解呢?第一条用于建立VPN的peer,我想;第二条的用处是什么呢?是为了到达SiteB吗?但是目标地址是192.168.1.0/24,不是10.10.10.0/24,对于SiteA路由器来说,它不应该把数据包转发到SiteB,而是留在本地,因为192.168.1.0是SiteA的本地直连路由。除非...
路由在NAT转译之前就进行了匹配。当第一个nat发生后,源目地址是10.5.5.0/24及10.10.10.0/0,这时路由表开始匹配,完了之后第二个nat开始生效,这时源目地址变成了10.5.5.0/24及192.168.1.0/24。但是路由仍不变.当数据包到达SiteB之后,SiteB再路由到192.168.1.0.但是不做GRE,我很怀疑这种方法的可行性.
由于经过一系列的NAT转换,源目IP地址分别变成了10.5.5.0/24及192.168.1.0/24.也就是说SiteA路由器的路由表需要有到达SiteB的
ip route 10.10.10.0 255.255.255.0 S0/0将数据丢进VPN
还有在第二个NAT匹配后,源地址和目的地址变成10.5.5.0/24及192.168.1.0/24这个时候这个条目正好和VPN感兴趣数据流ACL匹配,被丢进了VPN,而不是再次查询路由丢进了A自己的内网
做一个测试
如果把A的感兴趣数据流ACL删除,这时测试,两种NAT也会进行,只是这个时候没有了ACL,所以不得不查询路由,查找路由后丢给公网路由器,不可达,这个时候在
Internet Router上可以看到
*Mar 1 00:18:07.691: IP: s=10.5.5.1 (Serial0/0), d=192.168.1.1, len 100, unroutable
由于Internet Router没有回包路由,所以不可达
但是如果加上ACL这个时候,在Internet Router debug ip packet时,没有任何信息输出,说明A访问B的数据直接穿越了Internet Router,走的VPN
所以我认为,第一条路由告诉A找到B
第二条路由告诉A访问B转换后的内网10.10.10.0/24走VPN
建议自己做个试验,就知道这样做是可行的,建议自己做个试验,就清楚了,呵呵!
建议自己做个实验,比较清晰,呵呵!
建议自己做个实验,比较清晰,呵呵!