見出し画像

MIB-IIによるネットワーク管理(TCP,UDP,EGP,SNMP編)

MIB--IIによるネットワーク管理の続きです。

TCPグループ

TCPグループは、TCP層の管理情報を提供するグループです。

実践SNMP教科書原稿
+--tcp(6)
   |
   +-- -R-- EnumVal   tcpRtoAlgorithm(1)
   |        Values: other(1), constant(2), rsre(3), vanj(4)
   +-- -R-- INTEGER   tcpRtoMin(2)
   +-- -R-- INTEGER   tcpRtoMax(3)
   +-- -R-- INTEGER   tcpMaxConn(4)
   +-- -R-- Counter   tcpActiveOpens(5)
   +-- -R-- Counter   tcpPassiveOpens(6)
   +-- -R-- Counter   tcpAttemptFails(7)
   +-- -R-- Counter   tcpEstabResets(8)
   +-- -R-- Gauge     tcpCurrEstab(9)
   +-- -R-- Counter   tcpInSegs(10)
   +-- -R-- Counter   tcpOutSegs(11)
   +-- -R-- Counter   tcpRetransSegs(12)
   |
   +--tcpConnTable(13)
   |  |
   |  +--tcpConnEntry(1)
   |     |  Index: tcpConnLocalAddress, tcpConnLocalPort, tcpConnRemAddress,
   |     |         tcpConnRemPort
   |     |
   |     +-- -RW- EnumVal   tcpConnState(1)
   |     |        Values: closed(1), listen(2), synSent(3), synReceived(4),
   |     |                established(5), finWait1(6), finWait2(7),
   |     |                closeWait(8), lastAck(9), closing(10), timeWait(11),
   |     |                deleteTCB(12)
   |     +-- -R-- IpAddr    tcpConnLocalAddress(2)
   |     +-- -R-- INTEGER   tcpConnLocalPort(3)
   |     |        Range: 0..65535
   |     +-- -R-- IpAddr    tcpConnRemAddress(4)
   |     +-- -R-- INTEGER   tcpConnRemPort(5)
   |              Range: 0..65535
   |
   +-- -R-- Counter   tcpInErrs(14)
   +-- -R-- Counter   tcpOutRsts(15)
   |
   +--ipv6TcpConnTable(16)
      |
      +--ipv6TcpConnEntry(1)
         |  Index: ipv6TcpConnLocalAddress, ipv6TcpConnLocalPort,
         |         ipv6TcpConnRemAddress, ipv6TcpConnRemPort,
         |         ipv6TcpConnIfIndex
         |
         +-- ---- String    ipv6TcpConnLocalAddress(1)
         |        Textual Convention: Ipv6Address
         |        Size: 16
         +-- ---- INTEGER   ipv6TcpConnLocalPort(2)
         |        Range: 0..65535
         +-- ---- String    ipv6TcpConnRemAddress(3)
         |        Textual Convention: Ipv6Address
         |        Size: 16
         +-- ---- INTEGER   ipv6TcpConnRemPort(4)
         |        Range: 0..65535
         +-- ---- Integer32 ipv6TcpConnIfIndex(5)
         |        Textual Convention: Ipv6IfIndexOrZero
         |        Range: 0..2147483647
         +-- -RW- EnumVal   ipv6TcpConnState(6)
                  Values: closed(1), listen(2), synSent(3), synReceived(4),
                          established(5), finWait1(6), finWait2(7),
                          closeWait(8), lastAck(9), closing(10), timeWait(11),
                          deleteTCB(12)

TCPグループのMIBは、以下のように分類できます。
①TCP層の設定値
TCP層の再送アルゴリズムや再送回数、最大コネクション数などを取得することができます。
②TCP層の通信統計情報
TCP層のコネクションの開設数や、送受信セグメント数、再送セグメント数などの通信統計情報を取得できます。

実践SNMP教科書
TCPグループの情報取得例
TCPグループの情報取得例(TWSNMP FC)

また、TWSNMP FCのバグを見つけました。tcpMacConn.0は-1と表示するべきです。
NET-SNMPでは

RFC1213-MIB::tcpRtoAlgorithm.0 = INTEGER: other(1)
RFC1213-MIB::tcpRtoMin.0 = INTEGER: 200
RFC1213-MIB::tcpRtoMax.0 = INTEGER: 120000
RFC1213-MIB::tcpMaxConn.0 = INTEGER: -1
RFC1213-MIB::tcpActiveOpens.0 = Counter32: 536589
RFC1213-MIB::tcpPassiveOpens.0 = Counter32: 1367649
RFC1213-MIB::tcpAttemptFails.0 = Counter32: 4
RFC1213-MIB::tcpEstabResets.0 = Counter32: 1230735
RFC1213-MIB::tcpCurrEstab.0 = Gauge32: 13
RFC1213-MIB::tcpInSegs.0 = Counter32: 16945153
RFC1213-MIB::tcpOutSegs.0 = Counter32: 13869413
RFC1213-MIB::tcpRetransSegs.0 = Counter32: 502

です。

③TCPコネクションテーブルの情報
管理対象ノードにおいてnestatコマンドで表示可能な、TCPのコネクションテーブルは、tcpConnTableから取得することができます。最近では、IPv6対応のipv6TcpConnTableが実装されている場合もあります。
tcpConnTableには、接続されたTCPコネクションの他、サーバとして接続を受け付けるためにオープンしているポートも一覧されます。この情報により、サーバ機能の動作検出も可能です。例えば、WEBサーバノードでは、tcpConnTableに80番のポートがLISTEN状態で登録されているはずです。登録されていなければ、WEBサーバが停止していることがわかります。

実践SNMP教科書原稿
tcpConnTableの取得例
tcpConnTableの取得例(TWSNMP FC)

コラム:IPv6対応
SNMPのPDUやメッセージのレベルで、IPv6対応の変更は、必要ありません。トランスポート層へのマッピングで、宛先のアドレスをIPv6アドレスに対応する点と、tcpConnTableやudpTableなどのように、IpAddress型のデータタイプを使用しているMIBをIPv6対応に変更する点が必要です。

実践SNMP教科書原稿

このコラムの話は、その後どうなったかというと、IPv6用のコネクションテーブルのMIBは定義されています。

IPv6用のTCPコネクションテーブルのMIB

しかし、NET-SNMPには実装されていません。
そのかわり、IPv4とIPv6の両方に対応したTCPのコネクションテーブルのMIBに対応しています。

tcpConnectionTable
tcpConnectionTableの取得例

接続したいるノードのIPアドレスがインデックスになっています。
接続待ち(Listen)状態だけのテーブルも定義されています。

tcpListenerTableの取得例

UDPグループ

UDPグループは、UDP層の管理情報を提供します。

実践SNMP教科書
+--udp(7)
   |
   +-- -R-- Counter   udpInDatagrams(1)
   +-- -R-- Counter   udpNoPorts(2)
   +-- -R-- Counter   udpInErrors(3)
   +-- -R-- Counter   udpOutDatagrams(4)
   |
   +--udpTable(5)
   |  |
   |  +--udpEntry(1)
   |     |  Index: udpLocalAddress, udpLocalPort
   |     |
   |     +-- -R-- IpAddr    udpLocalAddress(1)
   |     +-- -R-- INTEGER   udpLocalPort(2)
   |              Range: 0..65535
   |
   +--ipv6UdpTable(6)
      |
      +--ipv6UdpEntry(1)
         |  Index: ipv6UdpLocalAddress, ipv6UdpLocalPort, ipv6UdpIfIndex
         |
         +-- ---- String    ipv6UdpLocalAddress(1)
         |        Textual Convention: Ipv6Address
         |        Size: 16
         +-- ---- INTEGER   ipv6UdpLocalPort(2)
         |        Range: 0..65535
         +-- -R-- Integer32 ipv6UdpIfIndex(3)
                  Textual Convention: Ipv6IfIndexOrZero
                  Range: 0..2147483647

UDPグループのMIBは、以下のように分類できます。

①UDP層の通信統計情報
UDPパケットの送受信量や、エラーパケットの受信量を取得するためのMIBです。

実践SNMP教科書原稿
UDP層の通信統計情報取得例


UDP層の通信統計情報取得例

②UDPのポート管理テーブル
UDPパケットを受け付けるためにオープンしているポートの一覧を取得できます。従来からあるIPv4用のudpTableと新しいIPv6用のipv6UdpTableがあります。

実践SNMP教科書原稿
udpTableの取得例
udpTableの取得例(TWSNMP FC)

udpの場合もIPv6は、専用のテーブルは実装されていません。両方に対応したudpEndpointTableが利用できます。

udpEndpointTableの取得例

EGPグループ

EGPグループは、ルーティングプロトコルのEGPをサポートしたルータのみが実装するMIBです。サーバやクライアントPC、ローカルに設置されたルータでは、必要ないため、標準MIBとして定義されていますが、実装していないエージェントが多いです。

実践SNMP教科書原稿

SNMPグループ

SNMPグループは、SNMPプロトコル自身の管理のためのMIBです。SNMPマネージャからの監視では使用されることはほとんどありません。主に、SNMPエージェントの試験時にSNMPの通信量を測定するために使用されます。snmpEnableAuthenTrapsの設定によって、不正なマネージャからのアクセスをTRAPで正当なマネージャに伝える機能のON/OFFができます。

実践SNMP教科書原稿


SNMPグループの取得例

ここから先は

33字
SNMPの仕様について解説した本やサイトは、沢山あると思います。 独自の拡張MIBを自分で設計してMIBファイルやエージェントを作る方法を解説した教科書はないと思います。

20年近く前に書いた「実践SNMP教科書」を現在でも通用する部分だけ書き直して復刻するマガジンです。最近MIBの設計で困っている人に遭遇し…

開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。