OSPF 配置详细步骤:华为、H3C、思科单区域配置实例
OSPF 配置的核心只有三条命令:指定 Router ID 启动进程、进入区域 0、用 network 加反掩码把接口所在网段加进来。下面以机房两台三层交换机加一台出口路由器为例,给出华为、H3C、思科的完整配置,讲清反掩码怎么写、怎么确认邻居 Full,以及邻居起不来时先查哪几项。
OSPF 配置可以归结为四步:规划好每台设备的 Router ID 和互联地址;用 ospf 1 router-id(思科是 router ospf 1 加 router-id)启动进程;进入 area 0,用 network 网段 反掩码 把参与路由的接口加进来;最后用 display ospf peer(思科 show ip ospf neighbor)确认邻居进入 Full,再看路由表里有没有学到对端的网段。反掩码是子网掩码按位取反,/30 写 0.0.0.3,/24 写 0.0.0.255。下文用一个机房里很常见的拓扑,一台思科出口路由器下挂一台华为、一台 H3C 三层交换机,把三家的完整命令都写一遍,单厂商组网的读者照着对应那段改地址即可。
示例拓扑与地址规划
ISP 203.0.113.1
|
Gi0/0 203.0.113.2/30
+------------+
| R1 | Cisco RID 10.255.0.1
+------------+
Gi0/1 10.0.12.1/30 Gi0/2 10.0.13.1/30
| |
Vlanif12 10.0.12.2/30 Vlan-int13 10.0.13.2/30
+------------+ 10.0.23.0/30 +------------+
| SW1 |----------------| SW2 |
+------------+ +------------+
Huawei RID 10.255.0.2 H3C RID 10.255.0.3
VLAN 100 198.51.100.0/26 VLAN 200 198.51.100.64/26
| 设备 | Router ID(Loopback0) | 互联接口 | 业务网段 |
|---|---|---|---|
| R1 思科路由器 | 10.255.0.1/32 | Gi0/1 10.0.12.1/30 接 SW1;Gi0/2 10.0.13.1/30 接 SW2;Gi0/0 203.0.113.2/30 接运营商 | — |
| SW1 华为三层交换机 | 10.255.0.2/32 | Vlanif12 10.0.12.2/30(端口 GE0/0/1);Vlanif23 10.0.23.1/30(端口 GE0/0/2) | VLAN 100:198.51.100.0/26,网关 .1 |
| SW2 H3C 三层交换机 | 10.255.0.3/32 | Vlan-interface13 10.0.13.2/30(端口 GE1/0/1);Vlan-interface23 10.0.23.2/30(端口 GE1/0/2) | VLAN 200:198.51.100.64/26,网关 .65 |
这套规划里有几处是刻意的:
- Router ID 手工指定,并且等于 Loopback0 的地址,从一个专用的内网段(这里是 10.255.0.0/24)里分配。不要图省事用 1.1.1.1、2.2.2.2 这类地址:Loopback 会被宣告进 OSPF,内网里访问真正的 1.1.1.1 就会被引到自己的设备上。
- 每条互联链路一个 /30,三条链路组成环,任何一条断了,另外两条还能绕通。
- 全部放在区域 0。单区域不需要考虑区域边界和路由汇总。
- 运营商链路不加入 OSPF。R1 用一条静态默认路由指向运营商,再把默认路由下发给两台交换机;198.51.100.0/25 由运营商路由到 203.0.113.2,那是上游的配置,与 OSPF 无关。
network 反掩码怎么写
network 命令里的第二个参数是反掩码(也叫通配符掩码),算法是用 255.255.255.255 减去子网掩码:
| 前缀 | 子网掩码 | 反掩码 | network 写法示例 |
|---|---|---|---|
| /32 | 255.255.255.255 | 0.0.0.0 | network 10.255.0.2 0.0.0.0 |
| /30 | 255.255.255.252 | 0.0.0.3 | network 10.0.12.0 0.0.0.3 |
| /29 | 255.255.255.248 | 0.0.0.7 | network 10.0.12.8 0.0.0.7 |
| /27 | 255.255.255.224 | 0.0.0.31 | network 198.51.100.32 0.0.0.31 |
| /26 | 255.255.255.192 | 0.0.0.63 | network 198.51.100.64 0.0.0.63 |
| /24 | 255.255.255.0 | 0.0.0.255 | network 192.168.10.0 0.0.0.255 |
| /16 | 255.255.0.0 | 0.0.255.255 | network 10.20.0.0 0.0.255.255 |
反掩码里为 0 的位必须匹配,为 1 的位不关心。理解 network 命令,关键在下面三点:
- network 选的是接口,不是要宣告的路由。设备逐个检查接口的 IP 地址,落在 network 范围里的接口就在这个区域里运行 OSPF,宣告出去的是接口自己的网段和掩码。所以
network 10.0.0.0 0.255.255.255也能把示例里的三个 10 开头的接口全部加进来,宣告的仍然是各自的 /30 和 /32。 - 范围宽了省事,但有隐患。上面那条宽泛的写法,日后有人在这台交换机上新建一个 10.10.0.0/24 的管理 VLAN,它会自动加入 OSPF、开始发 Hello。生产环境建议一条 network 对应一个网段,或者直接写到接口地址,例如
network 10.0.12.2 0.0.0.0,只匹配这一个接口。 - 不要把子网掩码写成反掩码。两者 0 和 1 的含义正好相反,写成
network 10.0.12.0 255.255.255.252,匹配范围就完全不对了。
除了 network,三家都支持在接口下直接启用 OSPF:思科是接口视图 ip ospf 1 area 0,H3C 是接口视图 ospf 1 area 0,华为较新的版本是接口视图 ospf enable 1 area 0(以设备版本的命令手册为准)。接口下启用更直观,看接口配置就知道它跑不跑 OSPF;同一台设备上两种方式最好不要混用。
华为、H3C、思科的完整配置
下面的命令按顺序粘贴即可。服务器所在的接入端口(加入 VLAN 100、VLAN 200 的那些口)与 OSPF 无关,这里省略。
SW1:华为三层交换机
system-view
sysname SW1
vlan batch 12 23 100
interface GigabitEthernet0/0/1
port link-type access
port default vlan 12
quit
interface GigabitEthernet0/0/2
port link-type access
port default vlan 23
quit
interface LoopBack0
ip address 10.255.0.2 255.255.255.255
quit
interface Vlanif12
ip address 10.0.12.2 255.255.255.252
ospf network-type p2p
quit
interface Vlanif23
ip address 10.0.23.1 255.255.255.252
ospf network-type p2p
quit
interface Vlanif100
ip address 198.51.100.1 255.255.255.192
quit
ospf 1 router-id 10.255.0.2
bandwidth-reference 100000
silent-interface Vlanif100
area 0
network 10.255.0.2 0.0.0.0
network 10.0.12.0 0.0.0.3
network 10.0.23.0 0.0.0.3
network 198.51.100.0 0.0.0.63
quit
quit
quit
save
逐项说明:
ospf 1 router-id 10.255.0.2:进程号 1,Router ID 在启动进程时一起指定。进程已经运行后再改 Router ID,要执行reset ospf 1 process才生效,这会中断该进程的所有邻居,放在维护窗口做。ospf network-type p2p:以太网接口默认是广播类型,要选举 DR、BDR,刚启用时还要等待几十秒。两台设备之间的互联口改成点到点,邻居建立更快。两端必须同时改。silent-interface Vlanif100:业务网段要宣告出去,但不需要在服务器 VLAN 里发 Hello,设成静默接口,既省掉无用报文,也防止服务器网段里有人伪造 OSPF 报文。bandwidth-reference 100000:参考带宽改成 100 Gbps(单位 Mbps)。默认值是 100 Mbps,千兆、万兆接口的开销都会被算成 1,OSPF 分不出快慢。所有设备要改成同一个值。save会提示确认,输入 Y。另外,Vlanif100 只有在 VLAN 100 里至少有一个端口 up 时才会 up,否则这个网段不会被宣告,测试时先插一台服务器或把一个端口加入 VLAN 100。
SW2:H3C 三层交换机
system-view
sysname SW2
vlan 13
quit
vlan 23
quit
vlan 200
quit
interface GigabitEthernet1/0/1
port link-type access
port access vlan 13
quit
interface GigabitEthernet1/0/2
port link-type access
port access vlan 23
quit
interface LoopBack0
ip address 10.255.0.3 255.255.255.255
quit
interface Vlan-interface13
ip address 10.0.13.2 255.255.255.252
ospf network-type p2p
quit
interface Vlan-interface23
ip address 10.0.23.2 255.255.255.252
ospf network-type p2p
quit
interface Vlan-interface200
ip address 198.51.100.65 255.255.255.192
quit
ospf 1 router-id 10.255.0.3
bandwidth-reference 100000
silent-interface Vlan-interface200
area 0
network 10.255.0.3 0.0.0.0
network 10.0.13.0 0.0.0.3
network 10.0.23.0 0.0.0.3
network 198.51.100.64 0.0.0.63
quit
quit
save force
H3C 与华为的 OSPF 命令几乎一样,差别在周边:VLAN 三层接口叫 Vlan-interface,端口加入 VLAN 用 port access vlan,save force 直接保存不再询问。注意 VLAN 200 的网段是 198.51.100.64/26,network 的起始地址要写 .64,反掩码 0.0.0.63。
R1:思科出口路由器,下发默认路由
enable
configure terminal
hostname R1
interface Loopback0
ip address 10.255.0.1 255.255.255.255
interface GigabitEthernet0/0
description to-ISP
ip address 203.0.113.2 255.255.255.252
no shutdown
interface GigabitEthernet0/1
description to-SW1
ip address 10.0.12.1 255.255.255.252
ip ospf network point-to-point
no shutdown
interface GigabitEthernet0/2
description to-SW2
ip address 10.0.13.1 255.255.255.252
ip ospf network point-to-point
no shutdown
exit
ip route 0.0.0.0 0.0.0.0 203.0.113.1
router ospf 1
router-id 10.255.0.1
auto-cost reference-bandwidth 100000
network 10.255.0.1 0.0.0.0 area 0
network 10.0.12.0 0.0.0.3 area 0
network 10.0.13.0 0.0.0.3 area 0
default-information originate
end
write memory
思科的 network 把区域写在同一行末尾。default-information originate 把 R1 路由表里的默认路由作为外部路由下发给整个 OSPF 域,前提是 R1 自己有一条默认路由,这里就是指向运营商的那条静态路由;运营商链路断开、静态路由失效时,下发也随之撤销,两台交换机不会把流量送到一个已经出不去的出口。华为、H3C 做出口设备时,对应的命令是 OSPF 视图下的 default-route-advertise。203.0.113.0/30 没有写进任何 network,R1 不会向运营商发 Hello。
三家命令对照
| 步骤 | 华为 | H3C | 思科 |
|---|---|---|---|
| 启动进程、指定 Router ID | ospf 1 router-id 10.255.0.2 |
ospf 1 router-id 10.255.0.3 |
router ospf 1 后 router-id 10.255.0.1 |
| 进入区域、宣告网段 | area 0 后 network 10.0.12.0 0.0.0.3 |
同华为 | network 10.0.12.0 0.0.0.3 area 0 |
| 接口改点到点 | ospf network-type p2p |
ospf network-type p2p |
ip ospf network point-to-point |
| 静默接口 | silent-interface Vlanif100 |
silent-interface Vlan-interface200 |
passive-interface 接口名 |
| 参考带宽(Mbps) | bandwidth-reference 100000 |
bandwidth-reference 100000 |
auto-cost reference-bandwidth 100000 |
| 下发默认路由 | default-route-advertise |
default-route-advertise |
default-information originate |
| 重启进程 | reset ospf 1 process |
reset ospf 1 process |
clear ip ospf process |
| 保存 | save |
save force |
write memory |
验证:邻居 Full、路由表与切换测试
| 看什么 | 华为 | H3C | 思科 |
|---|---|---|---|
| 邻居状态 | display ospf peer brief |
display ospf peer |
show ip ospf neighbor |
| 哪些接口在跑 OSPF | display ospf interface |
display ospf interface |
show ip ospf interface brief |
| 学到的 OSPF 路由 | display ip routing-table protocol ospf |
display ip routing-table protocol ospf |
show ip route ospf |
| 链路状态数据库 | display ospf lsdb |
display ospf lsdb |
show ip ospf database |
在 R1 上,两个邻居都应该是 FULL;点到点链路没有 DR,角色显示为横杠:
R1# show ip ospf neighbor
Neighbor ID Pri State Dead Time Address Interface
10.255.0.2 0 FULL/ - 00:00:37 10.0.12.2 GigabitEthernet0/1
10.255.0.3 0 FULL/ - 00:00:34 10.0.13.2 GigabitEthernet0/2
邻居 Full 之后再核对路由,每台设备都应该学到“除自己直连以外的全部网段”:
- R1:198.51.100.0/26 下一跳 10.0.12.2,198.51.100.64/26 下一跳 10.0.13.2,另有 10.0.23.0/30 和两台交换机的 Loopback /32,都以
O开头。 - SW1:一条 0.0.0.0/0,下一跳 10.0.12.1,协议列是 OSPF 外部路由的标记(华为显示为
O_ASE,默认优先级 150);198.51.100.64/26 下一跳 10.0.23.2,即直接经互联链路走 SW2,不绕 R1。 - SW2:与 SW1 对称,默认路由同样是外部路由,H3C 较新的版本会按外部路由类型显示为
O_ASE2,具体写法以设备版本为准。
最后做一次切换测试,放在维护窗口里:从 VLAN 100 的一台服务器执行 traceroute -n 223.5.5.5,路径应为 198.51.100.1 → 10.0.12.1 → 运营商;在 R1 的 Gi0/1 下执行 shutdown,SW1 上用 display ip routing-table 0.0.0.0 0 看默认路由的下一跳是否变成 10.0.23.2,服务器再 traceroute 一次,应改走 198.51.100.1 → 10.0.23.2 → 10.0.13.1;确认后 no shutdown 恢复。接口直接断开时,OSPF 会立刻感知并重算,切换通常在秒级完成。
邻居建不起来,先查这六项
配置阶段邻居起不来,绝大多数是配置本身漏了或写错了,按下面的顺序逐项核对:
| 检查项 | 怎么看 | 常见的配置错误 |
|---|---|---|
| 1. 接口有没有跑 OSPF | display ospf interface、show ip ospf interface brief 里有没有这个接口 |
network 的网段或反掩码写错,没覆盖到接口;VLANIF 没有 up 的成员端口,接口本身是 down |
| 2. 是不是被设成了静默 | 华为、H3C 看 OSPF 视图下的 silent-interface;思科看 show ip protocols 的 Passive Interface |
把互联接口也设成了静默;思科用了 passive-interface default,却忘了对互联口执行 no passive-interface |
| 3. 区域号是否一致 | 两端 display ospf interface 的区域列 |
一端写 area 0,另一端写成了 area 1 |
| 4. Router ID 是否重复 | 华为、H3C 用 display ospf brief,思科用 show ip ospf |
复制配置模板到新设备,忘了改 router-id |
| 5. 网络类型与计时器是否一致 | display ospf interface 接口名、show ip ospf interface 接口名 里的类型和 Hello、Dead 时间 |
只改了一端的 p2p:计时器相同时邻居可能到 Full,但路由算不出来;改过 Hello 间隔却没改对端 |
| 6. MTU 与认证 | 两端接口的 MTU;认证配置 | 一端开了巨型帧;一端配了认证、另一端没配 |
前四项占了配置错误的大头,而且都能在本机上看出来,不需要抓包。第 5、6 项要两端对比着看。思科默认在建立邻接时检查两端 MTU,不一致会卡在交换数据库的阶段;华为默认不检查,两台华为设备 MTU 不同照样能 Full,问题会在数据库变大后才暴露,所以互联两端的 MTU 应在规划时就统一。
在管理系统里怎么落地
OSPF 的 network 写错,常见原因是“这台交换机上到底有哪些网段”没有准确记录。Toplink DCIM 的 IP 地址管理为每个地址段登记所在的 VLAN,以及网关挂在哪台支持路由的交换机上,某台三层交换机上挂着哪些业务网段有据可查,可以和 display ospf interface 的结果逐条对照。改 OSPF 配置需要登录设备时,可以在交换机管理里直接从浏览器打开交换机的 SSH 或 Telnet 终端,会话全程录像并记录命令日志,哪一次操作改了 router-id、network 或网络类型,事后都能查到。
常见问题
OSPF 进程号两端必须一样吗?
不需要。进程号只在本机有效,用来区分同一台设备上的多个 OSPF 进程,一端写 1、另一端写 10 照样能建立邻居。两端必须一致的是区域号、Hello 与 Dead 间隔、认证方式和密钥等接口参数。
单区域 OSPF 适合多大的网络?
没有硬性上限,取决于设备性能和链路稳定性。几十台三层设备的机房网络用单区域足够,配置和排障都简单;设备更多、或者部分链路经常抖动时,再按机房或功能模块划分区域,在区域边界做路由汇总。
同一个网段既有静态路由又有 OSPF 路由,听哪个的?
看路由优先级,而且厂商默认值不同:华为、H3C 上 OSPF 区域内路由的优先级是 10,静态路由是 60,数值小的优先,所以 OSPF 胜出;思科上静态路由的管理距离是 1,OSPF 是 110,静态路由胜出。混合组网时要特别留意。