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,靜態路由勝出。混合組網時要特別留意。