一、測試環境:
在VMware上安裝兩台Centos7系統,分別在其系統上安裝snmp服務,如下圖:

二、更新centos7的yum源和安裝snmp軟件包
1.更新yum源
yum clean all

yum makecache

yum repolist

2.yum源安裝snmp服務
yum -y install net-snmp net-snmp-utils

3.查看snmp版本號
snmp -v

4.查看net-snmp相關的軟件包(可看可不看)

注意:net-snmp.x86_64、net-snmp-utils.x86_64一個是net-snmp軟件包,另一個是snmp的工具包。
5.查看安裝的軟件包
rpm -qa |grep net-snmp*

三、修改snmpd.confi配置文件
vi /etc/snmp/snmpd.conf,這個是Centos7_1的配置

Centos7_2的配置

四、重啟服務
systemctl start snmpd.service #啟動SNMP服務
systemctl enable snmpd.service #開機啟動SNMP服務

五、添加防火牆端口
firewall-cmd --state # 查看防火牆狀態

如果沒有啟動則輸入:systemctl start firewall
firewall-cmd --list-all

如果上圖所示的端口,則需要額外添加這一行:<port protocol="udp" port="161"/>,注意用空格隔開
vi /etc/firewall/zones/public.xml

systemctl restart firewalld.service #重啟防火牆服務
firewall-cmd --list-all,可以查看到已經添加了的161端口
systemctl restart snmpd.service #重啟snmp服務,注意的是當修改了配置文件snmpd.service時,需要重啟才能生效

六、net-snmp測試
在配置net-snmp時候,配置了三種情況:本地通過localhost訪問、本地通過IP訪問、遠程通過IP測試
1.本地通過localhost訪問,在各自的Centos7下測試

2.通過IP測試


3.通過遠程IP測試
在Centos7_1獲取Centos7_2(SNMP Agent)的設備的描述信息,snmpget -v 2c -c public 192.168.150.158 sysDescr.0,證明已經通過了測試

七、SNMP的部分原理
SNMP協議主要由兩大部分構成:SNMP管理站和SNMP代理。SNMP管理站是一個中心節點,負責收集各個SNMP元素的信息,並對這些信息進行處理,最后反饋給網絡管理員;而SNMP代理是運行在各個被管理的網絡節點上,負責統計該節點的各項信息,並且負責與SNMP管理站交互,接收並執行管理站的命令,上傳各種本地的網絡信息。SNMP管理站和SNMP代理是通過UDP協議完成的。
SNMP的工作方式是:管理員需要向設備獲取數據,所以SNMP提供了"讀"操作;管理員需要向設備執行設置操作,所以SNMP提供了“寫”操作。設備需要在重要狀況改變的時候,向管理員通報時間的發生,所以SNMP提供了“Trap”操作
SNMP采用UDP協議在管理端和agent之間傳輸信息。 SNMP采用UDP 161端口接收和發送請求,162端口接收trap,執行SNMP的設備缺省都必須采用這些端口。SNMP消息全部通過UDP端口161接收,只有Trap信息采用UDP端口162。
SNMP的實現結構:

管理站與代理端通過MIB進行接口統一,MIB定義了設備中的被管理對象。管理站和代理都實現了相應的MIB對象,使得雙方可以識別對方的數據,實現通信。管理站向代理申請MIB中定義的數據,代理識別后,將管理設備提供的相關狀態或參數等數據轉換為MIB定義的格式,應答給管理站,完成一次管理操作。
管理信息(MIB)庫可以理解成為agent維護的管理對象數據庫,MIB中定義的大部分管理對象的狀態和統計信息都可以被NMS訪問。MIB是一個按照層次結構組織的樹狀結構,每個被管對象對應樹形結構的一個葉子節點,稱為一個object,擁有唯一的數字標識符。每一個節點都有一個對象標識符(OID)來唯一的標識,每個節點用數字和字符兩種方式顯示,其中對象標識符OID是由句點隔開的一組整數,也就是從根節點 通向它的路徑。一個帶標號節點可以擁有包含其它帶標號節點作為它的子樹,如果沒有子樹,它就是葉子節點,它包含一個值並被稱為對象。比如網絡設備名的oid 是.1.3.6.1.2.1.1.5.0,其值為設備名稱的字符串。
八、常用的SNMP工具
1.snmpget模擬snmp的GetRequest操作的工具,用來獲取一個或幾個管理信息,比如:snmpget -v 2c -c public localhost system.sysDescr.0 #獲取設備的描述信息。注,snmpget 不同於 snmpwalk ,必須在命令行給出 <object>.<instance> 的格式,不能只給出 object。
snmpget命令 snmpget [OPTIONS] AGENT OID [OID]... 選項: -v 1|2c|3 指定SNMP版本 -c COMMUNITY 指定community string -m MIB[:...] 指定MIB文件
2.snmpwalk/snmpbulkwalk,利用GetNextRequest/對給定的管理樹進行遍歷的工具。一般用來對表格類型管理信息進行遍歷。注,snmpbulkwalk命令: 獲取snmp服務器的mib-2各種資訊,snmpbulkwalk用於通過SNMPv2 的SNMP GET BULK請求命令與其它網絡實體通信,只能用於snmpv2,速度快於snmpwalk。比如:snmpbulkwalk -v 2c -c public 127.0.0.1 .1.3.6.1.2.1.1 #獲取mib-2的system的數據。
3.snmpwalk,獲取snmp服務器的HOST-RESOURCES的各種資訊。例如:snmpwalk -v 2c -c public localhost system #這條指令用於查看本機系統信息。
4.snmpnetstat命令,查看snmp服務器的端口連接信息, 協議為snmp 2c,例如:snmpnetstat -v 2c -c public -Can -Cp tcp 127.0.0.1 #獲取127.0.0.1的TCP協議的開放端口狀態
5.snmpset 模擬snmp的SetRequest操作的工具。用來設置可以寫的管理信息。一般用來配置設備或對設備執行操作。
九、本地測試
驗證CPE本地SNMP代理功能是否正常,具體的結構測試圖如下:

在windos10上安裝snmptester作為一個有界面的NMS,在Centos7上安裝一個snmp服務器,CPE上啟動snmp代理,具體如下。
驗證windows10與CPE的snmp功能:

CPE的配置

snmptester的配置及效果
驗證centos7與CPE的SNMP功能:

CPE配置

centos7的測試代碼及效果
十、卸載centos7的snmp協議
查看安裝了那幾個snmp包:rpm -qa|grep snmp

依次刪除:rpm -e net-snmp-utils-5.7.2-33.el7_5.2.x86_64 --nodeps

十、參考連接
https://blog.csdn.net/lqy461929569/article/details/79881269
https://www.cnblogs.com/xdp-gacl/p/3978825.html
https://wenku.baidu.com/view/cf0efc335a8102d276a22f6d.html?sxts=1541989059623
