Итак, только что сброшенный коммутатор с настроенным интерфейсом:
Код:
madgnu@andromeda:~$ telnet 172.30.0.254
Trying 172.30.0.254...
Connected to 172.30.0.254.
Escape character is '^]'.
DES-3828 Fast Ethernet Switch Command Line Interface
Firmware: Build 4.61.B21
Copyright(c) 2008 D-Link Corporation. All rights reserved.
UserName:
PassWord:
DES-3800:admin#sh log
Command: show log
Index Time Log Text
----- ------------------- ----------------------------------------------------
7 2010/10/28 08:00:42 Successful login through Telnet (Username: Anonymous
, IP: 81.200.3.62, MAC: 00-00-00-00-00-00)
6 2010/10/28 08:00:31 Logout through Console (Username: Anonymous)
5 2010/10/28 07:58:34 Port 25 link up, 100Mbps FULL duplex
4 2010/10/28 07:58:34 Successful login through Console (Username: Anonymou
s)
3 2010/10/28 07:58:34 Configuration had 2 syntax error and 0 execute error
)
2 2010/10/28 07:58:34 Spanning Tree Protocol is disabled
1 2010/10/28 07:58:34 System warm start
На что влияет - не смотрел, где возникает, но воодушевило :)
Смотрим на stp - нет restricted_* в настройках стп для порта, зато есть bpdu_protection. Ок, это вроде как намекает мне на то, что абонентские порты должны не использовать stp, а использовать связку loopdetect + bpdu_protection, что в общем-то более правильно, чем втягивать абонентские порты в stp дерево. При этом loopdetect, насколько я понимаю, должен определять кольцо между портами - но этого не происходит, делаем следующие настройки:
Код:
DES-3800:admin#config loopdetect ports 11,13 state enabled
Command: config loopdetect ports 11,13 state enabled
Success.
DES-3800:admin#enable loopdetect
Command: enable loopdetect
Success.
После чего закольцовываем 11 и 13 порты патчкордом:
Код:
DES-3800:admin#sh pa po 11
Command: show packet ports 11
Port number : 11
Frame Size Frame Counts Frames/sec Frame Type Total Total/sec
------------ ------------ ---------- ---------- ---------- ---------
64 35372 2059 RX Bytes 1131840 66368
65-127 0 0 RX Frames 17685 1029
128-255 0 0
256-511 0 0 TX Bytes 1131968 66432
512-1023 0 0 TX Frames 17687 1030
1024-1518 0 0
Unicast RX 0 0
Multicast RX 17685 1029
Broadcast RX 0 0
DES-3800:admin#sh log
Command: show log
Index Time Log Text
----- ------------------- ----------------------------------------------------
11 2010/10/28 08:15:20 Port 13 link down
10 2010/10/28 08:15:20 Port 11 link down
9 2010/10/28 08:14:46 Port 13 link up, 100Mbps FULL duplex
8 2010/10/28 08:14:46 Port 11 link up, 100Mbps FULL duplex
Теперь собственно возникает ситуация когда мы на абонентских портах или используем stp+loopdetect, или bpdu_protection+loopdetect. В первом случае мы даем абонту возможность перестроить дерево stp, во втором - рискуем получить кольцо между портами. Это конечно же возможно не бага, а фича и ее просто нужно уметь готовить, но на вскидку я так не соображу как это приготовить кошерно.
Далее делаем следующее:
Код:
DES-3800:admin#create igmp_snooping multicast_vlan v998 998
Command: create igmp_snooping multicast_vlan v998 998
Success.
DES-3800:admin#config igmp_snooping multicast_vlan v998 source_port 25 member_port 11,13 state enable
Command: config igmp_snooping multicast_vlan v998 source_port 25 member_port 11,13 state enable
Success.
DES-3800:admin#config router_ports_forbidden v998 add 25
Command: config router_ports_forbidden v998 add 25
Success.
DES-3800:admin#enable igmp_snooping
Command: enable igmp_snooping
Success.
DES-3800:admin#config multicast port_filtering_mode 25 filter_unregistered_groups
Command: config multicast port_filtering_mode 25 filter_unregistered_groups
Success.
DES-3800:admin#show router_ports vlan v998
Command: show router_ports vlan v998
VLAN Name : v998
Static router port :
Dynamic router port :
Forbidden router port: 25
Total Entries: 1
После чего смотрим дамп с 13 порта:
Код:
madgnu@andromeda:/home/madgnu$ sudo tcpdump -pnni eth9 net 224.0.0.0/4
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth9, link-type EN10MB (Ethernet), capture size 96 bytes
17:53:15.070462 IP 81.200.3.97 > 224.0.0.1: igmp query v2
17:54:15.374000 IP 81.200.3.97 > 224.0.0.1: igmp query v2
17:54:15.703813 IP 10.90.90.40 > 224.0.42.1: igmp v2 report 224.0.42.1
17:54:24.859804 IP 10.90.90.40 > 224.0.42.1: igmp v2 report 224.0.42.1
17:54:28.487804 IP 10.90.90.40 > 224.0.42.1: igmp v2 report 224.0.42.1
Трафик не льется, но igmp query меня немного смущают. Это опять же может быть всего лишь фича - но теоритически может так получиться, что с forbidden_router_port может прийти igmp query с меньшим ip, чем у настоящего querier'а, и он очень обидится и перестанет посылать query. Но и здесь поведение коммутатора под вопросом в общем-то, так что лучше подожду комментария :)
В общем-то все. Для справедливости скажу, что протестировал следующие вещи - вроде работают :)
1) rstp
2) loopdetect port-based за 1 портом
3) igmp_snoping multicast_vlan
4) acl - block udp 68 (1-24), permit udp 67 (all), permit udp 68 (25), permit ether_type 0x806 (all), deny broadcast frames (all).
5) traffic control - broadcast/multicast
6) snmp (snmpwalk -v2c -c public 172.30.0.254 .1.3.6 - что-то выдает, подробнее не глядел)
7) sntp
8) syslog
9) bpdu_protection
Ну вот, вроде как-то так. Конечно было бы не плохо еще протестить модельку на предмет выпадания маков из fdb таблицы, но это к прошивке не имеет особого отношения, да и времени мало.