实验拓扑如图:

BGP路由黑洞概念 nat 黑洞路由_安全策略

实验基本配置:

防火墙配置:

防火墙安全策略:

security-policy
 rule name NO_PAT
  description NAT策略(NO_PAT)引入
  source-zone trust
  destination-zone untrust
  source-address 10.1.1.0 mask 255.255.255.0
  action permit

nat地址池配置:

nat address-group NO_PAT 0
 mode no-pat global
 section 0 1.1.1.1 1.1.1.2

防火墙NAT策略:

nat-policy
 rule name NO_PAT
  source-zone trust
  destination-zone untrust
  source-address 10.1.1.0 mask 255.255.255.0
  action source-nat address-group NO_PAT

安全区域设置

firewall zone trust
 set priority 85
 add interface GigabitEthernet1/0/0
#
firewall zone untrust
 set priority 5
 add interface GigabitEthernet1/0/1

默认路由配置

ip route-static 0.0.0.0 0.0.0.0 GigabitEthernet1/0/1 202.100.1.2

 

路由器AR1配置:

IP地址配置

interface GigabitEthernet0/0/0
 ip address 202.100.1.2 255.255.255.0

默认路由配置:

ip route-static 0.0.0.0 0.0.0.0 GigabitEthernet0/0/0 202.100.1.1

 

实验现象验证:

当完成配置后,发现可以使用 PC1 ping 通AR1的IP地址202.100.1.2,并且发生地址转换。这步不可省略!

验证结果:

BGP路由黑洞概念 nat 黑洞路由_安全策略_02

pc1的IP地址为10.1.1.1,观察wireshark抓包的结果:

BGP路由黑洞概念 nat 黑洞路由_BGP路由黑洞概念_03

 

 

这个实验主要讨论黑洞路由,接下来:

黑洞路由验证:

AR1 ping 防火墙地址池地址 1.1.1.1 和 1.1.1.2

ping 1.1.1.1

BGP路由黑洞概念 nat 黑洞路由_路由表_04

此时通信失败,观察wireshark抓包结果,发现此时只有一个icmp 的echo request报文。

BGP路由黑洞概念 nat 黑洞路由_BGP路由黑洞概念_05

 

再使用AR1ping 地址池中的另外一个地址:1.1.1.2,发现前方高能。

BGP路由黑洞概念 nat 黑洞路由_安全策略_06

 

虽然通信失败,但是请看wireshark抓包结果:

BGP路由黑洞概念 nat 黑洞路由_BGP路由黑洞概念_07

此时出现了大量的 icmp request报文!!!

 

 

路由环路分析:原理如下图。

BGP路由黑洞概念 nat 黑洞路由_安全策略_08

 

AR1将目的地址为1.1.1.2(为什么不是1.1.1.1稍后再谈)的数据发送至防火墙,

由于该地址没有和防火墙的出接口在同一个网段,防火墙查路由表,遵循默认路由,将这个数据包从G1/0/1再发送出去

数据包再次到达AR1,AR1查路由表,遵循默认路由,再把数据包发送给防火墙,循环往复,直至数据包的TTL值耗尽(见抓包那张图,ttl一直减小到1),数据包被丢弃,路由环路结束。

 

再来谈谈为什么AR1 ping 1.1.1.1不会出现这种情况,抓包只抓到一个报文:

在做完pc1 ping AR1的 202.100.1.2 验证的时候,发现结果是可以通信的,此时,在防火墙当中,生成了一条server-map如下图

BGP路由黑洞概念 nat 黑洞路由_安全策略_09

 

所以,此时关于1.1.1.1 在防火墙的server-map还没有被老化,所以当AR1的数据包过来,不会先匹配路由表,而是先匹配server-map,同时规定,nat产生的server-map,也一定要有安全策略,但是在这个场景中,并没有关于 untrust --> trust的安全策略(我们可以看到,通过server-map,目的地址1.1.1.1已经被转换成10.1.1.1了,但是防火墙没有相关的安全策略,很遗憾,数据包不能发送至PC1)

 

此时这个数据包就被丢弃了,而不会通过防火墙的默认路由向外发送。大家也可以等这条server-map老化掉(默认老化时间TTL:360s),再次在AR1ping 1.1.1.1,观察wireshak的抓包结果。

 

路由环路的解决方案:

 

由于地址池和出接口不在同一网段,会导致路由环路,解决方案:针对地址池的地址配置黑洞路由:

[FW1]ip route-static 1.1.1.1 32 NULL 0 
[FW1]ip route-static 1.1.1.2 32 NULL 0

再次使用AR1ping 1.1.1.2,抓包发现路由环路消失。

BGP路由黑洞概念 nat 黑洞路由_路由表_10

查看防火墙路由表:

BGP路由黑洞概念 nat 黑洞路由_BGP路由黑洞概念_11

 

 

 第二种方案!!

nat address-group NO_PAT 0
 mode no-pat global
 route enable
 section 0 1.1.1.1 1.1.1.2

route enable  相当于直接配置黑洞路由,此时不需要手工配置

BGP路由黑洞概念 nat 黑洞路由_抓包_12

 

 

此时再查看防火墙路由表

  

BGP路由黑洞概念 nat 黑洞路由_抓包_13

 

 可以看到系统配置的黑洞路由,优先级为61的 unr(user network routing),前提要先取消刚才手工配置的黑洞路由。