2、路由过滤的必要性:控制路由表规模、保障网络安全、实现策略路由
说实话,刚入行那会儿,我对路由过滤这事儿并不上心。总觉得“多学几条路由又不吃亏”,直到有一次在客户现场,一台核心路由器的路由表撑到了80万条,CPU直接飙到99%,整网瘫痪了半小时。嗯,从那以后,我再也不敢轻视路由过滤了。
今天咱们就聊聊,为什么路由过滤这么重要。说白了,它解决的是三个核心问题:路由表太大、安全漏洞太多、流量路径太死板。
一句话总结:路由过滤不是“可选项”,而是“必选项”。没有过滤的网络,就像不设防的城门,谁都能进,谁也拦不住。
2.1 控制路由表规模:别让路由器“撑死”
路由器的内存和CPU是有限的。你想想看,一台企业级路由器,内存可能也就几百兆到几个G。如果全网的路由条目全灌进来,它根本扛不住。
我在项目中遇到过这样的情况:某运营商骨干网,一台汇聚路由器原本只承载了5万条路由,运行得好好的。结果隔壁AS的邻居配置失误,把全互联网的80万条路由全发过来了。路由器瞬间“脑死亡”,连管理接口都ping不通了。
为什么会这样?因为路由表越大,路由计算越慢,转发性能也越差。具体来说:
- 内存消耗:每条路由至少占用几百字节,80万条就是几百兆
- CPU负载:路由更新、下一跳解析、策略匹配,全都要CPU算
- 收敛时间:路由表越大,网络故障后收敛越慢
所以,路由过滤的第一个作用就是:只收你该收的路由,别让路由器“消化不良”。
我的习惯:在每台边界路由器上,我都会配一个入方向的路由过滤策略。只允许来自邻居的、我需要的路由前缀进来。其他的,一律拒绝。这样即使邻居配置错了,我的路由器也不会被“撑爆”。
2.2 保障网络安全:别让“坏路由”混进来
路由协议本身是信任的,但网络世界并不安全。你想想看,如果有人故意向你的路由器注入一条虚假路由,会发生什么?
我曾经处理过一个案例:某公司内部网络,突然所有流量都指向了一个未知的IP地址。排查后发现,是内部一台测试设备误配了BGP,把一条默认路由(0.0.0.0/0)广播到了全网。结果所有流量都跑到了那台测试设备上,业务全断了。
这就是典型的路由劫持。没有路由过滤,任何设备都能向你的网络注入路由,后果不堪设想。
路由过滤在安全方面的作用包括:
- 防止路由劫持:只接受来自可信邻居的路由
- 防止路由泄露:控制哪些路由可以向外广播
- 防止前缀欺骗:拒绝非法的、私有的、保留的IP前缀
避坑指南:我曾经见过一个团队,为了省事,在BGP邻居上直接用了“permit any”的过滤策略。结果某天运营商发了一条/8的超大前缀,直接把路由器的FIB表撑爆了。记住:永远不要用“permit any”,除非你确定自己在做什么。
2.3 实现策略路由:让流量“按需走”
路由过滤的第三个作用,是实现策略路由。说白了,就是让流量走你希望它走的路径,而不是让路由器自己“瞎选”。
举个例子:你公司有两条出口链路,一条是电信,一条是联通。你希望去电信的流量走电信,去联通的流量走联通。如果没有路由过滤,路由器可能会把联通流量也扔到电信链路上,导致延迟高、丢包多。
怎么解决?用路由过滤配合策略:
- 入方向过滤:只从电信邻居接收电信的IP前缀
- 出方向过滤:只向电信邻居通告你希望它知道的路由
- 本地策略:通过route-map或prefix-list,控制路由的优先级
这样,流量就能“按需走”了。电信的流量走电信,联通的走联通,互不干扰。
我的经验:在做策略路由时,我习惯先用prefix-list把路由分类,然后用route-map打上community标签。这样后续的过滤和选路就非常灵活了。比如,我可以给电信的流量打上“100:10”的community,联通的打上“100:20”,然后在路由策略里根据community做过滤。
2.4 一张图看懂路由过滤的必要性
下面这张图,展示了路由过滤在三个核心场景中的作用:
2.5 实际配置中的过滤策略
说了这么多理论,咱们看看实际配置中怎么用。下面是一个典型的BGP路由过滤配置示例:
!
! 定义前缀列表:只允许内部路由和特定外部路由
!
ip prefix-list ALLOWED-ROUTES seq 5 permit 10.0.0.0/8 le 24
ip prefix-list ALLOWED-ROUTES seq 10 permit 172.16.0.0/12 le 24
ip prefix-list ALLOWED-ROUTES seq 15 permit 192.168.0.0/16 le 24
ip prefix-list ALLOWED-ROUTES seq 20 deny 0.0.0.0/0 le 32
!
! 在BGP邻居上应用过滤策略
!
router bgp 65001
neighbor 10.1.1.1 prefix-list ALLOWED-ROUTES in
neighbor 10.1.1.1 prefix-list ALLOWED-ROUTES out
!
这个配置做了三件事:
- 入方向过滤:只接收内部私有地址段的路由
- 出方向过滤:只向外通告内部路由
- 拒绝默认路由:防止0.0.0.0/0这种“万能路由”混进来
注意:prefix-list的顺序很重要。默认是“permit all”,所以如果你只写了permit语句,没写deny语句,那所有没匹配到的路由都会被允许。我建议在最后加一条“deny any”来兜底。
2.6 总结:路由过滤不是“锦上添花”,而是“雪中送炭”
好了,咱们把路由过滤的必要性捋一遍:
- 控制路由表规模:别让路由器“撑死”,保证性能稳定
- 保障网络安全:别让“坏路由”混进来,防止路由劫持
- 实现策略路由:让流量“按需走”,优化网络质量
我个人觉得,路由过滤是网络工程师的基本功。你想想看,一个没有过滤的网络,就像一栋没有门禁的大楼,谁都能进,谁都能出。早晚会出事。
所以,我的建议是:从第一天开始,就把路由过滤当成标配。别等到出问题了再补,那时候就晚了。
核心要点:路由过滤不是“可选项”,而是“必选项”。它决定了你的网络是“稳定可控”还是“随时可能崩”。
公众号:蓝海资料掘金营,微信deep3321