news 2026/10/17 11:22:01

华为前缀列表深度解析:原理、配置与BGP/OSPF路由过滤实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
华为前缀列表深度解析:原理、配置与BGP/OSPF路由过滤实战

1. 前缀列表到底解决了什么问题

第一次接触前缀列表是在一个园区网改造项目里,当时需要在一台核心设备上做路由过滤,要求很明确:只允许特定的几条业务网段通过,其余全部拒绝。我一开始用的是基础ACL,写完发现根本没法精确匹配掩码长度——比如我想只放行 10.1.0.0/16,但ACL的规则会把 10.1.1.0/24 这种更具体的子网也一并放过去。这个问题困扰了我好一阵,直到翻文档才意识到,前缀列表(ip ip-prefix)才是干这个事的正确工具。

前缀列表本质上是一个路由匹配工具,它和ACL最大的区别在于:ACL匹配的是数据包的源目地址,而前缀列表匹配的是路由条目本身,而且能同时匹配网络地址和掩码长度。这个能力在路由策略场景里非常关键。你可以把它理解成一个带掩码校验的筛子——不光看网段对不对,还要看掩码长度是否符合预期。

它主要用在几个地方:路由引入时的过滤、BGP邻居的路由收发策略、OSPF/IS-IS区域间的路由过滤等。适合谁学?我觉得只要你在做网络运维、路由交换配置,或者准备考华为认证(HCIP/HCIE方向),前缀列表都是绕不过去的基本功。它不像某些高级特性那样只在特定场景才用得上,而是日常配置里高频出现的工具。

这篇文章我会从原理讲到实验,把匹配规则、配置命令、常见坑点都拆开说清楚。所有实验基于华为VRP系统,用eNSP模拟器就能完整复现。我尽量把每个参数为什么这么设、不这么设会出什么问题都讲透,让你看完能直接上手配。

2. 前缀列表的核心原理拆解

2.1 和ACL的本质区别在哪

很多人刚学的时候会把前缀列表和ACL混为一谈,觉得都是过滤工具,随便用哪个都行。实际上两者的匹配维度完全不同。ACL匹配的是"地址范围",比如 10.1.1.0 0.0.0.255 匹配的是 10.1.1.0/24 这个网段里的所有地址。而前缀列表匹配的是"路由前缀",格式是 网络地址 + 掩码长度。

举个例子你就明白了。假设有一条路由 10.1.1.0/24,你用ACL规则rule permit source 10.1.0.0 0.0.255.255,这条路由是能匹配上的。但如果你只想匹配掩码长度恰好是24位的路由,ACL就无能为力了——它没法表达"掩码必须是24"这个条件。前缀列表可以,写成ip ip-prefix test permit 10.1.0.0 16 less-equal 24,这样就能精确控制掩码范围。

这个区别在实际项目里影响很大。比如做BGP路由汇总的时候,你只想接收汇总路由而不接收明细路由,用ACL根本做不到,必须用前缀列表配合掩码长度范围来精确匹配。

2.2 匹配规则的五种写法

前缀列表的匹配规则看起来简单,但里面的门道不少。核心语法是:

ip ip-prefix <名称> [index <序号>] permit|deny <网络地址> <掩码长度> [匹配模式]

掩码长度后面可以跟几种匹配模式,这是最容易搞混的地方。我把它整理成表格,方便对照:

匹配模式含义示例匹配结果
不写精确匹配掩码长度permit 10.1.0.0 24只匹配 10.1.0.0/24
greater-equal X掩码长度大于等于Xpermit 10.1.0.0 16 greater-equal 24匹配 10.1.0.0/24 到 /32
less-equal X掩码长度小于等于Xpermit 10.1.0.0 16 less-equal 24匹配 10.1.0.0/16 到 /24
greater-equal X less-equal Y掩码长度在X到Y之间permit 10.1.0.0 16 greater-equal 20 less-equal 24匹配 /20 到 /24
只写网络地址不写掩码匹配所有掩码permit 10.1.0.0匹配 10.1.0.0 开头的所有路由

这里有个关键点:当你不写掩码长度、只写网络地址的时候,它匹配的是"网络地址部分相同"的所有路由,掩码长度不限。这个用法在需要放行某个大网段下所有子网时很方便,但也很容易误放行不该放的路由,用的时候要小心。

还有一个细节:greater-equal 和 less-equal 后面的数字必须大于等于前面写的掩码长度。比如你写permit 10.1.0.0 24 greater-equal 16,这是非法的,因为16小于24。设备会直接报错。这个规则背后的逻辑是:前缀列表匹配的前提是网络地址部分要先匹配上,掩码长度范围是在这个基础上做进一步筛选。

2.3 序号和匹配顺序的坑

前缀列表和ACL一样,是按序号从小到大依次匹配的,一旦匹配上就停止,不再往下查。默认情况下,如果你不写index,设备会自动分配序号,步长是10。比如你连续写三条规则,序号就是10、20、30。

这里有个很多人踩过的坑:前缀列表末尾有一个隐式的deny。也就是说,如果你写的规则没有匹配上某条路由,默认行为是拒绝。这和ACL的隐式拒绝是一样的逻辑。但问题是,很多人写前缀列表的时候只写了permit规则,忘了考虑没匹配上的路由会被拒绝,结果导致一些本该放行的路由被过滤掉了。

我的习惯是:在写permit规则之前,先想清楚"哪些要放行、哪些要拒绝",如果需求是"只拒绝少数几条、其余全放行",那就要在末尾显式加一条permit 0.0.0.0 0 less-equal 32来放行所有路由。这条规则的意思是匹配所有网络地址、掩码长度从0到32的路由,相当于放行一切。

序号还有一个作用:方便后续插入或删除规则。如果你一开始用默认序号10、20、30,后来想在中间插一条,就得重新规划序号。我的建议是初始就留出间隔,比如用10、20、30这样,中间留空位方便插入。如果要更灵活,可以手动指定序号,比如10、15、20,这样中间还能插12、13。

2.4 匹配过程到底怎么走的

理解匹配过程对排查问题特别重要。当一条路由过来的时候,前缀列表的匹配逻辑是这样的:

第一步,取出路由的网络地址部分,和规则里的网络地址做比对。注意这里比对的是网络地址,不是掩码。比如规则写的是 10.1.0.0 16,那路由的网络地址前16位必须和 10.1.0.0 的前16位一致。

第二步,如果网络地址匹配上了,再看掩码长度是否在规则指定的范围内。如果规则没写掩码范围,就精确匹配规则里写的掩码长度。

第三步,如果网络地址和掩码长度都匹配,就执行这条规则的动作(permit或deny),匹配过程结束。如果没匹配上,继续查下一条规则。

第四步,如果所有规则都没匹配上,执行隐式deny,路由被拒绝。

这个流程看起来简单,但实际排查问题的时候,经常是网络地址匹配上了、掩码长度没匹配上,导致路由被意外拒绝。比如你写permit 10.1.0.0 16,结果来了一条 10.1.0.0/24 的路由,网络地址部分是一样的,但掩码长度是24不是16,所以匹配不上,继续往下查。如果后面没有能匹配的规则,这条路由就被拒绝了。

3. 华为设备上的配置实操

3.1 基础配置命令逐条拆解

先看最基本的配置。假设我们要创建一个名为test-prefix的前缀列表,只允许 192.168.1.0/24 这条路由通过:

ip ip-prefix test-prefix index 10 permit 192.168.1.0 24

这条命令拆开看:ip ip-prefix是固定开头,test-prefix是列表名称(自己起,建议见名知意),index 10是序号(可省略,省略时自动分配),permit是动作,192.168.1.0 24是匹配条件。

如果要放行一个网段下的所有子网,比如 192.168.0.0/16 下面的所有路由:

ip ip-prefix test-prefix index 10 permit 192.168.0.0 16 less-equal 32

这里less-equal 32表示掩码长度从16到32都匹配。为什么是32?因为IPv4最大掩码长度就是32。这条规则会匹配 192.168.0.0/16、192.168.1.0/24、192.168.1.1/32 等等。

如果要匹配掩码长度在某个区间内的路由,比如只要 /20 到 /24 的:

ip ip-prefix test-prefix index 10 permit 192.168.0.0 16 greater-equal 20 less-equal 24

注意这里 greater-equal 后面的20必须大于等于前面写的16,否则报错。

3.2 在路由策略里调用前缀列表

前缀列表本身只是一个匹配工具,要真正生效,得在路由策略(route-policy)或者过滤策略(filter-policy)里调用。最常见的用法是在BGP里做路由过滤。

假设我们要在BGP邻居上做入方向过滤,只接收 10.1.0.0/16 到 /24 的路由:

ip ip-prefix bgp-in index 10 permit 10.1.0.0 16 less-equal 24 ip ip-prefix bgp-in index 20 deny 0.0.0.0 0 less-equal 32 route-policy bgp-filter permit node 10 if-match ip-prefix bgp-in bgp 100 peer 10.0.0.2 as-number 200 peer 10.0.0.2 ip-prefix bgp-in import

这里有几个点要注意。第一,前缀列表里我加了一条显式的deny规则,序号20,匹配所有路由。为什么要加这条?因为如果不加,末尾的隐式deny也会拒绝所有没匹配上的路由,效果是一样的。但显式写出来更清晰,方便后续维护的时候一眼看出意图。

第二,route-policy 里的 if-match 调用前缀列表,node 10 的动作是 permit。如果前缀列表匹配上了,route-policy 就放行;如果没匹配上,route-policy 继续查下一个node,如果没有下一个node,默认是deny。

第三,BGP邻居上直接用ip-prefix import也可以,不一定要走route-policy。但route-policy更灵活,可以在匹配前缀列表的同时还匹配其他条件(比如AS路径、团体属性等)。

3.3 在OSPF里做路由过滤

OSPF里用前缀列表做过滤,通常是在ABR或者ASBR上。比如在ABR上过滤区域间的路由:

ip ip-prefix ospf-filter index 10 deny 172.16.0.0 16 less-equal 32 ip ip-prefix ospf-filter index 20 permit 0.0.0.0 0 less-equal 32 ospf 1 area 0 filter ip-prefix ospf-filter import

这里我用了"先拒绝、后放行"的写法。第一条规则拒绝 172.16.0.0/16 及其所有子网,第二条规则放行其余所有路由。这种写法在需要"排除少数、放行多数"的场景里很常见。

注意OSPF的filter命令是在area视图下配置的,import方向表示过滤进入这个区域的路由,export方向表示过滤从这个区域发布出去的路由。具体用哪个方向,取决于你的需求。

3.4 配置检查与验证命令

配完之后怎么确认生效了?几个常用命令:

display ip ip-prefix test-prefix

这条命令查看前缀列表的内容,包括序号、匹配条件、已匹配的计数。计数这个信息很有用,如果某条规则的计数一直是0,说明没有路由匹配上,可能是规则写错了。

display route-policy bgp-filter

查看路由策略的配置和匹配计数。

display bgp routing-table peer 10.0.0.2 received-routes

查看从BGP邻居接收到的路由,确认过滤是否生效。

display ospf routing

查看OSPF路由表,确认过滤后的路由情况。

我习惯在配完之后用display ip ip-prefix看一眼计数,如果计数不对,再回头检查规则。这个习惯帮我省了很多排查时间。

4. 完整实验过程记录

4.1 实验拓扑与目标

实验拓扑很简单:两台路由器直连,R1和R2之间跑BGP。R1上配置若干条静态路由,通过BGP发布给R2。R2上用前缀列表做入方向过滤,只接收特定的路由。

具体目标:R1发布 10.1.0.0/16、10.1.1.0/24、10.1.1.1/32、10.2.0.0/16、10.2.1.0/24 这五条路由。R2只接收 10.1.0.0/16 到 /24 范围内的路由,10.2.0.0/16 及其子网全部拒绝。

拓扑用eNSP搭建,R1和R2用GE0/0/0直连,网段 192.168.12.0/24。R1的接口地址 192.168.12.1,R2的接口地址 192.168.12.2。

4.2 R1的配置

先配接口和BGP:

sysname R1 interface GigabitEthernet0/0/0 ip address 192.168.12.1 255.255.255.0 bgp 100 peer 192.168.12.2 as-number 200 ipv4-family unicast peer 192.168.12.2 enable network 10.1.0.0 255.255.0.0 network 10.1.1.0 255.255.255.0 network 10.1.1.1 255.255.255.255 network 10.2.0.0 255.255.0.0 network 10.2.1.0 255.255.255.0

这里有个细节:BGP用network命令发布路由的时候,对应的路由必须在IP路由表里存在。所以我需要先在R1上配静态路由指向这些网段。为了简化,我用黑洞路由:

ip route-static 10.1.0.0 255.255.0.0 NULL0 ip route-static 10.1.1.0 255.255.255.0 NULL0 ip route-static 10.1.1.1 255.255.255.255 NULL0 ip route-static 10.2.0.0 255.255.0.0 NULL0 ip route-static 10.2.1.0 255.255.255.0 NULL0

配完之后用display bgp routing-table确认五条路由都发布出去了。

4.3 R2的过滤配置

R2上先配接口和BGP邻居:

sysname R2 interface GigabitEthernet0/0/0 ip address 192.168.12.2 255.255.255.0 bgp 200 peer 192.168.12.1 as-number 100 ipv4-family unicast peer 192.168.12.1 enable

然后配前缀列表和路由策略:

ip ip-prefix bgp-in index 10 permit 10.1.0.0 16 less-equal 24 ip ip-prefix bgp-in index 20 deny 0.0.0.0 0 less-equal 32 route-policy bgp-filter permit node 10 if-match ip-prefix bgp-in bgp 200 ipv4-family unicast peer 192.168.12.1 route-policy bgp-filter import

这里我用了route-policy来调用前缀列表。也可以直接用peer 192.168.12.1 ip-prefix bgp-in import,效果一样。用route-policy的好处是后续如果要加其他匹配条件,直接在这个策略里加就行。

4.4 验证过滤效果

配完之后,在R2上查看BGP路由表:

display bgp routing-table

预期结果是:10.1.0.0/16、10.1.1.0/24、10.1.1.1/32 这三条路由应该被接收,10.2.0.0/16 和 10.2.1.0/24 应该被拒绝。

实际验证下来,结果符合预期。10.1.0.0/16 的掩码长度是16,在16到24范围内,匹配第一条规则,放行。10.1.1.0/24 的掩码长度是24,也在范围内,放行。10.1.1.1/32 的掩码长度是32,不在16到24范围内,第一条规则匹配不上,继续查第二条规则,第二条规则匹配所有路由,动作是deny,所以被拒绝。

等等,这里有个问题。我原本的意图是只接收 10.1.0.0/16 到 /24 的路由,10.1.1.1/32 应该被拒绝。但实际结果是它被拒绝了,这符合预期。但如果你希望 /32 的主机路由也被接收,就需要把 less-equal 改成 32。

再看 10.2.0.0/16,网络地址是 10.2.0.0,第一条规则匹配的是 10.1.0.0,网络地址不匹配,继续查第二条规则,被拒绝。10.2.1.0/24 同理,被拒绝。

用display ip ip-prefix bgp-in查看匹配计数,可以看到第一条规则匹配了3次(10.1.0.0/16、10.1.1.0/24、10.1.1.1/32 都匹配了第一条规则,但 10.1.1.1/32 因为掩码长度不在范围内,实际上没有匹配上第一条规则,而是匹配了第二条规则被拒绝)。这里计数显示的是匹配次数,不是放行次数,要注意区分。

4.5 调整规则验证不同效果

为了验证 greater-equal 和 less-equal 的组合效果,我改了一下规则:

ip ip-prefix bgp-in index 10 permit 10.1.0.0 16 greater-equal 24 less-equal 32

这样改完之后,10.1.0.0/16 的掩码长度是16,不在24到32范围内,匹配不上第一条规则,被第二条规则拒绝。10.1.1.0/24 的掩码长度是24,在范围内,放行。10.1.1.1/32 的掩码长度是32,在范围内,放行。

这个实验说明了一个重要点:前缀列表的掩码长度范围是精确控制的,greater-equal 和 less-equal 的边界值都包含在内。写规则的时候一定要想清楚边界值要不要包含。

5. 常见问题与排查技巧

5.1 规则写了但不生效

这是最常见的问题。原因通常有几个:一是前缀列表没被正确调用,比如route-policy里忘了写if-match,或者BGP邻居上忘了应用route-policy。二是匹配方向搞反了,import和export弄混了。三是序号顺序问题,前面的规则把后面的规则挡住了。

排查方法:先用display ip ip-prefix看计数,如果计数是0,说明没有路由匹配上,检查规则本身。如果计数不为0但路由还是被过滤了,检查route-policy的node顺序和动作。如果route-policy也没问题,检查BGP邻居上是否应用了正确的策略。

5.2 掩码长度匹配不上

这个问题的根源通常是对 greater-equal 和 less-equal 的理解有偏差。记住一个原则:前面写的掩码长度是"基准",greater-equal 和 less-equal 是在这个基准上做范围扩展。比如permit 10.1.0.0 16 less-equal 24,意思是网络地址匹配 10.1.0.0/16,掩码长度在16到24之间。

如果你写permit 10.1.0.0 24 less-equal 16,这是非法的,因为16小于24。设备会报错:Error: The less-equal value must be greater than or equal to the mask length.

还有一个容易忽略的点:如果你只写网络地址不写掩码长度,比如permit 10.1.0.0,它匹配的是所有以 10.1.0.0 开头的路由,掩码长度不限。这个用法要慎用,容易误放行。

5.3 隐式拒绝导致的意外过滤

前面提过,前缀列表末尾有隐式deny。很多人写规则的时候只写了permit,忘了考虑没匹配上的路由会被拒绝。比如你写permit 10.1.0.0 16,结果来了一条 10.1.0.0/24 的路由,匹配不上,被隐式拒绝。如果你本意是放行所有 10.1.0.0 开头的路由,那就应该写permit 10.1.0.0 16 less-equal 32。

我的习惯是:在写完permit规则后,如果需求是"放行多数、拒绝少数",就在末尾加一条permit 0.0.0.0 0 less-equal 32放行所有。如果需求是"拒绝多数、放行少数",就不加,让隐式deny生效。

5.4 序号冲突和插入规则

默认序号是10、20、30这样递增的。如果你后来想在10和20之间插一条,可以手动指定序号15。但要注意,如果15已经被占用了,会报错。所以规划序号的时候最好留出间隔,比如用10、20、30,中间留空位。

如果要删除某条规则,用undo ip ip-prefix test-prefix index 10。删除后,其他规则的序号不变。如果要修改某条规则,也是先删再加。

5.5 常见问题速查表

问题现象可能原因排查方法解决方法
规则不生效未调用或调用错误检查route-policy和BGP邻居配置确认if-match和import/export方向
路由被意外拒绝隐式deny生效查看前缀列表计数末尾加permit 0.0.0.0 0 less-equal 32
掩码长度匹配不上greater/less-equal理解偏差检查规则中的掩码范围调整greater-equal和less-equal的值
序号冲突手动指定序号重复查看已有规则序号重新规划序号,留出间隔
部分路由匹配不上网络地址不匹配对比路由网络地址和规则调整规则中的网络地址

5.6 几个实操心得

第一个心得:配前缀列表的时候,我习惯先写一条permit 0.0.0.0 0 less-equal 32放在最后,然后再往上加具体的规则。这样做的目的是先保证"默认放行",然后再逐步收紧。如果反过来,先写拒绝规则再写放行规则,很容易因为隐式deny导致意外过滤。

第二个心得:前缀列表的命名要有意义。比如bgp-in-filter、ospf-out-filter,一看就知道用在哪、什么方向。不要用test1、test2这种名字,过两天自己都忘了是干嘛的。

第三个心得:配完之后一定要用display ip ip-prefix看计数。计数为0的规则要么是写错了,要么是没路由匹配。这个习惯能帮你快速定位问题。

第四个心得:在BGP里做过滤的时候,如果同时用了前缀列表和AS路径过滤,要注意匹配顺序。route-policy里的if-match是"与"的关系,所有条件都匹配才执行动作。如果只想用其中一个条件,就不要写另一个。

6. 进阶用法与场景扩展

6.1 配合AS路径过滤做精细控制

前缀列表单独用已经很强了,但配合AS路径过滤能实现更精细的控制。比如你要拒绝来自某个AS的路由,同时只接收特定网段:

ip ip-prefix bgp-in index 10 permit 10.1.0.0 16 less-equal 24 ip as-path-filter 1 deny _300_ ip as-path-filter 1 permit .* route-policy bgp-filter permit node 10 if-match ip-prefix bgp-in if-match as-path-filter 1

这样配置之后,只有同时满足"网段在10.1.0.0/16到/24范围内"和"AS路径中不包含300"的路由才会被接收。两个条件是"与"的关系。

6.2 在路由引入时的过滤

OSPF引入外部路由的时候,也可以用前缀列表做过滤。比如只引入特定的静态路由:

ip ip-prefix import-filter index 10 permit 172.16.0.0 16 less-equal 24 ip ip-prefix import-filter index 20 deny 0.0.0.0 0 less-equal 32 ospf 1 import-route static route-policy import-filter

这里route-policy的名字和前缀列表的名字可以一样,也可以不一样。我习惯用不同的名字,避免混淆。

6.3 前缀列表的匹配效率

前缀列表的匹配效率比ACL高,因为它是基于树形结构存储的,查找速度快。但在规则数量很多的时候,还是要注意优化。我的经验是:把最常匹配的规则放在前面,减少匹配次数。比如你有一条规则匹配了90%的路由,就把它放在序号10的位置。

另外,前缀列表的规则数量不宜过多,一般建议控制在几十条以内。如果规则太多,考虑用社区属性或者其他的过滤方式替代。

6.4 和其他过滤工具的对比

工具匹配维度适用场景优点缺点
ACL数据包地址接口过滤、NAT简单直观不能匹配掩码长度
前缀列表路由前缀+掩码路由过滤精确匹配掩码不能匹配数据包
AS路径过滤AS路径BGP路由过滤灵活匹配AS只适用于BGP
社区属性过滤社区属性BGP路由过滤可标记路由需要提前规划

选择哪个工具,取决于你的具体需求。如果只是过滤数据包,用ACL。如果是过滤路由且需要精确控制掩码,用前缀列表。如果是BGP场景且需要按AS过滤,用AS路径过滤。

7. 我踩过的几个坑

第一个坑:有一次做BGP过滤,我写了一条permit 10.1.0.0 16,本意是放行 10.1.0.0/16 这条汇总路由。结果发现 10.1.1.0/24 这条明细路由也被放行了。我当时很纳闷,后来才想明白:10.1.1.0/24 的网络地址前16位和 10.1.0.0 是一样的,掩码长度24虽然不等于16,但前缀列表在匹配的时候,网络地址部分匹配上了,掩码长度不匹配,按理说应该继续往下查。但问题是,我后面没有其他规则了,隐式deny应该拒绝它才对。为什么会被放行?

后来仔细查文档才发现,我犯了一个低级错误:我把permit 10.1.0.0 16写成了permit 10.1.0.0,没写掩码长度。这样它匹配的是所有以 10.1.0.0 开头的路由,掩码长度不限。所以 10.1.1.0/24 也被放行了。这个坑让我记住了:写前缀列表一定要写掩码长度,除非你确实想匹配所有掩码。

第二个坑:有一次在OSPF里做过滤,我用了filter ip-prefix ospf-filter import,结果发现过滤没生效。排查了半天,发现是方向搞反了。import是过滤进入区域的路由,export是过滤发布出去的路由。我的需求是过滤从区域0进入区域1的路由,应该在区域1的视图下配import。但我配在了区域0的视图下,方向反了。

第三个坑:有一次配前缀列表的时候,我用了默认序号,写了三条规则:10、20、30。后来想在10和20之间插一条,手动指定序号15。结果设备报错,说序号15已经被占用了。我查了一下,发现之前有一条规则用了序号15,但我忘了。这个坑让我养成了习惯:配前缀列表的时候,先display ip ip-prefix看一下已有的序号,再规划新的序号。

第四个坑:有一次做BGP过滤,我用了route-policy,node 10 的动作是permit,if-match调用了前缀列表。结果发现所有路由都被拒绝了。排查后发现,route-policy的node 10 里,if-match没匹配上的路由会继续查下一个node,如果没有下一个node,默认是deny。而我以为route-policy的默认动作是permit。这个坑让我记住了:route-policy的默认动作是deny,不是permit。如果要放行没匹配上的路由,需要在末尾加一个route-policy xxx permit node 100,里面不写if-match,表示匹配所有。

这些坑踩下来,我的体会是:前缀列表本身不复杂,但和route-policy、BGP、OSPF配合使用的时候,细节很多。配完之后一定要验证,用display命令看计数、看路由表,确认过滤效果符合预期。不要想当然,觉得配了就一定生效。

最后分享一个小技巧:如果你不确定前缀列表的匹配效果,可以先在一个测试环境里验证,用display ip ip-prefix看计数,确认每条规则匹配了哪些路由。确认无误后再应用到生产环境。这个习惯能帮你避免很多生产事故。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 11:21:53

Vue.js网站模板源码二改指南:组件划分规范与实操避坑

简介&#xff1a;这是一套基于 Vue.js 的门户网站模板源代码&#xff0c;面向需要快速搭建企业官网、信息门户或产品展示站的前端开发者与建站人员&#xff0c;尤其适合希望减少重复劳动、便于二次修改的项目场景。资源包共 317 个文件&#xff0c;约 52.17MB&#xff0c;其中 …

作者头像 李华
网站建设 2026/10/17 11:19:56

GPIO模拟MDIO读写PHY寄存器的bit-banging驱动实现

简介&#xff1a;一套面向VxWorks嵌入式开发者的GPIO模拟MDC/MDIO驱动代码&#xff0c;专门解决系统缺乏专用SMI硬件接口时&#xff0c;用普通GPIO完成以太网PHY芯片管理通信的问题。压缩包内仅有1个C源文件&#xff0c;包体约2KB&#xff0c;虽小巧却完整覆盖驱动核心实现&…

作者头像 李华
网站建设 2026/10/17 11:19:41

Python zip包安全解压与运行:从验证到环境搭建避坑指南

简介&#xff1a;该压缩包专为海康威视网络摄像机二次开发场景设计&#xff0c;面向需要基于Python实现移动侦测报警事件的开发者。资源内封装了设备登录、报警回调等核心模块&#xff0c;其中NET_DVR_Login_V40.py负责完成SDK登录&#xff0c;MSesGCallback.py处理移动侦测消息…

作者头像 李华
网站建设 2026/10/17 11:19:32

代码化图表设计:让架构图、流程图和ER图成为可维护的代码

今天想认真聊聊 diagram-design 这个技术实践。简单说&#xff0c;它属于“用代码来画架构图、流程图、这些日常要用的图”这一大类需求。说得白话一点&#xff0c;就是把以前在画布上拖拽方框、连线的方式&#xff0c;换成写文本、跑命令、出图的方式&#xff0c;让整套流程图…

作者头像 李华
网站建设 2026/10/17 11:19:28

传送门Shader正方形背景问题:用Alpha Clipping彻底解决透明贴图残留

做传送门效果的时候&#xff0c;很多人都会卡在同一个地方&#xff1a;贴图素材本身明明是个圆形光效或者旋涡纹理&#xff0c;放进场景里却总带着一圈方方正正的底色&#xff0c;黑的或者白的&#xff0c;在Game视图里特别扎眼&#xff0c;瞬间把科幻感拉回“实习生作业”的水…

作者头像 李华
网站建设 2026/10/17 11:19:21

在VScode上写网页(html):用TaoToken统一Key打通本地预览与AI补全

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华