filter 不过滤静态文件_filter-policy原理与应用

filter-policy介绍

filter-policy也是一个很常用的路由信息过滤工具,如下图所示,SwitchA、SwitchB、SwitchC之间运行某种路由协议,路由在各个设备之间传递,当需要根据实际需求过滤某些路由信息的时候可以使用filter-policy实现。

11ac36f16a2a946a789818335e60fe5e.png

filter-policy使用注意事项:

1、filter-policy是常用于控制路由接收、发布的一个工具。

2、filter-policy只能过滤路由信息,无法过滤LSA。

3、filter-policy只能过滤路由信息,不能修改路由属性值。

filter-policy过滤路由信息的规则

由于距离矢量路由协议(例如RIP)和链路状态路由协议(例如OSPF)原理上的差异,filter-policy应用在这两种路由协议的时候过滤规则也有所不同。如下图

b438dede7f394f0f8ca66978df48b0df.png

在距离矢量路由协议中,设备之间传递的是路由信息,如果需要对这种路由信息进行某种过滤,可以使用filter-policy实现,出方向和入方向的生效位置如下图所示。如果要过滤掉上游设备到下游设备的路由,只要在上游设备配filter-policy export或者在下游设备上配置filter-policy import就可以了。

dad985ce20264cc83b1051567215b19e.png

在链路状态路由协议中,各路由设备之间传递的是LSA信息,然后设备根据LSA汇总成的LSDB信息计算出路由表。以OSPF为例,filter-policy生效规则如下:

1、filter-policy import命令实际上是对OSPF计算出来的路由进行过滤,不是对发布和接收的LSA进行过滤。

2、filter-policy export命令用来对引入的路由在发布时进行过滤,只将满足条件的外部路由转换为Type5 LSA(AS-external-LSA)并发布出去。这样可以在引入外部路由时进行特定的过滤,防止形成路由环路。

6da25d01b74e65ef928b63d1aba4245d.png

使用filter-policy过滤RIP路由示例

1、通过filter-policy对RIP发布的路由做过滤

需求描述

如下拓扑所示,三台交换机通过RIP交互路由,在SwitchA的RIP进程中引入了三条静态路由(作为测试路由),用户要求在SwitchB上部署filter-policy export,将其通告给SwitchC的路由进行过滤,拒绝192.168.3.0/24这条路由,其他路由放行。

f6c2ae7023032c0604b7e473b8fc8f2d.png

配置方法

1、在SwitchB上定义一个地址前缀列表,“抓取”符合条件的路由。

[SwitchB] ip ip-prefix huawei index 10 deny 192.168.3.0 24 //拒绝这条[SwitchB] ip ip-prefix huawei index 20 permit 0.0.0.0 0 less-equal 32//允许所有

2、在SwitchB的RIP视图中,部署filter-policy export。

[SwitchB]rip [SwitchB-rip-1] filter-policy ip-prefix huawei export Vlanif20

结果验证

做完上述配置以后,查看SwitchB和SwitchC的路由表如下:

814f7c0a189dfc339334b55b94e99a73.png
9b9f0f61083f0931c724f3bcec70754d.png

从上面的实验结果来看,在SwitchB上部署filter-policy export以后,SwitchB仍然拥有完整的路由表,而SwitchC已经不能通过RIP学习到192.168.3.0/24这条路由,因为这条路由在SwitchB上发布的时候已经被过滤掉。

2、通过filter-policy对RIP接收的路由做过滤

需求描述

如下拓扑所示,三台交换机通过RIP交互路由,在SwitchA的RIP进程中引入了三条静态路由(作为测试路由),用户要求在SwitchB上部署filter-policy import,把192.168.3.0/24这条路由拒绝,其他路由放行。

47098773d4fcf4200b400fe7bc055be2.png

配置方法

1、在SwitchB上定义一个地址前缀列表,“抓取”符合条件的路由。

[SwitchB] ip ip-prefix huawei index 10 deny 192.168.3.0 24 //拒绝这条[SwitchB] ip ip-prefix huawei index 20 permit 0.0.0.0 0 less-equal 32//允许所有

2、在SwitchB的RIP视图中,部署filter-policy import。

[SwitchB]rip [SwitchB-rip-1] filter-policy ip-prefix huawei import Vlanif10

结果验证

做完上述配置以后,查看SwitchB和SwitchC的路由表如下:

0119196cb792c5830ffb0f558bdfdc21.png
06744cede08a4ede91552915da7eebbc.png

从上面的实验结果来看,在SwitchB上部署filter-policy import以后,SwitchB和SwitchC的路由表中都不存在192.168.3.0/24这条路由了。

由于RIP是距离矢量路由协议,它是将自己的路由表通告给它的邻居路由器,当SwitchB的路由表中192.168.3.0/24这条路由被过滤以后,SwitchC也就无法再通过RIP学习到这条路由。也就是说,对于距离矢量路由协议,如果一台设备的路由表被进行了过滤,那么它会继续影响它下游的设备的路由表。

使用filter-policy过滤OSPF路由示例

1、通过filter-policy对OSPF接收的路由过滤(区域内)

6ac5b780c4beccde2d3b48bb7100ed5d.png

配置方法

1、在SwitchB上定义一个地址前缀列表,“抓取”符合条件的路由。

[SwitchB] ip ip-prefix huawei index 10 deny 10.1.1.0 24 //拒绝这条[SwitchB] ip ip-prefix huawei index 20 permit 0.0.0.0 0 less-equal 32//允许所有

2、在SwitchB的OSPF视图中,部署filter-policy import。

[SwitchB] ospf [SwitchB-ospf-1] filter-policy ip-prefix huawei import

结果验证

做完上述配置以后,查看SwitchB和SwitchC的路由表如下:

0f6c27386bda401bd68373d7f066ffe1.png
388f1973146bf8bee637fab1bf4fa776.png

通过SwitchB和SwitchC的路由表可以看到,虽然在SwitchB上10.1.1.0/24这条路由已经被过滤掉,但是LSA信息会继续传递给SwitchC,所以SwitchC的路由表中继续存在10.1.1.0/24这条路由。这样的结果也验证了我们一开始在注意事项中给出的结论:在链路状态路由协议中,filter-policy只能过滤路由信息,不能过滤LSA信息。

同时SwitchB和SwitchC的LSDB中仍然存在描述10.1.1.0/24这条路由的LSA信息,为了验证这一点,我们看一下SwitchB和SwitchC的LSA信息。

8707e83adf23b4d77b3e9c99f1389f52.png
053442a69942e2fde4d302fdbc8af0f9.png

可以看到SwitchB和SwitchC的LSDB中仍然存在描述10.1.1.0/24这条路由的LSA信息。

2、通过filter-policy对OSPF接收的路由过滤(区域间)

如下图所示,相对于上一个场景,这个场景的区别之处是划分了两个不同的区域,SwitchB和SwitchC之间传递的是Type3 LSA,这个Type3 LSA是SwitchB上根据区域间路由生成的。配置方法跟上一个场景一样,不再赘述,我们直接看一下实验结果。

ae6c05f59f039899064761bd332355c0.png

在部署过滤策略之前我们先看一下SwitchB和SwitchC的路由表

efd4946b1d7eebe5294c25cbb2287025.png
667a45c9297a751ebbadaa31cc37a9db.png

可以看到,在部署路由过滤策略之前,SwitchB和SwitchC的路由表中都有10.1.1.0/24这条路由。

结果验证

在SwitchB上部署filter-policy import以后,查看SwitchB和SwitchC的路由表,结果如下:

d5655f7eda6c219aff804402578adee9.png
89300d8a6775a7ffe9286d99e82e7d3f.png

由于现在划分不同的区域,SwitchC上的10.1.1.0/24这条路由是由SwitchB根据自身学习的路由产生的Type3-LSA描述的,而SwitchB上的这条路由被过滤掉了,因此不能够再产生描述区域间路由的这个Type3-LSA,因此SwitchC上不会再学习到10.1.1.0/24这条路由。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用BeautifulSoup库来解析HTML代码,并使用find_all方法选取所有的a标签,再从中提取href属性值。 例如,假设HTML代码如下: ```html <ul data-target="area"> <li data-id="0" data-type="bizcircle" class="filter__item--level3 filter__item--aside strong"> <a href="/zufang/yizhuangkaifaqu/rt200600000001/">不限</a> </li> <li class="filter__item--title">d</li> <li data-id="611100395" data-type="bizcircle" class="filter__item--level3 "> <a href="/zufang/daxingqita11/rt200600000001/">大兴其它</a> </li> <li class="filter__item--title">m</li> <li data-id="18335778" data-type="bizcircle" class="filter__item--level3 "> <a href="/zufang/majuqiao1/rt200600000001/">马驹桥</a> </li> <li class="filter__item--title">t</li> <li data-id="611100405" data-type="bizcircle" class="filter__item--level3 "> <a href="/zufang/tongzhouqita11/rt200600000001/">通州其它</a> </li> <li class="filter__item--title">y</li> <li data-id="18335750" data-type="bizcircle" class="filter__item--level3 "> <a href="/zufang/yizhuang1/rt200600000001/">亦庄</a> </li> <li data-id="611100595" data-type="bizcircle" class="filter__item--level3 "> <a href="/zufang/yizhuangkaifaquqita1/rt200600000001/">亦庄开发区其它</a> </li> </ul> ``` 要获取所有a标签的href属性值,可以使用以下代码: ```python from bs4 import BeautifulSoup html = ''' <ul data-target="area"> <li data-id="0" data-type="bizcircle" class="filter__item--level3 filter__item--aside strong"> <a href="/zufang/yizhuangkaifaqu/rt200600000001/">不限</a> </li> <li class="filter__item--title">d</li> <li data-id="611100395" data-type="bizcircle" class="filter__item--level3 "> <a href="/zufang/daxingqita11/rt200600000001/">大兴其它</a> </li> <li class="filter__item--title">m</li> <li data-id="18335778" data-type="bizcircle" class="filter__item--level3 "> <a href="/zufang/majuqiao1/rt200600000001/">马驹桥</a> </li> <li class="filter__item--title">t</li> <li data-id="611100405" data-type="bizcircle" class="filter__item--level3 "> <a href="/zufang/tongzhouqita11/rt200600000001/">通州其它</a> </li> <li class="filter__item--title">y</li> <li data-id="18335750" data-type="bizcircle" class="filter__item--level3 "> <a href="/zufang/yizhuang1/rt200600000001/">亦庄</a> </li> <li data-id="611100595" data-type="bizcircle" class="filter__item--level3 "> <a href="/zufang/yizhuangkaifaquqita1/rt200600000001/">亦庄开发区其它</a> </li> </ul> ''' soup = BeautifulSoup(html, 'html.parser') as_ = soup.find_all('a') for a in as_: href = a['href'] print(href) ``` 输出结果为: ``` /zufang/yizhuangkaifaqu/rt200600000001/ /zufang/daxingqita11/rt200600000001/ /zufang/majuqiao1/rt200600000001/ /zufang/tongzhouqita11/rt200600000001/ /zufang/yizhuang1/rt200600000001/ /zufang/yizhuangkaifaquqita1/rt200600000001/ ``` 其中,find_all方法用来选取所有匹配的元素,参数为标签名称字符串。在这里,我们选取所有的a标签,并遍历每个a标签。然后,从每个a标签中提取href属性值,并将所有的href属性值打印出来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值