此产品的文档集力求使用非歧视性语言。在本文档集中,非歧视性语言是指不隐含针对年龄、残障、性别、种族身份、族群身份、性取向、社会经济地位和交叉性的歧视的语言。由于产品软件的用户界面中使用的硬编码语言、基于 RFP 文档使用的语言或引用的第三方产品使用的语言,文档中可能无法确保完全使用非歧视性语言。 深入了解思科如何使用包容性语言。
思科采用人工翻译与机器翻译相结合的方式将此文档翻译成不同语言,希望全球的用户都能通过各自的语言得到支持性的内容。 请注意:即使是最好的机器翻译,其准确度也不及专业翻译人员的水平。 Cisco Systems, Inc. 对于翻译的准确性不承担任何责任,并建议您总是参考英文原始文档(已提供链接)。
本文档介绍如何配置、验证基于区域的防火墙(ZBFW)以及虚拟专用网络(VPN)之间的路由泄漏并对其进行故障排除。
Cisco 建议您了解以下主题:
为了进行演示,使用了以下软件:
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
本文档介绍路由器如何确定SD-WAN重叠中的目标VPN映射,以及如何验证和排除VPN之间的路由渗漏问题。本章还介绍了在从不同的VPN通告同一子网时路径选择的特点,以及由此可能引起的问题类型。
两台SD-WAN路由器均配置了基本参数,以建立与SD-WAN控制器的控制连接以及它们之间的数据平面连接。此配置的详细信息不在本文档的讨论范围之内。下表汇总了VPN、站点ID和区域分配。
cE1 |
cE2 |
|
站点ID |
11 |
12 |
VPN |
30 |
10,20 |
系统IP |
169.254.206.11 |
169.254.206.12 |
服务端的路由器在每个虚拟路由和转发(VRF)中都配置了静态默认路由,这些路由指向对应的SD-WAN路由器。同样,SD-WAN边缘路由器配置了指向对应子网的静态路由。请注意,为了演示路由泄漏和ZBFW的潜在问题,cE2服务端后面的路由器具有相同的子网192.168.12.0/24。在cE2后面的两台路由器上,都配置了一个环回接口,用于模拟具有相同IP地址192.168.12.12的主机。
请注意,Cisco IOS-XE路由器R10、R20和R30在SD-WAN Edge路由的服务端以自主模式运行,在本演示中这些路由器主要用于模拟终端主机。SD-WAN Edge路由上的环回接口不能用于此目的,而不是实际主机(如服务端路由器),因为源自SD-WAN Edge路由器VRF中的接口的流量不被视为源自ZBFW区域中对应的数据流,而是属于边缘路由器的特殊自身区域。因此,不能将ZBFW区域视为VRF相同。有关自带区域的详细讨论不属于本文的范围。
主要控制策略配置目标是允许所有路由从VPN 10和20路由泄漏到VPN 30。VRF 30仅存在于路由器cE1上,VRF 10和20仅配置在路由器cE2上。为此,配置了两个拓扑(自定义控制)策略。以下是从VPN 10和20将所有路由导出到VPN 30的拓扑。
请注意,Default Action设置为Allow,以避免意外阻止TLOC通告或正常的VPN内路由通告。
同样,拓扑策略配置为允许路由信息从VPN 30反向通告到VPN 10和20。
然后,两个拓扑策略都会分配到入口(传入)方向对应的站点列表。从cE1(站点ID 11)收到来自VPN 30的路由时,vSmart控制器会将其导出到VPN 10和20的重叠管理协议(OMP)表中。
同样,在从cE2(站点ID 12)接收VPN 10和20路由时,vSmart会将来自VPN 10和20的路由导出到VPN 30路由表中。
这里还有完整的控制策略配置预览以供参考。
viptela-policy:policy
control-policy LEAK_VPN10_20_to_30
sequence 1
match route
vpn-list VPN_10_20
prefix-list _AnyIpv4PrefixList
!
action accept
export-to vpn-list VPN_30
!
!
default-action accept
!
control-policy LEAK_VPN30_to_10_20
sequence 1
match route
vpn-list VPN_30
prefix-list _AnyIpv4PrefixList
!
action accept
export-to vpn-list VPN_10_20
!
!
default-action accept
!
lists
site-list SITE_11
site-id 11
!
site-list SITE_12
site-id 12
!
vpn-list VPN_10_20
vpn 10
vpn 20
!
vpn-list VPN_30
vpn 30
!
prefix-list _AnyIpv4PrefixList
ip-prefix 0.0.0.0/0 le 32
!
!
!
apply-policy
site-list SITE_12
control-policy LEAK_VPN10_20_to_30 in
!
site-list SITE_11
control-policy LEAK_VPN30_to_10_20 in
!
!
必须从vManage controller Configuration > Policies部分激活策略,才能在vSmart控制器上生效。
下表总结了ZBFW过滤要求,以便用于本文的演示。
目标区域 |
VPN_10 |
VPN_20 |
VPN_30 |
源区域 |
|||
VPN_10 |
区域内允许 |
拒绝 |
拒绝 |
VPN_20 |
拒绝 |
区域内允许 |
允许 |
VPN_30 |
允许 |
拒绝 |
区域内允许 |
主要目标是允许所有源自路由器cE1 VPN 30服务端的发往VPN 10但不发往VPN 20的Internet控制消息协议(ICMP)流量。必须自动允许返回流量。
此外,必须允许来自路由器cE2服务端VPN 20的任何ICMP流量传输到cE1的VPN 30服务端,但不能传输到VPN 10。必须自动允许从VPN 30到VPN 20的返回流量。
此处,您可以找到ZBFW策略预览以供参考。
policy
zone-based-policy VPN_20_to_30
sequence 1
seq-name Rule_1
match
source-ip 192.168.20.0/24
destination-ip 192.168.30.0/24
protocol 1
!
action inspect
!
!
sequence 11
seq-name Rule_2
match
source-ip 192.168.12.0/24
destination-ip 192.168.30.0/24
protocol 1
!
action inspect
!
!
default-action drop
!
zone-based-policy VPN_30_to_10
sequence 1
seq-name Rule_1
match
source-ip 192.168.30.0/24
destination-ip 192.168.10.0/24
protocol 1
!
action inspect
!
!
sequence 11
seq-name Rule_2
match
protocol 1
source-ip 192.168.30.0/24
destination-ip 192.168.12.0/24
!
action inspect
!
!
default-action drop
!
zone VPN_10
vpn 10
!
zone VPN_20
vpn 20
!
zone VPN_30
vpn 30
!
zone-pair ZP_VPN_20_VPN_30_VPN_20_to_30
source-zone VPN_20
destination-zone VPN_30
zone-policy VPN_20_to_30
!
zone-pair ZP_VPN_30_VPN_10_VPN_30_to_10
source-zone VPN_30
destination-zone VPN_10
zone-policy VPN_30_to_10
!
zone-to-nozone-internet deny
!
要应用安全策略,必须在设备模板的其他模板部分的安全策略下拉菜单部分下分配该策略。
更新设备模板后,安全策略在应用安全策略的设备上变为活动状态。在本文档中进行演示时,仅在cE1路由器上启用安全策略就足够了。
现在,您需要验证是否已达到所需的安全策略(ZBFW)目标。
使用ping进行测试可确认从区域VPN 10到VPN 30的流量被按预期拒绝,因为没有为VPN 10到VPN 30的流量配置区域对。
R10#ping 192.168.30.30 source 192.168.10.10
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.30.30, timeout is 2 seconds:
Packet sent with a source address of 192.168.10.10
.....
Success rate is 0 percent (0/5)
R10#ping 192.168.30.30 source 192.168.12.12
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.30.30, timeout is 2 seconds:
Packet sent with a source address of 192.168.12.12
.....
Success rate is 0 percent (0/5)
同样,允许来自VPN 20的流量按照安全策略配置的预期到达VPN 30。
R20#ping 192.168.30.30 source 192.168.20.20
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.30.30, timeout is 2 seconds:
Packet sent with a source address of 192.168.20.20
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
R20#ping 192.168.30.30 source 192.168.12.12
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.30.30, timeout is 2 seconds:
Packet sent with a source address of 192.168.12.12
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
策略配置允许从VPN 30到区域VPN 10中的子网192.168.10.0/24的流量。
R30#ping 192.168.10.10 source 192.168.30.30
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.10.10, timeout is 2 seconds:
Packet sent with a source address of 192.168.30.30
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/1 ms
从VPN 30到区域VPN 20中的子网192.168.20.0/24的流量被拒绝,因为没有为此流量配置预期的区域对。
R30#ping 192.168.20.20 source 192.168.30.30
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.20.20, timeout is 2 seconds:
Packet sent with a source address of 192.168.30.30
.....
Success rate is 0 percent (0/5)
尝试对IP地址192.168.12.12执行ping操作时,您还会看到其它可能感兴趣的结果,因为该地址可能位于区域VPN 10或VPN 20中,而且从位于SD-WAN边缘路由器cE1服务端的路由器R30的角度无法确定目标VPN。
R30#ping 192.168.12.12 source 192.168.30.30
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.12.12, timeout is 2 seconds:
Packet sent with a source address of 192.168.30.30
.....
Success rate is 0 percent (0/5)
对于VRF 30中的所有源,结果都相同。这确认它不依赖于等价多路径(ECMP)散列函数结果:
R30#ping 192.168.12.12 source 192.168.30.31
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.12.12, timeout is 2 seconds:
Packet sent with a source address of 192.168.30.31
.....
Success rate is 0 percent (0/5)
R30#ping 192.168.12.12 source 192.168.30.32
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.12.12, timeout is 2 seconds:
Packet sent with a source address of 192.168.30.32
.....
Success rate is 0 percent (0/5)
根据目标IP 192.168.12.12的测试结果,您只能猜测它位于VPN 20中,因为它不响应ICMP回应请求,并且很可能被阻止,因为没有配置区域对以允许从VPN 30到VPN 20的流量(根据需要)。 如果具有相同IP地址192.168.12.12的目标位于VPN 10中并假设响应ICMP回应请求,则根据VPN 30到VPN 20的ICMP流量的ZBFW安全策略,必须允许流量。您必须确认目标VPN。
对cE1上的路由表进行简单检查无助于了解实际目的VPN。从输出中可获得的最有用的信息是目标的系统IP(169.254.206.12),而且不会发生ECMP。
cE1# show ip route vrf 30 192.168.12.0 255.255.255.0
Routing Table: 30
Routing entry for 192.168.12.0/24
Known via "omp", distance 251, metric 0, type omp
Last update from 169.254.206.12 on Sdwan-system-intf, 01:34:24 ago
Routing Descriptor Blocks:
* 169.254.206.12 (default), from 169.254.206.12, 01:34:24 ago, via Sdwan-system-intf
Route metric is 0, traffic share count is 1
要查找目标VPN,首先需要从cE1上的OMP表中查找所需前缀的服务标签。
cE1#show sdwan omp routes vpn 30 192.168.12.0/24
Generating output, this might take time, please wait ...
Code:
C -> chosen
I -> installed
Red -> redistributed
Rej -> rejected
L -> looped
R -> resolved
S -> stale
Ext -> extranet
Inv -> invalid
Stg -> staged
IA -> On-demand inactive
U -> TLOC unresolved
PATH ATTRIBUTE
FROM PEER ID LABEL STATUS TYPE TLOC IP COLOR ENCAP PREFERENCE
-----------------------------------------------------------------------------------------------------------
169.254.206.4 12 1007 C,I,R installed 169.254.206.12 private2 ipsec -
可以看到标签值为1007。最后,如果在vSmart控制器上检查了源自具有系统IP 169.254.206.12的路由器的所有服务,则可以找到目标VPN。
vsmart1# show omp services family ipv4 service VPN originator 169.254.206.12
C -> chosen
I -> installed
Red -> redistributed
Rej -> rejected
L -> looped
R -> resolved
S -> stale
Ext -> extranet
Inv -> invalid
Stg -> staged
IA -> On-demand inactive
U -> TLOC unresolved
PATH
VPN SERVICE ORIGINATOR FROM PEER ID LABEL STATUS
---------------------------------------------------------------------------
1 VPN 169.254.206.12 169.254.206.12 82 1003 C,I,R
2 VPN 169.254.206.12 169.254.206.12 82 1004 C,I,R
10 VPN 169.254.206.12 169.254.206.12 82 1006 C,I,R
17 VPN 169.254.206.12 169.254.206.12 82 1005 C,I,R
20 VPN 169.254.206.12 169.254.206.12 82 1007 C,I,R
根据VPN标签1007,可以确认目的VPN为20。
要通过platform命令查找目标VPN,首先,需要通过show ip vrf detail 30或show platform software ip f0 cef table *汇总命令在cE1路由器上获取VPN 30的内部VRF ID 。
cE1#show ip vrf detail 30 | i Id
VRF 30 (VRF Id = 1); default RD 1:30; default VPNID
cE1#show platform software ip f0 cef table * summary | i VRF|^30
Name VRF id Table id Protocol Prefixes State
30 1 1 IPv4 21 hw: 0x561b60f07a50 (created)
在本例中,VRF ID 1被分配给名为30的VRF。平台命令显示SD-WAN软件中的输出链元素(OCE)对象链,这些对象表示确定Cisco IOS-XE软件中数据包路径的内部转发逻辑:
cE1#show platform software ip F0 cef table index 1 prefix 192.168.12.0/24 oce
=== Prefix OCE ===
Prefix/Len: 192.168.12.0/24
Next Obj Type: OBJ_SDWAN_NH_SLA_CLASS
Next Obj Handle: 0xf800045f, urpf: 0
Prefix Flags: unknown
aom id: 1717, HW handle: 0x561b60eeba20 (created)
以下是指向可进一步验证的ID为0xf800045f的Service Level Agreement(SLA)类类型(OBJ_SDWAN_NH_SLA_CLASS)的下一跳对象的前缀:
cE1#show platform software sdwan F0 next-hop sla id 0xf800045f
SDWAN Nexthop OCE
SLA: num_class 16, client_handle 0x561b610c3f10, ppe addr 0xdbce6c10
SLA_0: num_nhops 1, Fallback_sla_flag TDL_FALSE, nhobj_type SDWAN_NH_INDIRECT
ECMP: 0xf800044f 0xf800044f 0xf800044f 0xf800044f
0xf800044f 0xf800044f 0xf800044f 0xf800044f
0xf800044f 0xf800044f 0xf800044f 0xf800044f
0xf800044f 0xf800044f 0xf800044f 0xf800044f
SLA_1: num_nhops 0, Fallback_sla_flag TDL_FALSE, nhobj_type ADJ_DROP
ECMP: 0xf800000f 0xf800000f 0xf800000f 0xf800000f
0xf800000f 0xf800000f 0xf800000f 0xf800000f
0xf800000f 0xf800000f 0xf800000f 0xf800000f
0xf800000f 0xf800000f 0xf800000f 0xf800000f
这是一个较长的输出,因此跳过从2到15的SLA类,因为未配置回退SLA类,并且所有类都指向与SLA 1相同的特殊DROP邻接关系。主要兴趣是来自SLA 0的间接类型的下一跳对象(SDWAN_NH_INDIRECT)。我们还可以注意到,没有ECMP,所有ID都是相同的(0xf800044f)。 可以进一步验证以找到最终目标VPN和服务标签。
cE1#show platform software sdwan F0 next-hop indirect id 0xf800044f
SDWAN Nexthop OCE
Indirect: client_handle 0x561b610f8140, ppe addr 0xd86b4cf0
nhobj_type: SDWAN_NH_LOCAL_SLA_CLASS, nhobj_handle: 0xf808037f
label: 1007, vpn: 20, sys-ip: 169.254.206.12, vrf_id: 1, sla_class: 1
查找目标VPN的另一种方法是使用packet-trace工具,它可以实时分析通过路由器的实际数据包。调试条件设置为仅与IP地址192.168.12.12之间的流量匹配。
cE1#debug platform condition ipv4 192.168.12.12/32 both
cE1#debug platform packet-trace packet 10
Please remember to turn on 'debug platform condition start' for packet-trace to work
cE1#debug platform condition start
接下来,如果流量是通过ping从R30发起的,则可以在cE1上看到匹配的数据包,并检查每个数据包的详细信息。在本例中,它是编号为0的第一个数据包。最重要的行以<<<<符号突出显示。
cE1#show platform packet-trace summary
Pkt Input Output State Reason
0 Gi6 Tu3 DROP 52 (FirewallL4Insp)
1 Gi6 Tu3 DROP 52 (FirewallL4Insp)
2 Gi6 Tu3 DROP 52 (FirewallL4Insp)
3 Gi6 Tu3 DROP 52 (FirewallL4Insp)
4 Gi6 Tu3 DROP 52 (FirewallL4Insp)
5 Gi6 Tu3 DROP 52 (FirewallL4Insp)
cE1#show platform packet-trace packet 0
Packet: 0 CBUG ID: 0
Summary
Input : GigabitEthernet6
Output : Tunnel3
State : DROP 52 (FirewallL4Insp) <<<<<<<<<<<<<<<<<<<<<<<<
Timestamp
Start : 161062920614751 ns (03/24/2022 16:19:31.754050 UTC)
Stop : 161062920679374 ns (03/24/2022 16:19:31.754114 UTC)
Path Trace
Feature: IPV4(Input)
Input : GigabitEthernet6
Output :
Source : 192.168.30.30
Destination : 192.168.12.12
Protocol : 1 (ICMP)
Feature: SDWAN Forwarding
SDWAN adj OCE:
Output : GigabitEthernet3
Hash Value : 0xda
Encap : ipsec
SLA : 0
SDWAN VPN : 20
SDWAN Proto : IPV4
Out Label : 1007 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Local Color : private2
Remote Color : private2
FTM Tun ID : 218
SDWAN Session Info
SRC IP : 192.168.10.11
SRC Port : 12366
DST IP : 192.168.10.12
DST Port : 12346
Remote System IP : 169.254.206.12
Lookup Type : TUN_DEMUX
Service Type : NONE
Feature: ZBFW
Action : Drop
Reason : No Zone-pair found <<<<<<<<<<<<<<<<<<<<<<<<<<<<
Zone-pair name : N/A <<<<<<<<<<<<<<<<<<<<<<<<<<<<
Class-map name : N/A
Policy name : N/A
Input interface : GigabitEthernet6
Egress interface : Tunnel3
Input VPN ID : 30
Output VPN ID : 20 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Input VRF ID:Name : 1:30
Output VRF ID:Name : 1:30
AVC Classification ID : 0
AVC Classification name: N/A
UTD Context ID : 0
packet-trace告知通过ping发送的全部五个ICMP回应数据包已丢弃,丢弃代码为52(FirewallL4Insp)。 章节功能:SDWAN转发表明目标VPN为20,隧道数据包内部报头中的服务标签1007用于转发以指定cE2上的目标VPN。部分功能:ZBFW还确认数据包被丢弃,因为没有为从输入VPN 20发往VPN 30区域的流量配置区域对。
如果路由192.168.12.0/24被R20撤销或无法从VRF 20中的cE2到达,会发生什么情况?虽然从VRF 30的角度来看,子网是相同的,因为ZBFW安全策略以不同方式处理从区域VPN 30到区域VPN 20和10的流量,所以可能会导致不希望的结果,例如允许流量,但一定不能允许流量,反之亦然。
例如,如果模拟cE2和R20路由器之间的链路故障。这会导致从vSmart控制器上的VPN 20路由表中退出192.168.12.0/24路由,相反,VPN 10路由会泄漏到VPN 30路由表中。根据cE1上应用的安全策略,允许从VPN 30到VPN 10的连接(从安全策略的角度来看这是预期的,但是对于两个VPN中提供的特定子网不可取)。
cE1#show platform packet-trace packet 0
Packet: 0 CBUG ID: 644
Summary
Input : GigabitEthernet6
Output : GigabitEthernet3
State : FWD
Timestamp
Start : 160658983624344 ns (03/24/2022 16:12:47.817059 UTC)
Stop : 160658983677282 ns (03/24/2022 16:12:47.817112 UTC)
Path Trace
Feature: IPV4(Input)
Input : GigabitEthernet6
Output :
Source : 192.168.30.30
Destination : 192.168.12.12
Protocol : 1 (ICMP)
Feature: SDWAN Forwarding
SDWAN adj OCE:
Output : GigabitEthernet3
Hash Value : 0xda
Encap : ipsec
SLA : 0
SDWAN VPN : 10
SDWAN Proto : IPV4
Out Label : 1006
Local Color : private2
Remote Color : private2
FTM Tun ID : 188
SDWAN Session Info
SRC IP : 192.168.10.11
SRC Port : 12366
DST IP : 192.168.10.12
DST Port : 12346
Remote System IP : 169.254.206.12
Lookup Type : TUN_DEMUX
Service Type : NONE
Feature: ZBFW
Action : Fwd
Zone-pair name : ZP_VPN_30_VPN_10_VPN_30_to_10
Class-map name : VPN_30_to_10-seq-11-cm_
Policy name : VPN_30_to_10
Input interface : GigabitEthernet6
Egress interface : Tunnel3
Input VPN ID : 30
Output VPN ID : 10
Input VRF ID:Name : 1:30
Output VRF ID:Name : 1:30
AVC Classification ID : 0
AVC Classification name: N/A
UTD Context ID : 0
Feature: IPSec
Result : IPSEC_RESULT_SA
Action : ENCRYPT
SA Handle : 74
Peer Addr : 192.168.10.12
Local Addr: 192.168.10.11
请注意,标签1006而不是1007,输出VPN ID现在是10而不是20。此外,根据ZBFW安全策略允许该数据包,并提供了相应的区域对、类映射和策略名称。
由于VPN 30的路由表中保存了最早的路由,因此可能出现更大的问题,在这种情况下,是VPN 10路由在初始控制策略应用VPN 20路由泄露到vSmart上的VPN 30 OMP表中。想象一下,如果最初的概念与本文中描述的ZBFW安全策略逻辑完全相反,将会出现什么情况。例如,目标是允许从VPN 30到VPN 20的流量,而不允许到VPN 10的流量。如果在初始策略配置之后允许该流量,则在出现故障或192.168.12.0/24路由从VPN 20撤销后,流量仍然被阻止到192.168.12.0/24子网,即使在恢复后也是如此,因为192.168.12.0/24路由仍然从VPN 10泄漏。
版本 | 发布日期 | 备注 |
---|---|---|
1.0 |
31-Mar-2022
|
初始版本 |