26.03.2012

IPv6, SNMP и Cacti.

Для «общения» с Cisco через IPv6 udp:161 ничего дополнительно конфигурировать не приходится. Ну, разве что, отфильтровать (разрешить) доступ только с определенных адресов:

Пусть у IPv6-роутера на одном из интерфейсов будет сконфигурирован адрес 2001:db8::4:5, а у веб-сервера 2001:db8::4:1

Конфигурируем на роутере именованный access-list:

ipv6 access-list SNMPv6
 permit ipv6 2001:db8::/64 any

(для простоты ограничиваемся только адресами, в строгом случае можно добавить фильтрацию по udp:161)

Затем добавляем к конфигурации роутера:

snmp-server community ROcomm RO 1
snmp-server community ROcomm RO ipv6 SNMPv6

(для фильтрации IPv4-доступа использовался ACL 1)

Одна странность: строки нужно добавлять именно в таком порядке, иначе почему-то остается только одна.

Проверяем через snmpstatus с веб-сервера:

$ snmpstatus -v1 -c ROcomm udp6:[2001:db8::4:5]:161 sysdescr
[UDP/IPv6: [2001:db8::4:5]:161]=>[Cisco IOS Software, 7200 Software (C7200P-ADVENTERPRISEK9-M), Version 12.4(15)T9, RELEASE SOFTWARE (fc5)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2009 by Cisco Systems, Inc.
Compiled Tue 28-Apr-09 20:04 by prod_rel_team] Up: 116 days, 1:46:32.90
Interfaces: 7, Recv/Trans packets: -167019488/180529790 | IP: 1268718610/91744719
2 interfaces are down!

ОК, работает!

Переходим к Cacti:
поскольку там все написано на PHP, то достаточно сконфигурировать веб-сервер для работы с IPv6 и не забыть про файервол.
Затем обычным путем создаем новый хост. Единственное отличие — в качестве адреса нового хоста в поле hostname вводим такую комбинацию:
udp6:[2001:db8::4:5]
..остальное — как обычно..

Сохраняем, ждем 10 минут, наблюдаем за работой через tcpdump:

tcpdump -n -i em0 ip6 and port 161


23:30:04.770952 2001:db8::4:1.15490 > 2001:db8::4:5.161.161: C=ROcomm GetRequest(28) .1.3.6.1.2.1.1.3.0
23:30:04.772516 2001:db8::4:5.161.161 > 2001:db8::4:1.15490: C=ROcomm GetResponse(30) .1.3.6.1.2.1.1.3.0=15305 [class 0x80]
23:30:04.774191 2001:db8::4:1.19163 > 2001:db8::4:5.161.161: C=ROcomm GetRequest(28) .1.3.6.1.2.1.1.3.0
23:30:04.775014 2001:db8::4:5.161.161 > 2001:db8::4:1.19163: C=ROcomm GetResponse(30) .1.3.6.1.2.1.1.3.0=15305 [class 0x80]
23:30:04.775816 2001:db8::4:1.25109 > 2001:db8::4:5.161.161: C=ROcomm GetRequest(30) .1.3.6.1.2.1.31.1.1.1.6.1[|snmp]
23:30:04.779886 2001:db8::4:5.161.161 > 2001:db8::4:1.25109: C=ROcomm GetResponse(30) .1.3.6.1.2.1.31.1.1.1.6.1=[|snmp] [class 0x80]
23:30:04.780474 2001:db8::4:1.40036 > 2001:db8::4:5.161.161: C=ROcomm GetRequest(30) .1.3.6.1.2.1.31.1.1.1.10.1[|snmp]
23:30:04.781760 2001:db8::4:5.161.161 > 2001:db8::4:1.40036: C=ROcomm GetResponse(30) .1.3.6.1.2.1.31.1.1.1.10.1=[|snmp] [class 0x80]
23:30:04.782559 2001:db8::4:1.38879 > 2001:db8::4:5.161.161: C=ROcomm GetRequest(30) .1.3.6.1.2.1.31.1.1.1.6.2[|snmp]
23:30:04.783641 2001:db8::4:5.161.161 > 2001:db8::4:1.38879: C=ROcomm GetResponse(30) .1.3.6.1.2.1.31.1.1.1.6.2=[|snmp] [class 0x80]
23:30:04.784404 2001:db8::4:1.48768 > 2001:db8::4:5.161.161: C=ROcomm GetRequest(30) .1.3.6.1.2.1.31.1.1.1.10.2[|snmp]
23:30:04.785383 2001:db8::4:5.161.161 > 2001:db8::4:1.48768: C=ROcomm GetResponse(30) .1.3.6.1.2.1.31.1.1.1.10.2=[|snmp] [class 0x80]
23:35:04.810109 2001:db8::4:1.5205 > 2001:db8::4:5.161.161: C=ROcomm GetRequest(28) .1.3.6.1.2.1.1.3.0
23:35:04.811718 2001:db8::4:5.161.161 > 2001:db8::4:1.5205: C=ROcomm GetResponse(30) .1.3.6.1.2.1.1.3.0=15305 [class 0x80]
23:35:04.813381 2001:db8::4:1.3390 > 2001:db8::4:5.161.161: C=ROcomm GetRequest(28) .1.3.6.1.2.1.1.3.0
23:35:04.814467 2001:db8::4:5.161.161 > 2001:db8::4:1.3390: C=ROcomm GetResponse(30) .1.3.6.1.2.1.1.3.0=15305 [class 0x80]
23:35:04.815251 2001:db8::4:1.7232 > 2001:db8::4:5.161.161: C=ROcomm GetRequest(30) .1.3.6.1.2.1.31.1.1.1.6.1[|snmp]

Ура, работает!
А затем появились графики.


  *** Via IPv4 ***