The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

第一次把玩 Cisco Router 就上手:基本 IOS 命令列環境學習筆記

這幾天都在跟公司的 Cisco Router 奮戰,以前並沒有什麼機會去管理這台設備,但最近由於公司內部有些 IT 設備異常,不得不進去調整一下設定,也藉此學習 Cisco IOS (Internetwork Operating System) 的 CLI 命令列介面。今天這篇文章我就來整理這幾天的小小心得。

Cisco 2951

由於我手邊的 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 modeConfiguration mode 了!

  1. 進入 Configuration mode (或稱 Global Configuration mode)

    configure terminal
    

    或可打簡寫

    config t
    

    Cisco IOS 的命令與參數都可以打簡寫,只要簡寫的程度不會跟相同模式與相同命令下的參數重複,最少可以只打一個字母就能執行,所以上述命令也可以打成 conf t 就好。如下圖示說明完整的操作情境!

    image

  2. 退出 Configuration mode

    你可以按下 Ctrl+Z 快速鍵,即可立即退出 Configuration mode,也可以輸入 endexit 退出該模式。

    退出到上一層模式

    exit
    

    退出到最上層模式 (使用者模式特權模式)

    end
    
  3. 退出 Cisco IOS 的 CLI 環境

    這部分跟一般 Linux 一樣,輸入 exitlogout 就可以退出

    exit
    
    logout
    

除此之外,有時候我們也會選擇在 User EXEC modePrivileged EXEC mode 這兩種模式之間切換!

由於 Cisco IOS 有 0 ~ 15 共 16 個權限等級(privilege level)可以設定,不同的權限等級代表你可以執行的命令數量不同,控制你可以看到的或修改的設定。基本上權限等級 0 代表「無權限」,而 1 代表「不含機敏資料的唯讀權限」,而 15 則代表「最高權限」。

所以你可以透過 enabledisable 命令來切換不同的執行模式(EXEC mode),而 enable 15 就是 Privileged EXEC mode,其他的權限等級都算 User EXEC mode

  1. 設定 enable 密碼

    不是所有的 Cisco 設備都會設定所謂的 enable 密碼,因為如果你已經建立好權限等級 15 的本機帳號,登入後基本上就已經進入 Privileged EXEC mode 模式,從這個模式開始就已經可以對整台電腦進行完整的設定與管理。

    然後,有些網管人員習慣都以非管理者帳號登入,需要的時候才透過 enable 命令進入 Privileged EXEC mode 模式,此時你就要先設定好這個 enable 密碼,以下是設定步驟:

    config t
    enable secret {你的高強度密碼}
    exit
    write
    

    最後一步 write 命令是將目前的設定寫入設備,當設備重啟時就會套用當前的設定。

  2. 使用 enable 命令進入 Privileged EXEC mode 模式

    enable
    

    這裡的 enable 命令等同於 enable 15 命令,就是變身為最高權限管理者的意思,也等同於要進入 Privileged EXEC mode 模式,輸入此命令要立即輸入 enable 密碼!

  3. 使用 disable 命令進入 User EXEC mode 模式

    disable
    

    這裡的 disable 命令等同於 enable 0 命令,就是變身為完全無權限的使用者的意思,也等同於要進入 User EXEC mode 模式!

    從較高的權限等級進入較低的權限等級時,輸入 enable <n> 命令時是不用輸入密碼的。

操作 Cisco IOS 的基本步驟如下:

  1. 進入 User EXEC mode
  2. 進入 Privileged EXEC mode
  3. 進入 Global Configuration mode
  4. 進入 Specific Configuration modes
  5. 進入 Configuration submodes
  6. 進入 Configuration subsubmodes
  7. ... 以此類推 ...

總之,你就是在這些模式之間切換,然後輸入命令、進行設定、查詢狀態、...等等。

查詢設備狀態與設定

剛開始維護 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 給 sectioninclude 來篩選出需要的設定,以下是取得關鍵字中有出現 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 公開金鑰設定到設備之中,以下是設定步驟:

  1. 先取得你的 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
    
  2. 設定 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
    

如果要刪除使用者的公開金鑰綁定,可以這樣設定:

  1. 進入 Configuration mode (或稱 Global Configuration mode)

    conf t
    
  2. 透過以下設定刪除 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 偵錯技巧

  • 對 AAA 進行認證與授權的偵錯

    debug aaa authentication
    debug aaa authorization
    
  • 將偵錯訊息顯示在 Terminal 上

    terminal monitor
    

    此時你透過 VPN 撥入時的所有認證與授權資訊,全部都會顯示在 Terminal 畫面上!👍

修改 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 都有兩種儲存的地方:

  1. 隨機存取記憶體 (RAM) (Random-Access Memory)

    重開機後設定值就會消失

  2. 非揮發性記憶體 (NVRAM) (Non-Volatile Random-Access Memory)

    可以永久保存設定值

所我們還需要將這些設定值儲存到 Cisco 設備的 NVRAM (非揮發性記憶體) 之中,你可以用 show startup-config 命令查看目前設備的啟動設定內容,很有可能是不一致的喔!

以下兩種指令是相同的,你選擇任何一種都可以:

  1. running-config 複製到 startup-config

    copy running-config startup-config
    
  2. running-config 寫入到 NVRAM 記憶體

    write memory
    

    因為預設值就是 memory,因此可以簡寫成這樣:

    write
    

總結

Cisco 雖然貴,但真的超穩,設定好了很少出問題。Cisco IOS 使用上雖然門檻不低,強迫你使用 CLI 介面來做設定,但設定的過程可以全部指令化是我覺得最棒的部分,這樣可以非常穩定的重現各種情境問題,只要寫對了,也通常不太需要再動。

網管的知識真的太多太多了,短時間要消化這麼多東西,確實非常吃力,過程中也要一直查資料,但是當釐清背後原理與指令的宣告方式後,很多事就變的很簡單了,而且你可以很有信心的認為:「嗯,這樣設定就對了!」

相關連結