這幾天都在跟公司的 Cisco Router 奮戰,以前並沒有什麼機會去管理這台設備,但最近由於公司內部有些 IT 設備異常,不得不進去調整一下設定,也藉此學習 Cisco IOS (Internetwork Operating System) 的 CLI 命令列介面。今天這篇文章我就來整理這幾天的小小心得。
由於我手邊的 Cisco 設備已經都是設定完成的狀態,所以我並不太熟悉如何從全新的設備開始設定,所以本篇文章主要著重在「設備維護」部分,針對 IOS 介面如何使用、基本觀念、基礎網路設定等等。
基本觀念
由於 Cisco IOS 是一套網路設備專用的作業系統,他的使用方式主要以 CLI 介面為主,而在進入 IOS 的 Shell 環境時,使用習慣與我們熟悉的 Bash 環境有很大的差異,所以有著不小的進入門檻,一定要先建立部分基本觀念,才能好好的使用它。
使用上,使用 Cisco IOS 時有好幾種命令模式(Command modes)與上百種設定模式(Configuration modes),不同的模式(Modes)下就會有不同的指令可以用,而每個命令都有綁定最多 16 種不同的權限等級(privilege level
),用以決定你的登入身份是否可以執行該命令。所以你在進入 IOS 的 CLI 介面之前,這是最先需要知道的背景知識。
輸入命令時,你隨時都可以輸入 ?
(問號) 來顯示當下的輸入提示,這是操作 Cisco IOS 的必備技能之一。
以下是常見的幾個模式(Modes):
簡寫/模式名稱 |
模式名稱 |
提示字元 |
描述 |
(U ) 使用者模式 |
User EXEC mode |
Router> |
一般帳號預設連入的模式 |
(P ) 特權模式 |
Privileged EXEC mode |
Router# |
管理者帳號預設連入的模式 |
(G ) 設定模式 |
Configuration mode |
Router(config)# |
你只能從特權模式進入 |
(I ) 介面模式 |
Interface mode |
Router(config-if)# |
你只能從設定模式進入 |
(R ) 路由模式 |
Routing mode |
Router(config-router)# |
你只能從設定模式進入 |
你可以透過 SSH 登入 Cisco 設備,若你先以沒有權限的本機帳戶登入,要輸入 enable
命令才能進入 Privileged EXEC mode
。但如果你直接用最高權限管理員帳號登入,預設會進入 Privileged EXEC mode
。但
基本上,你只要連入 Cisco IOS 之後,就是不斷的在不同模式之間切換,然後輸入命令執行與調整設定而已。
在不同模式之間切換
管理者透過 SSH 登入到 Cisco 設備之後,最常見的兩種模式就切換是 Privileged EXEC mode
與 Configuration mode
了!
-
進入 Configuration mode
(或稱 Global Configuration mode
)
configure terminal
或可打簡寫
config t
Cisco IOS 的命令與參數都可以打簡寫,只要簡寫的程度不會跟相同模式與相同命令下的參數重複,最少可以只打一個字母就能執行,所以上述命令也可以打成 conf t
就好。如下圖示說明完整的操作情境!
-
退出 Configuration mode
你可以按下 Ctrl+Z
快速鍵,即可立即退出 Configuration mode
,也可以輸入 end
或 exit
退出該模式。
退出到上一層模式
exit
退出到最上層模式 (使用者模式 或 特權模式)
end
-
退出 Cisco IOS 的 CLI 環境
這部分跟一般 Linux 一樣,輸入 exit
或 logout
就可以退出
exit
logout
除此之外,有時候我們也會選擇在 User EXEC mode
與 Privileged EXEC mode
這兩種模式之間切換!
由於 Cisco IOS 有 0
~ 15
共 16 個權限等級(privilege level
)可以設定,不同的權限等級代表你可以執行的命令數量不同,控制你可以看到的或修改的設定。基本上權限等級 0
代表「無權限」,而 1
代表「不含機敏資料的唯讀權限」,而 15
則代表「最高權限」。
所以你可以透過 enable
或 disable
命令來切換不同的執行模式(EXEC mode
),而 enable 15
就是 Privileged EXEC mode
,其他的權限等級都算 User EXEC mode
!
-
設定 enable
密碼
不是所有的 Cisco 設備都會設定所謂的 enable
密碼,因為如果你已經建立好權限等級 15
的本機帳號,登入後基本上就已經進入 Privileged EXEC mode
模式,從這個模式開始就已經可以對整台電腦進行完整的設定與管理。
然後,有些網管人員習慣都以非管理者帳號登入,需要的時候才透過 enable
命令進入 Privileged EXEC mode
模式,此時你就要先設定好這個 enable
密碼,以下是設定步驟:
config t
enable secret {你的高強度密碼}
exit
write
最後一步 write
命令是將目前的設定寫入設備,當設備重啟時就會套用當前的設定。
-
使用 enable
命令進入 Privileged EXEC mode
模式
enable
這裡的 enable
命令等同於 enable 15
命令,就是變身為最高權限管理者的意思,也等同於要進入 Privileged EXEC mode
模式,輸入此命令要立即輸入 enable
密碼!
-
使用 disable
命令進入 User EXEC mode
模式
disable
這裡的 disable
命令等同於 enable 0
命令,就是變身為完全無權限的使用者的意思,也等同於要進入 User EXEC mode
模式!
從較高的權限等級進入較低的權限等級時,輸入 enable <n>
命令時是不用輸入密碼的。
操作 Cisco IOS 的基本步驟如下:
- 進入 User EXEC mode
- 進入 Privileged EXEC mode
- 進入 Global Configuration mode
- 進入 Specific Configuration modes
- 進入 Configuration submodes
- 進入 Configuration subsubmodes
- ... 以此類推 ...
總之,你就是在這些模式之間切換,然後輸入命令、進行設定、查詢狀態、...等等。
查詢設備狀態與設定
剛開始維護 Cisco 設備時,可以透過以下命令得知一些重要資訊:
以下請在 Privileged EXEC mode
模式下執行。
-
顯示設備中的各項版本資訊
show version
相關文章: Cisco Show Version Command
-
顯示執行中的設定 (套用到設備中的設定值)
show running-config
我比較習慣打簡寫:
show run
或這樣打:
s run
其中 s
是一個 alias command,你可以透過 show aliases
查詢有哪些 alias 命令!
或這樣:
s ru
由於設定可能相當複雜,你可以透過 Pipe 給 section
或 include
來篩選出需要的設定,以下是取得關鍵字中有出現 username
的使用範例:
show run | section username
show run | include username
-
顯示啟動設定值 (已經寫入設備的設定值)
show startup-config
-
顯示時鐘資訊
show clock detail
以下是修改時區的命令:
config t
clock timezone CST +8
exit
以下是設備設定時間的命令,先讀出硬體時鐘,然後手動設定正確時間,最後寫回硬體時鐘:
clock read-calendar
clock set 17:21:00 Oct 2 2022
clock update-calendar
-
顯示 ARP 資訊
show arp
-
顯示 IP 路由資訊
show ip route
-
顯示 VLAN 資訊
show vlan
-
顯示目前設定的 IP ACLs 清單
show access-lists
-
顯示目前設定的 Route-Maps 清單
show route-map all
-
顯示目前設定的 SNAT 位址轉譯統計資訊
show ip nat statistics
-
顯示目前設定的 SNAT 位址轉譯清單
show ip nat translations | include 192.168.132.69
-
顯示目前登入設備的使用者清單
show users
-
顯示設備的 CPU 使用率資訊
show proc cpu history
設備帳號管理
我公司的 Cisco Router 2951 其預設出廠的資訊如下:
- Default IP Address:
10.0.0.1
- Default Login Username:
cisco
- Default Login Password:
cisco
我們拿到設備後通常第一步就是先刪除預設帳號並重新建立帳號,本章節來說明多種不同的帳號建立方式。
-
管理使用者帳號要進入全域設定模式 ( Global Configuration mode
)
config t
-
顯示現有帳號清單
do show run | section username
注意: 若要在 Global Configuration mode
執行 Privileged EXEC mode
下的命令,只要在命令前加上 do
即可!
他會顯示所有帳號與密碼的清單:
username admin privilege 15 secret 5 $1$lYgd$a53zaf93jFkNNI49lC/9h.
username user01 password 0 Pa$$w0rd
從上面的例子你可以看到,我們在 Cisco 設備中建立帳號時,有兩種密碼的儲存格式,一種是有加密的格式,一種則是未加密的格式。而當你透過 show running-config
顯示系統設定值,未加密的密碼就會完整的顯示出來,因此相對比較不安全。
-
建立新帳號 (密碼未加密)
建立帳號的命令格式如下:
username [帳號名稱] password [權限等級] [密碼]
實際範例如下:
username user02 password 0 Pa$$w0rd
刪除現有帳號
no username user02
Cisco IOS CLI 在任何設定前面只要加上 no
就是「刪除」的意思!
-
建立新帳號 (密碼採用預設 MD5 演算法雜湊加密)
建立帳號的命令格式如下:
username [帳號名稱] privilege [權限等級] secret [密碼]
實際範例如下:
username user02 privilege 0 secret Pa$$w0rd
刪除現有帳號
no username user02
Cisco IOS CLI 在任何設定前面只要加上 no
就是「刪除」的意思!
-
建立最高權限管理者帳號 (密碼採用預設 SHA256 演算法雜湊加密)
建立帳號的命令格式如下:
username [帳號名稱] privilege [權限等級] algorithm-type [演算法] secret [密碼]
實際範例如下:
username user02 privilege 15 algorithm-type sha256 secret Pa$$w0rd
設定 SSH 免密碼登入
若你想直接無密碼 SSH 登入 Cisco 設備,需要將你的 SSH 公開金鑰設定到設備之中,以下是設定步驟:
-
先取得你的 SSH 公開金鑰並轉成 Cisco 所需的格式
建議在 WSL 或任何 Linux 環境下執行以下命令,將 ~/.ssh/id_rsa.pub
先格式化成一個多行的金鑰內容,並將輸出結果複製到剪貼簿:
fold -b -w 72 ~/.ssh/id_rsa.pub
若使用 WSL 你可以這樣執行,直接複製到剪貼簿之中:
fold -b -w 72 ~/.ssh/id_rsa.pub | clip.exe
-
設定 Cisco 綁定使用者的公開金鑰
進入 Configuration mode
(或稱 Global Configuration mode
)
conf t
進入 conf-ssh-pubkey
設定模式
ip ssh pubkey-chain
再進入 conf-ssh-pubkey-user
設定模式
username user02
再進入 conf-ssh-pubkey-data
設定模式,並貼上剪貼簿內容(你的 SSH 公開金鑰)
key-string
貼上剪貼簿內容,也就是你的 SSH 公開金鑰!
貼上後請直接輸入 exit
五次,即退出 conf-ssh-pubkey-data
資料輸入模式、退出 conf-ssh-pubkey-user
設定模式、退出 conf-ssh-pubkey
設定模式、退出 Global Configuration mode
、退出 IOS 介面:
exit
exit
exit
exit
exit
如果要刪除使用者的公開金鑰綁定,可以這樣設定:
-
進入 Configuration mode
(或稱 Global Configuration mode
)
conf t
-
透過以下設定刪除 user02
使用者的 SSH 金鑰綁定
ip ssh pubkey-chain
no username user02
exit
任何設定前面只要加上 no
就是「刪除」的意思!
參考文章: Using SSH public key authentication with Cisco
設定 RADIUS 認證與授權
我在已經設定好 VPN 相關設定的情況下,若要設定後端 RADIUS Server 驗證,可以參考以下幾種管理命令:
-
建立一個認證群組
假設我們建立一個名為 NPS
的 RADIUS 伺服器群組,且所有 RADIUS
封包一律從 GigabitEthernet0/2
介面出去!
aaa group server radius NPS
server-private {YourRadiusIP} auth-port 1812 acct-port 1813 key {YourRadiusKey}
ip radius source-interface GigabitEthernet0/2
測試 RADIUS 認證過程是否有效
test aaa group NPS {帳號} {密碼} new-code
-
設定 AAA
的套用順序
AAA = Authentication Authorization Accounting = 認證、授權、簿記
變更 ppp
認證 (VPN) 的預設群組(default
),優先使用 NPS
做身份驗證,其次才是使用 local
(本機帳號) 來進行驗證。
變更 network
授權的預設群組(default
),允許使用 NPS
登入的使用者,可以動態配置 vlan 給他們使用,其次才是給通過 local
(本機帳號) 驗證的使用者來配置。
config t
!
aaa authentication ppp default group NPS local
aaa authorization network default group NPS local
!
exit
這裡的 !
符號,只是一種分隔命令的字元,為了增加代碼的可讀性之用,本身並不會執行任何命令。
簡易 AAA 偵錯技巧
修改 VPN 登入時自動配發的 DNS 設定值
-
顯示目前有多少個 DHCP Pool
這是用來給 VPN 撥入的使用者用的 DHCP 設定
show ip dhcp pool
-
變更 DNS 設定值
進入 dhcp-config
模式
ip dhcp pool {YourPoolName}
變更該 Pool 的 DNS 設定值
dns-server 8.8.8.8 168.95.1.1
退出設定 dhcp-config
模式
exit
管理 VLAN 虛擬區域網路
這是我的另一台 Core Switch 的 Cisco 設備,因為我們有切 VLAN,所以當設備異動時,也是需要手動調整的!
-
查詢 VLAN 相關設定
show running-config | section Vlan
-
查詢 VLAN 相關資訊
show vlan
-
將特定 Core Switch PORT 切換到不同 VLAN 的方法
假設 Gi0/14
介面原本綁定到 vlan 100
,我要更換到 vlan 110
就只要輸入以下命令即可切換:
config t
!
interface Gi0/14
switchport access vlan 110
!
exit
寫入設定到 startup-config
之中
你在 Configuration mode
所做的任何設定,都會立即生效,設備完全不用重開,我們用 show running-config
命令就可以呈現目前正在運行的設定值。
其實 Cisco 的 Router 或 Switch 都有兩種儲存的地方:
-
隨機存取記憶體 (RAM
) (Random-Access Memory)
重開機後設定值就會消失
-
非揮發性記憶體 (NVRAM
) (Non-Volatile Random-Access Memory)
可以永久保存設定值
所我們還需要將這些設定值儲存到 Cisco 設備的 NVRAM
(非揮發性記憶體) 之中,你可以用 show startup-config
命令查看目前設備的啟動設定內容,很有可能是不一致的喔!
以下兩種指令是相同的,你選擇任何一種都可以:
-
將 running-config
複製到 startup-config
copy running-config startup-config
-
將 running-config
寫入到 NVRAM
記憶體
write memory
因為預設值就是 memory
,因此可以簡寫成這樣:
write
總結
Cisco 雖然貴,但真的超穩,設定好了很少出問題。Cisco IOS 使用上雖然門檻不低,強迫你使用 CLI 介面來做設定,但設定的過程可以全部指令化是我覺得最棒的部分,這樣可以非常穩定的重現各種情境問題,只要寫對了,也通常不太需要再動。
網管的知識真的太多太多了,短時間要消化這麼多東西,確實非常吃力,過程中也要一直查資料,但是當釐清背後原理與指令的宣告方式後,很多事就變的很簡單了,而且你可以很有信心的認為:「嗯,這樣設定就對了!」
相關連結