SNMP协议介绍及SNMP监控LXD端口流量

一、SNMP概述

1.1 什么是SNMP


网络设备越来越多,网络规模越来越大,管理这些设备也越来越重要。远程管理网络的需求日益迫切,SNMP 应运而生。SNMP即"简单网络管理协议",用于网络管理的协议,用于网络设备的管理。

1.2 SNMP的结构概述


SNMP被设计为工作在TCP/IP协议族上,SNMP基于TCP/IP协议工作,对网络中支持SNMP协议的设备进行管理。

1.3 SNMP的主要操作


  • Get:读取网络设备的状态信息。
  • Set:远程配置设备参数。
  • Trap:设备需要在重要状况改变的时候,管理站及时获取设备的重要信息。

1.4 SNMP总结


SNMP协议介绍及SNMP监控LXD端口流量_第1张图片

ASN.1

高级的数据描述语言。描述数据的类型、结构、组织、及编码方法。包括符号和语法两部分。SNMP使用ASN.1描述SNMP的协议数据和管理学对象信息库MIB

SMI

SNMP的描述方法。规定了使用ASN.1子类型、符号

MIB

SNMP中使用到的管理信息库。定义了数据格式、类型、顺序、意义等,使用SMI中定义的类型和ASN.1中的基本类型对对象进行描述,是一个使用SMI描述的管理信息库

OID

MIB中的每个节点都具有唯一的OID(Object Identifier),它们按照从根节点开始的分支结构排列。OID是一个由数字组成的序列,用于唯一标识MIB中的每个节点。

SNMP协议介绍及SNMP监控LXD端口流量_第2张图片

SNMP目录树的根节点开始,我们的OID为:1.3.6.1,解释如下:

  • iso(1):标注组织

  • org(3): 国际标准组织

  • dod(6): 美国国防部

  • internet(1): 国际互联网

下面是获取系统信息的常见OID简写以及对应的数字串

简写 对应数字串 涵义
sysDescr 1.3.6.1.2.1.1.1 设备描述符
sysUpTime 1.3.6.1.2.1.1.3 设备运行时间
sysName 1.3.6.1.2.1.1.5 设备名称

下面是监控网络的常见OID简写以及对应的数字串

简写 对应数字串 涵义
ifDescr 1.3.6.1.2.1.2.2.1.2 接口描述符
ifType 1.3.6.1.2.1.2.2.1.3 接口类型
ifSpeed 1.3.6.1.2.1.2.2.1.5 接口速率
ifPhysAddress 1.3.6.1.2.1.2.2.1.6 接口物理地址
ifInOctets 1.3.6.1.2.1.2.2.1.10 接口输入字节数
ifOutOctets 1.3.6.1.2.1.2.2.1.16 接口输出字节数
ifInErrors 1.3.6.1.2.1.2.2.1.14 接口输入错误数
ifOutErrors 1.3.6.1.2.1.2.2.1.20 接口输出错误数

通过如下代码即可调用

# 获取网卡进出流量
snmpget -v 2c -c public 192.168.72.20 ifInOctets.950 ifOutOctets.950

# 获取网卡进出流量
snmpget -v 2c -c public 192.168.72.20 1.3.6.1.2.1.2.2.1.10.950 1.3.6.1.2.1.2.2.1.16.950

或者使用walk命令

# 获取系统名称
snmpwalk -v 2c -c public 192.168.72.20 sysName

# 获取所有端口名称和编号的映射关系
snmpwalk -v2c -c public 192.168.72.20 1.3.6.1.2.1.31.1.1.1.1

二、流量监控

2.1 实验要求

SNMP协议介绍及SNMP监控LXD端口流量_第3张图片

  1. 搭建如下网络拓扑图,容器之间配置OSPF协议,保证可以互相访问

  2. 设置YR3为服务器端,YR1为客户端

  3. YR1访问YR3,,YR3可监控本身流量

2.2 安装工具


在服务器端YR3下载相关软件,同时设置开机自启,[注意:这里是snmpd]

apt-get install snmpd
apt-get install snmp
systemctl enable snmpd
systemctl start snmpd

2.3 配置SNMP共同体


2.3.1 共同体意义

SNMP共同体(Community)是一个简单的密码系统,用于保护SNMP的管理访问。当SNMP管理者向SNMP代理发出请求时,必须指定正确的共同体名称才能成功访问SNMP代理。如果共同体名称不正确,则SNMP代理将拒绝该请求。

SNMP代理的配置中,通常会设置多个不同的共同体名称。这些共同体名称可以具有不同的访问级别和权限。例如,可以将某些共同体名称配置为只读,而将其他共同体名称配置为读写。这样可以根据具体的管理需求来分配不同的访问权限。

2.3.2 配置共同体


在服务器端YR3中配置共同体

vi /etc/snmp/snmpd.conf

在文件末尾添加如下内容

rocommunity public

2.4 配置允许远程访问


YR3vi /etc/snmp/snmpd.conf修改配置文件,否则只能本地访问

# 大概在15行,将下面一行注释掉:
agentAddress  udp:127.0.0.1:161

重启之后查看当前状态,服务对外开启

service snmpd restart
netstat -antup | grep 161 

2.5 映射SNMP中网卡编号


SNMP协议中,端口编号通常是由设备自动生成的,端口通常使用整数编号进行标识,而不是名称。

进入YR3,获取YR3上端口的编号

# 获取所有端口名称和编号的映射关系
snmpwalk -v2c -c public 192.168.72.20 1.3.6.1.2.1.31.1.1.1.1

其中-v表示指定版本,-c表示指定共同体名称,192.168.72.20YR3ip地址

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FUhm57lt-1680491816419)(C:\Users\29973\AppData\Roaming\Typora\typora-user-images\image-20230401152045586.png)]

可以看到

# 表示eth1网卡
1.3.6.1.2.1.31.1.1.1.948

# 表示eth2网卡
1.3.6.1.2.1.31.1.1.1.950

2.6 开启流量监控


YR3中设置需要监控的流量端口,打开配置文件

vi /etc/snmp/snmpd.conf

在文件末尾添加如下内容

# 指定需要获取流量信息的网络接口
interface eth2
   # 指定传输速度
   ifSpeed 100000000
	# 指定网络接口类型,这里是以太网接口类型。
   ifType ethernetCsmacd
   # 指定网络接口的描述信息
   ifDescr "Interface_Eth2"
   # 获取网络接口的输入字节数,oid是1.3.6.1.2.1.2.2.1.10,最后的950表示eth2接口
   ifInOctets Counter32 1.3.6.1.2.1.2.2.1.10.950
   # 获取网络接口的输出字节数,oid是1.3.6.1.2.1.2.2.1.16,最后的950表示eth2接口
   ifOutOctets Counter32 1.3.6.1.2.1.2.2.1.16.950

重启服务

systemctl restart snmpd

2.7 查看流量监控


YR1YR3发送数据包,在YR3中开启端口流量监控

其中192.168.72.20YR3ip地址,ifInOctets.950ifOutOctets.950分别指定了输入和输出流量的OID(即在2.6中的定义)

snmpwalk -v 2c -c public 192.168.72.20 ifInOctets.950 ifOutOctets.950

2.8 碰到的问题


2.8.1 问题一


问题描述

访问出错无法获得流量,无法识别有效的自定义标识符

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Y2mmLJT-1680491816420)(C:\Users\29973\AppData\Roaming\Typora\typora-user-images\image-20230401162829040.png)]

解决办法

通过下载第三方的解析库来实现标识符的转换

进入服务器端YR3,下载第三方库

apt-get install snmp-mibs-downloader

在服务器端YR3修改配置文件vi /etc/snmp/snmp.conf

# 注释掉下面这一行
mibs :

重启服务

service snmpd restart

再次监控流量即可

snmpwalk -v 2c -c public 192.168.72.20 ifInOctets.950 ifOutOctets.950

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eR5Kn2iD-1680491816420)(C:\Users\29973\AppData\Roaming\Typora\typora-user-images\image-20230401164609600.png)]

2.8.2 问题二


问题描述

只能监控进或者出的流量,而不能同时监控两个

解决办法

snmpwalk只支持输出第一个参数的流量结果,将其替换为snmpget即可监控进出流量

snmpget -v 2c -c public 192.168.72.20 ifInOctets.950 ifOutOctets.950

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GF6AMSfR-1680491816421)(C:\Users\29973\AppData\Roaming\Typora\typora-user-images\image-20230401165732650.png)]

2.8.2 问题三


问题描述

每次输入的命令只能监控当前时刻流量,如何持续监控

解决办法

配合脚本文件实现

vi getFlow.sh

添加如下内容

#!/bin/bash

# 定义监控流量进出的命令
InFlow="snmpget -v 2c -c public 192.168.72.20 ifInOctets.950"
OutFlow="snmpget -v 2c -c public 192.168.72.20 ifOutOctets.950"

# 定义存放日志位置
logFile="/root/Flow.log"

# 循环获5次流量
for((i=1;i<=5;i++))
do
    # 获取进入流量和出去流量,$NF表示获取最后一列(即获取流量大小)
    in_bytes=$($InFlow | awk '{print $NF}')
    out_bytes=$($OutFlow | awk '{print $NF}')

        # 将流量信息写入日志文件
    echo "$(date +%Y-%m-%d\ %H:%M:%S) - In: $in_bytes bytes, Out: $out_bytes bytes" >> $logFile

    # 等待3秒再次获取流量信息
    sleep 3
done
echo "流量监控完毕,请查看日志文件,日志文件位置如下:$logFile"

运行截图如下

SNMP协议介绍及SNMP监控LXD端口流量_第4张图片

你可能感兴趣的:(网络虚拟化,网络,服务器,运维)