網路 AIOpsNOTE

SNMP(簡單網路管理協定)

SNMP(Simple Network Management Protocol)讓監控系統以一致的方式讀取設備狀態、接收事件通知,也能在授權範圍內修改部分設定。理解它的關鍵是:Manager 向 Agent 查詢 OID,MIB 定義這些 OID 的意義。

1. 用來解決什麼問題?

企業網路可能包含不同廠牌的交換器、路由器、防火牆、伺服器、印表機與 UPS。SNMP 提供共同的管理介面,讓集中監控系統取得設備資訊;實際可讀取哪些指標,仍取決於設備的 Agent 與 MIB 支援。

常見用途包括介面流量、連線狀態、錯誤封包數,以及設備提供的 CPU、記憶體、溫度或耗材資訊。它是管理協定,本身不負責保存歷史資料、畫圖或執行告警規則;這些工作由監控平台完成。SNMP 架構:RFC 3411

2. 架構與重要名詞

名詞說明
Manager / NMSNetwork Management System,發送查詢並處理監控結果的管理端
Agent運行於被管理設備上的服務,提供管理物件的值並處理請求
Managed Object可被管理的資訊,例如設備名稱或介面累積位元組數
OIDObject Identifier,物件在樹狀命名空間中的唯一識別碼
MIBManagement Information Base,管理資訊的邏輯集合;MIB module 定義物件名稱、型別、存取權限與意義
SMIStructure of Management Information,定義 MIB 的描述規則
VarBind一組 OID 與值;一個訊息可以攜帶多組

MIB 可類比為「欄位規格書」,OID 是「欄位地址」,Agent 回傳的是「當下的欄位值」。下載 MIB 檔案能幫工具解讀名稱與型別,但不會讓設備突然支援新的物件。SMIv2:RFC 2578

flowchart LR
    N[Manager/監控平台] -->|GET/GETNEXT/GETBULK/SET| A[設備上的 Agent]
    A -->|Response| N
    A -->|Trap/Inform| N
    M[MIB module:物件規格] -.-> N

3. OID 怎麼讀?

OID 是由數字組成的階層式路徑,例如 1.3.6.1.2.1.1.5.0 對應 SNMPv2-MIB::sysName.0。

  • 1.3.6.1.2.1:常見標準管理物件所在的 mib-2 子樹。
  • 1.3.6.1.4.1:enterprises,廠商私有物件所在的子樹。
  • 純量物件(scalar)的實例通常以 .0 結尾。
  • 表格物件的實例以索引結尾;索引可能是一個介面編號,也可能由多個欄位組成。

例如介面欄位 ifDescr 的某筆資料可能是 ifDescr.2;這裡的 2 是 ifIndex,不能直接假設它等於機殼上的第 2 個實體連接埠。SMIv2 定義、IF-MIB:RFC 2863

常見物件

物件數字 OID(欄位或實例)用途
sysDescr.01.3.6.1.2.1.1.1.0系統描述
sysObjectID.01.3.6.1.2.1.1.2.0廠商定義的管理系統識別
sysUpTime.01.3.6.1.2.1.1.3.0網路管理部分自上次重新初始化起經過的時間
sysName.01.3.6.1.2.1.1.5.0管理上指定的設備名稱
ifDescr1.3.6.1.2.1.2.2.1.2介面描述,查單筆需加索引
ifOperStatus1.3.6.1.2.1.2.2.1.8介面運作狀態,查單筆需加索引
ifHCInOctets1.3.6.1.2.1.31.1.1.1.664-bit 累積接收位元組數
ifHCOutOctets1.3.6.1.2.1.31.1.1.1.1064-bit 累積傳送位元組數

sysUpTime 的單位是百分之一秒,且不一定等於作業系統開機時間;例如 Agent 重新初始化也可能使它重新計時。系統物件:RFC 3418、介面物件:RFC 2863

4. 操作與資料交換

操作功能使用情境
GET讀取指定物件實例查設備名稱、特定介面計數器
GETNEXT取得 OID 字典序中的下一個可存取物件逐步遍歷子樹或表格
GETBULK批次取得後續物件,v2c/v3 可用減少大量查詢的來回次數
SET寫入可寫物件修改設備允許透過 SNMP 設定的欄位
Response回覆請求結果或錯誤GET、SET 或 Inform 的回覆
Trap主動送出事件通知,不要求確認回覆介面狀態變化等事件
Inform要求接收端回覆確認的通知需要確認通知有被收到的情境

snmpwalk 是工具的遍歷行為,通常反覆使用 GETNEXT;snmpbulkwalk 則使用 GETBULK。它們不是名為 WALK 的協定操作。SET 也不能任意修改所有設定,必須同時符合物件可寫性與存取權限。操作定義:RFC 3416

Polling 與通知怎麼搭配?

方式優點限制
Polling(定期查詢)產生連續數值與趨勢兩次查詢之間可能漏掉短暫變化
Trap可在事件發生時快速送出沒有確認回覆,封包遺失可能無法察覺
Inform有確認機制,可依實作重試增加狀態保存與傳輸成本,仍不保證最終送達

實務上可用 Polling 收集指標,用 Trap/Inform 補充事件;不要因為沒有收到 Trap,就認定設備正常。Cisco:SNMP 通知與輪詢、Cisco:Inform 確認機制

通訊埠

常見部署使用 UDP:Agent 在 161 接收查詢,通知接收端通常在 162 接收 Trap/Inform。Manager 的查詢來源埠通常是臨時埠,Response 回到原來源埠。UDP 不提供可靠傳輸,查詢端須處理逾時與重試。傳輸映射:RFC 3417

5. SNMPv1、v2c、v3 的差異

項目SNMPv1SNMPv2cSNMPv3(常見 USM 模型)
存取/安全機制Community stringCommunity string使用者與可設定的驗證、加密
訊息加密無無可啟用
GETBULK不支援支援支援
Counter64不支援支援支援
Inform不支援支援支援

v2c 改善資料操作,但沒有解決 Community string 明文傳送的問題。v3 在既有管理操作外加入安全框架;實際安全性取決於設定,使用 v3 不代表一定加密。RFC 3416、USM:RFC 3414、Cisco:SNMP 安全設定

SNMPv3 安全層級

層級訊息驗證與完整性保護內容加密
noAuthNoPriv無無
authNoPriv有無
authPriv有有

USM(User-based Security Model)負責使用者安全機制;存取控制可透過 VACM(View-based Access Control Model)限定可讀、可寫及可通知的物件範圍。Engine ID 用來識別 SNMP engine,並參與 USM 金鑰處理;複製設定或更換設備後須留意它與使用者金鑰的關係。RFC 3414、SNMP 框架:RFC 3411

新部署優先採用 authPriv,在設備與工具共同支援下選擇 SHA-2 驗證及 AES 加密;演算法名稱與支援範圍應查實際產品文件。避免直接沿用舊教學的 MD5/DES 組合。SHA-2:RFC 7860、AES:RFC 3826

6. 如何把計數器變成流量?

ifHCInOctets 是累積值,不是即時速率。以下是以兩次量測計算平均接收速率的範例:

接收速率(bit/s)=(第二次計數值 − 第一次計數值)× 8 ÷ 間隔秒數

第一次:1,000,000,000 bytes
60 秒後:1,750,000,000 bytes

速率 = 750,000,000 × 8 ÷ 60
     = 100,000,000 bit/s = 100 Mbps

若介面容量為 1 Gbps,這段時間的接收方向平均使用率是 10%。全雙工介面應分別看收、送方向,不宜直接相加後視為單一方向使用率。

判讀時注意計數器回繞、設備重啟與計數器重設;高速介面宜使用 64-bit 計數器,並檢查 ifCounterDiscontinuityTime。介面索引也可能隨設備變動,應搭配名稱與描述確認對應關係。IF-MIB:RFC 2863

7. Net-SNMP 指令入門

以下是操作範例,未對任何設備執行。192.0.2.10 是示例位址,使用前要替換成自己的設備;需先安裝 Net-SNMP 工具並設定設備端存取權限。

v2c:理解 GET 與 WALK

# 讀取設備名稱;將示例 Community 替換成設備設定
snmpget -v2c -c 'EXAMPLE_READ_ONLY_COMMUNITY' 192.0.2.10 1.3.6.1.2.1.1.5.0

# 遍歷 system 子樹
snmpwalk -v2c -c 'EXAMPLE_READ_ONLY_COMMUNITY' 192.0.2.10 1.3.6.1.2.1.1

v2c 範例適合理解語法或受控舊設備環境;新部署優先使用 v3。Net-SNMP:snmpget 教學

v3:驗證與加密

# 假設雙方皆支援 SHA-256 與 AES,且使用者已在設備建立
snmpget -v3 -l authPriv -u monitor_user \
  -a SHA-256 -A 'EXAMPLE_AUTH_PASSPHRASE' \
  -x AES -X 'EXAMPLE_PRIV_PASSPHRASE' \
  192.0.2.10 1.3.6.1.2.1.1.5.0
參數意義
-v協定版本
-cv1/v2c Community string
-lv3 安全層級
-uv3 使用者名稱
-a、-A驗證演算法、驗證密語
-x、-X加密演算法、加密密語

演算法是否可用取決於 Net-SNMP 的版本、編譯選項與設備支援。正式使用時避免把真實密語直接留在命令歷史或程序參數中,可改用權限受限的工具設定檔。數字 OID 可避免名稱解析依賴;使用符號名稱時則需載入對應 MIB。Net-SNMP:指令參數文件

8. 部署與排錯重點

以下為依上述協定特性整理的實務檢查順序:

  1. 確認設備支援:Agent 是否啟用、支援哪些版本與 MIB。
  2. 確認存取權限:優先唯讀;設定必要的 OID view 與管理來源限制。
  3. 確認網路路徑:檢查管理網路、ACL、防火牆及回程路由;Polling 和通知的方向不同。
  4. 先查單一物件:用 sysName.0 驗證,再遍歷必要子樹。
  5. 確認指標語意:單位、型別、索引、計數器重設與缺值處理。
  6. 調整收集負載:依需求設定間隔與 GETBULK 大小,避免頻繁走訪整個 OID 樹。
  7. 驗證通知:接收端能辨識 OID、保留事件,並實際測試通知是否送達。
現象優先檢查
TimeoutAgent、位址、ACL、網路、版本與憑證;設備可能直接丟棄未授權請求
noSuchObject/noSuchInstance物件支援、view 權限、純量 .0 與表格索引
Unknown Object Identifier本機 MIB 載入與名稱拼法;先用數字 OID 隔離問題
查詢成功但沒有 Trap設備通知目的地、事件啟用設定、接收端 UDP 162 與通知憑證
流量突然出現尖峰計數器重設/回繞、時間間隔、單位或介面對應
v3 驗證失敗使用者、密語、演算法、安全層級、Engine ID 與 context

管理介面應限制在受控網路,避免暴露於公開網際網路;舊設備使用 v2c 時,尤其需要來源限制與隔離。Cisco:SNMP 安全實務

9. 常見誤解與記憶重點

  • MIB 不是歷史監控資料庫:它描述管理資訊;歷史值由監控平台保存。
  • OID 不是 IP 位址:OID 指定物件,IP 指定設備所在的網路位置。
  • v3 不一定加密:需選擇 authPriv 並正確設定。
  • Trap 不取代 Polling:事件通知與週期性指標收集互相補充。
  • 累積 bytes 不等於 bytes/s:需取差值,再除以量測間隔。
  • SNMP 也能寫入:SET 的效果取決於物件定義、Agent 實作與授權。

建議學習順序:Manager/Agent → MIB/OID → GET 與 WALK → Polling/Trap/Inform → v3 安全 → 計數器與監控判讀。

整理日期:2026-10-01。標準與實作來源已附於各節;指令為示例,未進行設備連線驗證。


相關筆記