Accton Edge Core ES 3526XA: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
(NtAAfOon)
 
(не показаны 4 промежуточные версии 2 участников)
Строка 1: Строка 1:
  +
[[Категория:EdgeCore]]
fBB1Pn <a href="http://vddofhrkvzsf.com/">vddofhrkvzsf</a>, [url=http://csnbygykwgnu.com/]csnbygykwgnu[/url], [link=http://irjcagigtork.com/]irjcagigtork[/link], http://tzkclkapvqux.com/
 
  +
[[Категория:DHCP]]
  +
  +
=Accton Edge-Core ES-3526XA=
  +
Цель статьи - описатьпроцедуру тестирования коммутатора Accton Edge-Core ES-3526XA. Планируется как замена Dlink DES-3526.<BR>
  +
Необходимый функционал
  +
# IP source Guard + DHCP Snooping + Otion 82 (Выдавать IP на основании порта коммутатора и запретить все IP кроме полученных по DHCP)
  +
# ACL (Разрешить для неавторизованных IP только доступ на портал абонента)
  +
# VLAN, SNMP - более менее стандартный функционал L2-коммутаторов.
  +
  +
==Загрузка==
  +
Наблюдаю загрузку (9600 8N1) с консоли.
  +
<PRE>
  +
Image Loader 1.0.0.2
  +
Loading Diagnostic Image File : ES3526XA-V2_DIAG_1005.bix
  +
Diagnostic 1.0.0.5
  +
  +
  +
--- Performing Power-On Self Tests (POST) ---
  +
DUMMY Test 1 ................. PASS
  +
UART Loopback Test ........... PASS
  +
DRAM Test .................... PASS
  +
I2C Bus Initialization ....... PASS
  +
Done All Pass.
  +
------------------ DONE ---------------------
  +
  +
Loading Runtime Image File : ES3526XA_ES3510_V11022.bix
  +
Runtime 1.1.0.22
  +
root init done
  +
  +
[get stackingMac done ret_val] = 1
  +
Assigned Unit ID:[1]
  +
stacking DB: unit = 0, module type = 0
  +
  +
Set Transition mode ...
  +
Finish Set Transition mode ...
  +
Enter Transition mode ...
  +
Finish Transition mode ...
  +
Enter Master mode ...
  +
Load certificate files : Starting
  +
Load certificate files : Finished
  +
  +
Finish Master mode ...
  +
  +
Performing startup provision ...
  +
  +
.............................................................................................................................................................................................................
  +
Notify provision complete
  +
  +
CLI provision has been completed
  +
  +
  +
Provision Complete ...
  +
Finish Provision Complete ...
  +
[get stackingMac done ret_val] = 1
  +
***************************************************************
  +
  +
WARNING - MONITORED ACTIONS AND ACCESSES
  +
  +
  +
  +
Station's information:
  +
  +
  +
Floor / Row / Rack / Sub-Rack
  +
/ / /
  +
DC power supply:
  +
Power Source A: Floor / Row / Rack / Electrical circuit
  +
/ / /
  +
  +
Number of LP:
  +
Position MUX:
  +
IP LAN:
  +
Note:
  +
**********************************
  +
  +
  +
  +
User Access Verification
  +
  +
Username:
  +
</PRE>
  +
==Обновление Firmware==
  +
Сразу же обновляю firmware:
  +
<PRE>
  +
Console#dir
  +
File name File type Startup Size (byte)
  +
------------------------------------- -------------- ------- -----------
  +
Unit1:
  +
ES3526XA-V2_DIAG_1005.bix Boot-Rom Image Y 305512
  +
ES3526XA_ES3510_V11022.bix Operation Code Y 3076624
  +
Factory_Default_Config.cfg Config File N 542
  +
startup1.cfg Config File Y 5572
  +
y Config File N 5437
  +
---------------------------------------------------------------------------
  +
Total free space: 3276800
  +
</PRE>
  +
  +
<PRE>
  +
Console#copy tftp file
  +
TFTP server IP address: 192.168.95.22
  +
Choose file type:
  +
1. config: 2. opcode: <1-2>: 2
  +
Source file name: ES3526XA_ES3510_V11023.bix
  +
Destination file name: ES3526XA_ES3510_V11023.bix
  +
Write to FLASH Programming.
  +
Write to FLASH finish.
  +
Success.
  +
</PRE>
  +
  +
Выбираю новый софт как загружаемый по-умолчанию
  +
<PRE>
  +
Console(config)#boot system opcode:ES3526XA_ES3510_V11023.bix
  +
Success.
  +
</PRE>
  +
  +
Наблюдаю загрузку нового софта:
  +
<PRE>
  +
Loading Runtime Image File : ES3526XA_ES3510_V11023.bix
  +
</PRE>
  +
  +
==Настройка==
  +
CLI вцелом cisco-like, но это пожалуй самый неудобный в настройке коммутатор из тех с которыми мне приходилось иметь дело.
  +
Возможно, дело привычки.
  +
  +
==DHCP Relay==
  +
===Настройка коммутатора===
  +
Настройка достаточно простоа и аналогична другим коммутаторам (AT-8000S, Lucent LS-62..., DES- ...)
  +
<PRE>
  +
ip dhcp relay information option
  +
ip dhcp relay information option remote-id ip-address
  +
ip dhcp relay information policy replace
  +
IP DHCP relay server 172.16.251.1
  +
</PRE>
  +
Однако, отмечу что в пакете в качестве Remote-ID содержиться не ip а какой-то мусор. На данный момент у меня нет ответа от поставщика как расшифровать remote-id.
  +
  +
  +
===Настойка DHCPd===
  +
  +
<PRE>
  +
tshark -V -n ...
  +
Вот пример пакета (только option 82)
  +
Bootstrap Protocol
  +
Message type: Boot Reply (2)
  +
Hardware type: Ethernet
  +
Hardware address length: 6
  +
Hops: 1
  +
Transaction ID: 0xa5ee3a70
  +
Seconds elapsed: 0
  +
Bootp flags: 0x8000 (Broadcast)
  +
1... .... .... .... = Broadcast flag: Broadcast
  +
.000 0000 0000 0000 = Reserved flags: 0x0000
  +
Client IP address: 0.0.0.0 (0.0.0.0)
  +
Your (client) IP address: 192.168.199.2 (192.168.199.2)
  +
Next server IP address: 0.0.0.0 (0.0.0.0)
  +
Relay agent IP address: 172.16.251.2 (172.16.251.2)
  +
Client MAC address: 00:1c:23:95:8d:8b (00:1c:23:95:8d:8b)
  +
Server host name not given
  +
Boot file name not given
  +
Magic cookie: (OK)
  +
Option: (t=53,l=1) DHCP Message Type = DHCP Offer
  +
Option: (53) DHCP Message Type
  +
Length: 1
  +
Value: 02
  +
Option: (t=54,l=4) Server Identifier = 172.16.251.1
  +
Option: (54) Server Identifier
  +
Length: 4
  +
Value: AC10FB01
  +
Option: (t=51,l=4) IP Address Lease Time = 8 hours, 36 minutes, 40 seconds
  +
Option: (51) IP Address Lease Time
  +
Length: 4
  +
Value: 00007918
  +
Option: (t=1,l=4) Subnet Mask = 255.255.255.0
  +
Option: (1) Subnet Mask
  +
Length: 4
  +
Value: FFFFFF00
  +
Option: (t=3,l=4) Router = 192.168.199.254
  +
Option: (3) Router
  +
Length: 4
  +
Value: C0A8C7FE
  +
Option: (t=6,l=8) Domain Name Server
  +
Option: (6) Domain Name Server
  +
Length: 8
  +
Value: C1213021C12130A0
  +
IP Address: 193.33.48.33
  +
IP Address: 193.33.48.160
  +
Option: (t=82,l=16) Agent Information Option
  +
Option: (82) Agent Information Option
  +
Length: 16
  +
Value: 01060004006501010206010400000000
  +
Agent Circuit ID: 000400650101
  +
Agent Remote ID: 010400000000
  +
End Option
  +
Padding
  +
</PRE>
  +
  +
Первое впечатление, что формат Circuit ID анлогичен [http://wiki.sirmax.noname.com.ua/index.php/D-LINK_DHCP_Relay_option_82#.D0.A4.D0.BE.D1.80.D0.BC.D0.B0.D1.82_.D0.BF.D0.BE.D0.BB.D1.8F_DHCP_option_82_.D0.B4.D0.BB.D1.8F_DES-35XX: Dlink DES-3526] и другим коммутаторам (Если есть стандарт то хорошо бы найти докумнтацию)
  +
  +
Значение Circuit ID побайтно:<FONT color=red>00</FONT> <FONT color=green>04</FONT> <FONT color=blue>0065</FONT> <FONT color=PINK>01</FONT> <FONT color=GREY>01</FONT><BR>
  +
<BR>
  +
<FONT color=red>00 </FONT> - Тип Circit ID (Всегда 0?) (1 байт, смещение 0)<BR>
  +
<FONT color=green>04</FONT> - Длинна (констаната? почему такое значение?) (1 байт смещение 1)<BR>
  +
<FONT color=blue>0065</FONT> - VLAN ID (2 байта, смещение 2)<BR>
  +
<FONT color=PINK>01</FONT> - Stack/Module ID (0 или 1 у stand-alone switch) 1 байт, смещение 4<BR>
  +
<FONT color=GREY>01</FONT> - Port (1 байт, смещение 5)<BR>
  +
  +
  +
  +
Конфиг сервера аналогичен.<BR>
  +
Простой пример:<BR>
  +
<PRE>
  +
class "port-1"
  +
{
  +
match if(
  +
binary-to-ascii(10, 8, "/", suffix(option agent.circuit-id, 1)) = "1"
  +
);
  +
}
  +
</PRE>
  +
  +
  +
  +
Для логов использую следующюю конструкцию:
  +
<PRE>
  +
if exists agent.circuit-id {
  +
log ( info, concat( "Lease for ", binary-to-ascii (10, 8, ".", leased-address), " is connected to interface ",
  +
binary-to-ascii (10, 8, "/", suffix ( option agent.circuit-id, 2)), " , VLAN ",
  +
binary-to-ascii (10, 16, "", substring( option agent.circuit-id, 2, 2)), " on switch ",
  +
binary-to-ascii(16, 8, ":", substring( option agent.remote-id, 2, 6))));
  +
  +
log ( info, concat( "Lease for ", binary-to-ascii (10, 8, ".", leased-address),
  +
"<>raw option-82 info is CID: ", binary-to-ascii (10, 8, ".", option agent.circuit-id), " AID: ",
  +
binary-to-ascii(16, 8, ".", option agent.remote-i
  +
</PRE>
  +
В логах наблюдаю успешную выдачу IP
  +
<PRE>
  +
anarxist dhcpd: DHCPDISCOVER from 00:1c:ХХ:ХХ:ХХ:ХХ (tester) via 172.16.251.2
  +
anarxist dhcpd: DHCPOFFER on 192.168.199.2 to 00:1c:ХХ:ХХ:ХХ:ХХ (tester) via 172.16.251.2
  +
anarxist dhcpd: Lease for 192.168.199.2 is connected to interface 1/1 , VLAN 101 on switch 0:0:0:0
  +
anarxist dhcpd: Lease for 192.168.199.2 raw option-82 info is CID: 0.4.0.101.1.1 AID: 1.4.0.0.0.0
  +
</PRE>
  +
  +
==DHCP Snooping==
  +
При настройке DHCP Snopping мне удалось вызвать зависание коммутатора.<BR>
  +
Пробую настроить согласно инструкции [http://www.mounblan.com/faq.php?prodid=0&deviceid=0&id=59 Монблана]
  +
  +
<PRE>
  +
ip dhcp snooping
  +
ip dhcp snooping vlan 101
  +
ip dhcp snooping information option
  +
ip dhcp snooping information policy replace
  +
</PRE>
  +
{{Note|Предварительно отключить dhcp-relay, иначе - не работает }}
  +
  +
  +
Настраиваю trusted-порты:
  +
<PRE>
  +
interface ethernet 1/25
  +
ip dhcp snooping trust
  +
exit
  +
  +
interface ethernet 1/26
  +
ip dhcp snooping trust
  +
exit
  +
</PRE>
  +
  +
Смотрю статус:
  +
<PRE>
  +
sh ip dhcp snooping
  +
Global DHCP Snooping status: enable
  +
DHCP Snooping Information Option Status: disable
  +
DHCPSNP_MGR_GetInformationRidMode:3639
  +
DHCPSNP_MGR_GetInformationRidMode:3646
  +
DHCPSNP_MGR_GetInformationRidMode:3653
  +
DHCPSNP_MGR_GetInformationRidMode:3655
  +
DHCPSNP_MGR_GetInformationRidMode:3663
  +
DHCPSNP_MGR_GetInformationRidMode:3666
  +
DHCP Snooping Information Option Remote ID: mac address
  +
DHCP Snooping Information Policy: replace
  +
DHCP Snooping is configured on the following VLANs:
  +
102,
  +
Verify Source Mac-Address: enable
  +
Interface Trusted
  +
---------- ----------
  +
Eth 1/1 No
  +
...
  +
Eth 1/25 Yes
  +
Eth 1/26 Yes
  +
</PRE>
  +
  +
  +
Пробую посмотреть связки ip-мак-порт:
  +
<PRE>
  +
Console#sh ip dhcp snooping binding
  +
MacAddress IpAddress Lease(sec) Type VLAN Interface
  +
----------------- --------------- ---------- -------------------- ---- ---------
  +
00-1c-23-95-8d-8b 192.168.199.2 35 dhcp-snooping 101 Eth 1/1
  +
</PRE>
  +
  +
Удобно что при получении пакета коммутатор выдает сообщение на консоль.
  +
К сожалению, это сообщение не записывается в лог и не пересылаются на удаленный syslog-server, и они не слишком информативны. Но, в других коммутаторах нет и таких =)
  +
<PRE>
  +
#DHCPSNP_ENGINE_InsertOption82AndForward:2826
  +
</PRE>
  +
  +
==IP Source Guard==
  +
IP Source Guard - функционал который позволяет блокировать все src-ip (и мак?) кроме выданных по DHCP. Весьма полезный функционал совместно с Option 82 insertion и DHCP Snooping.
  +
  +
На коммутаторе:
  +
<PRE>
  +
interface ethernet 1/1
  +
ip source-guard sip-mac
  +
exit
  +
</PRE>
  +
  +
Пробую поставить ip адрес вручную.<BR>
  +
После истечения времени Lease-time связь с тестовым клиентом пропадает. После восстановления автоматических настроенк и получении ip адреса от DHCP-сервера связь восстанавливается.
  +
  +
==ACL==
  +
ACL невозможно использовать совместно с ip source guard, т.к. на порту траффик обработаный source guard ACL уже не обрабатывается. Из этой ситуации есть 2 выхода.
  +
# Применять ACL на аплинк-портах. смирившись с тем что траффик в пределах коммутатора не контролируется полностью. Это достаточно серьезный недостаток (кроме схемы влан-на-клиента, но при использовании этой схемы нет нужды в таком дорогом коммутаторе.)
  +
# Использовать policy-map и "шейпить" нежелательный траффик до скорости 1 байт в секунду. Выглядит как "костыль", не так ли?
  +
  +
На втором способе остановлюсь чуть подробнее.<BR>
  +
  +
Для примера, рассмотрим следующюю ситуацию: Клиент может получать ip адрес из 3-х различных пулов в зависимости от состояния счета.<BR>
  +
Пусть это будут пулы
  +
* 10.199.0.0 /24 для "неплатильщиков" <BR>
  +
* 10.200.0.0 /24 для "неавторизованных"<BR>
  +
  +
Для "неплатильщиков" нужно разрешить только хост 192.168.95.22 где запущен соответвующим образом настроенный ДНС и веб-сервер с сообщением о долге, а для "неавторизованных" разрешить хост 10.199.0.100 где, соответвенно, запущен сервис авторизации. Самбу запретить для всех.
  +
  +
Для этого пришлось применить следужщюю конструкцию:
  +
<PRE>
  +
access-list IP extended m4
  +
permit 10.199.0.0 255.255.0.0 host 10.199.0.100
  +
permit 10.200.0.0 255.255.0.0 host 192.168.95.22
  +
deny 10.199.0.0 255.255.0.0 any
  +
deny 10.200.0.0 255.255.0.0 any
  +
deny TCP any any destination-port 135 135
  +
deny TCP any any destination-port 137 137
  +
deny TCP any any destination-port 138 138
  +
deny TCP any any destination-port 139 139
  +
deny TCP any any destination-port 445 445
  +
deny UDP any any destination-port 135 135
  +
deny UDP any any destination-port 137 137
  +
deny UDP any any destination-port 138 138
  +
deny UDP any any destination-port 139 139
  +
</PRE>
  +
  +
<PRE>
  +
!
  +
class-map m4 match-any
  +
match access-list m4
  +
exit
  +
!
  +
</PRE>
  +
  +
<PRE>
  +
!
  +
policy-map m4
  +
class m4
  +
set cos 0
  +
police 1 64 exceed-action drop
  +
exit
  +
exit
  +
!
  +
</PRE>
  +
  +
<PRE>
  +
interface ethernet 1/1
  +
ip source-guard sip-mac
  +
switchport allowed vlan add 101 untagged
  +
switchport mode access
  +
switchport native vlan 101
  +
switchport allowed vlan remove 1
  +
switchport allowed vlan remove 4093
  +
service-policy input m4
  +
!
  +
</PRE>
  +
  +
{{Note| Особо отмечу, что policy-map заработали корректно только после перезагрузки коммутатора}}
  +
  +
==Port Security==
  +
На коммутаторе вполне работоспасобна ф-я port-security
  +
  +
<PRE>
  +
interface ethernet 1/2
  +
port security max-mac-count 10
  +
port security action trap-and-shutdown
  +
ip source-guard sip-mac
  +
switchport allowed vlan add 101 untagged
  +
switchport mode access
  +
switchport native vlan 101
  +
switchport allowed vlan remove 1
  +
switchport allowed vlan remove 4093
  +
service-policy input m4
  +
</PRE>
  +
При попытке атаковать коммутатор (утилита arppoison из пакета [http://www.burghardt.pl/2007/12/arp-tools/ arptools]) ф-я security отрабатывает верно, и коммутатор перестает изучать маки на атакованом порту.
  +
  +
<PRE>
  +
Console# sh mac-address-table
  +
Interface MAC Address VLAN Type
  +
--------- ----------------- ---- -----------------
  +
Eth 1/ 2 00-01-E5-E5-E1-97 101 Learned-PSEC
  +
Eth 1/ 2 00-02-CD-15-A8-EE 101 Learned-PSEC
  +
Eth 1/ 2 00-16-EF-72-56-36 101 Learned-PSEC
  +
Eth 1/ 2 00-18-B8-9B-C2-BE 101 Learned-PSEC
  +
Eth 1/ 2 00-2D-AF-F7-7E-CC 101 Learned-PSEC
  +
Eth 1/ 2 00-30-F9-DF-12-61 101 Learned-PSEC
  +
Eth 1/ 2 00-35-F2-76-37-D3 101 Learned-PSEC
  +
Eth 1/ 2 00-37-36-27-47-2F 101 Learned-PSEC
  +
Eth 1/ 2 00-4B-19-DF-10-4F 101 Learned-PSEC
  +
Eth 1/ 2 00-4C-D8-DF-1F-6D 101 Learned-PSEC
  +
Eth 1/26 00-30-48-35-9A-11 1 Learned
  +
Eth 1/26 00-30-48-35-9A-11 101 Learned
  +
</PRE>
  +
  +
Т.е. атака arp poison не работает.
  +
{{Note|Однако, в бочке меда есть немаленькая ложка дегтя - маки, имеющие статус Learned-PSEC не очищаются до перезагрузки. Ожидается исправлеие в ближайшее время.}}
  +
  +
==Выводы (+ToDo)==
  +
Плюсы:
  +
# Рабочий DHCP-snooping с поддержкой Option 82 insertion.
  +
# Рабочий IP Source-Guard
  +
#
  +
  +
  +
  +
Минусы
  +
# Нет способа очистки маков изученных при включении port-security
  +
#
  +
#
  +
Выводы:

Текущая версия на 10:04, 7 октября 2020


Accton Edge-Core ES-3526XA

Цель статьи - описатьпроцедуру тестирования коммутатора Accton Edge-Core ES-3526XA. Планируется как замена Dlink DES-3526.
Необходимый функционал

  1. IP source Guard + DHCP Snooping + Otion 82 (Выдавать IP на основании порта коммутатора и запретить все IP кроме полученных по DHCP)
  2. ACL (Разрешить для неавторизованных IP только доступ на портал абонента)
  3. VLAN, SNMP - более менее стандартный функционал L2-коммутаторов.

Загрузка

Наблюдаю загрузку (9600 8N1) с консоли.

Image Loader 1.0.0.2
Loading Diagnostic Image File : ES3526XA-V2_DIAG_1005.bix
Diagnostic 1.0.0.5


--- Performing Power-On Self Tests (POST) ---
DUMMY Test 1 ................. PASS
UART Loopback Test ........... PASS
DRAM Test .................... PASS
I2C Bus Initialization ....... PASS
Done All Pass.
------------------ DONE ---------------------

Loading Runtime Image File : ES3526XA_ES3510_V11022.bix
Runtime 1.1.0.22
root init done

[get stackingMac done ret_val] = 1
Assigned Unit ID:[1]
stacking DB: unit = 0, module type = 0

Set Transition mode ...
Finish Set Transition mode ...
Enter Transition mode ...
Finish Transition mode ...
Enter Master mode ...
Load certificate files : Starting
Load certificate files : Finished

Finish Master mode ...

Performing startup provision ...

.............................................................................................................................................................................................................
Notify provision complete

CLI provision has been completed


Provision Complete ...
Finish Provision Complete ...
[get stackingMac done ret_val] = 1
***************************************************************

WARNING - MONITORED ACTIONS AND ACCESSES



Station's information:


Floor / Row / Rack / Sub-Rack
 /  /  /
DC power supply:
Power Source A: Floor / Row / Rack / Electrical circuit
 /  /  /

Number of LP:
Position MUX:
IP LAN:
Note:
**********************************



User Access Verification

Username:

Обновление Firmware

Сразу же обновляю firmware:

Console#dir
          File name                        File type       Startup Size (byte)
 -------------------------------------     --------------  ------- -----------
 Unit1:
          ES3526XA-V2_DIAG_1005.bix        Boot-Rom Image  Y           305512
          ES3526XA_ES3510_V11022.bix       Operation Code  Y          3076624
          Factory_Default_Config.cfg       Config File     N              542
          startup1.cfg                     Config File     Y             5572
          y                                Config File     N             5437
 ---------------------------------------------------------------------------
                                                  Total free space:   3276800
Console#copy tftp file
TFTP server IP address: 192.168.95.22
Choose file type:
 1. config:  2. opcode: <1-2>: 2
Source file name: ES3526XA_ES3510_V11023.bix
Destination file name: ES3526XA_ES3510_V11023.bix
Write to FLASH Programming.
Write to FLASH finish.
Success.

Выбираю новый софт как загружаемый по-умолчанию

Console(config)#boot system opcode:ES3526XA_ES3510_V11023.bix
Success.

Наблюдаю загрузку нового софта:

Loading Runtime Image File : ES3526XA_ES3510_V11023.bix

Настройка

CLI вцелом cisco-like, но это пожалуй самый неудобный в настройке коммутатор из тех с которыми мне приходилось иметь дело. Возможно, дело привычки.

DHCP Relay

Настройка коммутатора

Настройка достаточно простоа и аналогична другим коммутаторам (AT-8000S, Lucent LS-62..., DES- ...)

ip dhcp relay information option
ip dhcp relay information option remote-id ip-address
ip dhcp relay information policy replace
 IP DHCP relay server 172.16.251.1

Однако, отмечу что в пакете в качестве Remote-ID содержиться не ip а какой-то мусор. На данный момент у меня нет ответа от поставщика как расшифровать remote-id.


Настойка DHCPd

tshark -V -n  ...
Вот пример пакета (только option 82)
Bootstrap Protocol
    Message type: Boot Reply (2)
    Hardware type: Ethernet
    Hardware address length: 6
    Hops: 1
    Transaction ID: 0xa5ee3a70
    Seconds elapsed: 0
    Bootp flags: 0x8000 (Broadcast)
        1... .... .... .... = Broadcast flag: Broadcast
        .000 0000 0000 0000 = Reserved flags: 0x0000
    Client IP address: 0.0.0.0 (0.0.0.0)
    Your (client) IP address: 192.168.199.2 (192.168.199.2)
    Next server IP address: 0.0.0.0 (0.0.0.0)
    Relay agent IP address: 172.16.251.2 (172.16.251.2)
    Client MAC address: 00:1c:23:95:8d:8b (00:1c:23:95:8d:8b)
    Server host name not given
    Boot file name not given
    Magic cookie: (OK)
    Option: (t=53,l=1) DHCP Message Type = DHCP Offer
        Option: (53) DHCP Message Type
        Length: 1
        Value: 02
    Option: (t=54,l=4) Server Identifier = 172.16.251.1
        Option: (54) Server Identifier
        Length: 4
        Value: AC10FB01
    Option: (t=51,l=4) IP Address Lease Time = 8 hours, 36 minutes, 40 seconds
        Option: (51) IP Address Lease Time
        Length: 4
        Value: 00007918
    Option: (t=1,l=4) Subnet Mask = 255.255.255.0
        Option: (1) Subnet Mask
        Length: 4
        Value: FFFFFF00
    Option: (t=3,l=4) Router = 192.168.199.254
        Option: (3) Router
        Length: 4
        Value: C0A8C7FE
    Option: (t=6,l=8) Domain Name Server
        Option: (6) Domain Name Server
        Length: 8
        Value: C1213021C12130A0
        IP Address: 193.33.48.33
        IP Address: 193.33.48.160
    Option: (t=82,l=16) Agent Information Option
        Option: (82) Agent Information Option
        Length: 16
        Value: 01060004006501010206010400000000
        Agent Circuit ID: 000400650101
        Agent Remote ID: 010400000000
    End Option
    Padding

Первое впечатление, что формат Circuit ID анлогичен Dlink DES-3526 и другим коммутаторам (Если есть стандарт то хорошо бы найти докумнтацию)

Значение Circuit ID побайтно:00 04 0065 01 01

00 - Тип Circit ID (Всегда 0?) (1 байт, смещение 0)
04 - Длинна (констаната? почему такое значение?) (1 байт смещение 1)
0065 - VLAN ID (2 байта, смещение 2)
01 - Stack/Module ID (0 или 1 у stand-alone switch) 1 байт, смещение 4
01 - Port (1 байт, смещение 5)


Конфиг сервера аналогичен.
Простой пример:

class "port-1"
  {
  match if(
          binary-to-ascii(10, 8, "/",  suffix(option agent.circuit-id, 1)) = "1"
        );
  }


Для логов использую следующюю конструкцию:

if exists agent.circuit-id {
    log ( info, concat( "Lease for ", binary-to-ascii (10, 8, ".", leased-address), " is connected to interface ",
        binary-to-ascii (10, 8, "/", suffix ( option agent.circuit-id, 2)), " , VLAN ",
        binary-to-ascii (10, 16, "", substring( option agent.circuit-id, 2, 2)),  " on switch ",
        binary-to-ascii(16, 8, ":", substring( option agent.remote-id, 2, 6))));

    log ( info, concat( "Lease for ", binary-to-ascii (10, 8, ".", leased-address),
     "<>raw option-82 info is CID: ", binary-to-ascii (10, 8, ".", option agent.circuit-id), " AID: ",
        binary-to-ascii(16, 8, ".", option agent.remote-i

В логах наблюдаю успешную выдачу IP

anarxist dhcpd: DHCPDISCOVER from 00:1c:ХХ:ХХ:ХХ:ХХ (tester) via 172.16.251.2
anarxist dhcpd: DHCPOFFER on 192.168.199.2 to 00:1c:ХХ:ХХ:ХХ:ХХ (tester) via 172.16.251.2
anarxist dhcpd: Lease for 192.168.199.2 is connected to interface 1/1 , VLAN 101 on switch 0:0:0:0
anarxist dhcpd: Lease for 192.168.199.2 raw option-82 info is CID: 0.4.0.101.1.1 AID: 1.4.0.0.0.0

DHCP Snooping

При настройке DHCP Snopping мне удалось вызвать зависание коммутатора.
Пробую настроить согласно инструкции Монблана

ip dhcp snooping
ip dhcp snooping vlan 101
ip dhcp snooping information option
ip dhcp snooping information policy replace
Note: Предварительно отключить dhcp-relay, иначе - не работает


Настраиваю trusted-порты:

interface ethernet 1/25
 ip dhcp snooping trust
exit

interface ethernet 1/26
ip dhcp snooping trust
exit

Смотрю статус:

sh ip dhcp snooping
Global DHCP Snooping status: enable
DHCP Snooping Information Option Status: disable
DHCPSNP_MGR_GetInformationRidMode:3639
DHCPSNP_MGR_GetInformationRidMode:3646
DHCPSNP_MGR_GetInformationRidMode:3653
DHCPSNP_MGR_GetInformationRidMode:3655
DHCPSNP_MGR_GetInformationRidMode:3663
DHCPSNP_MGR_GetInformationRidMode:3666
DHCP Snooping Information Option Remote ID: mac address
DHCP Snooping Information Policy: replace
DHCP Snooping is configured on the following VLANs:
 102,
Verify Source Mac-Address: enable
Interface           Trusted
----------          ----------
Eth 1/1             No
...
Eth 1/25            Yes
Eth 1/26            Yes


Пробую посмотреть связки ip-мак-порт:

Console#sh ip dhcp snooping binding
MacAddress        IpAddress       Lease(sec) Type                 VLAN Interface
----------------- --------------- ---------- -------------------- ---- ---------
00-1c-23-95-8d-8b 192.168.199.2           35 dhcp-snooping         101 Eth 1/1

Удобно что при получении пакета коммутатор выдает сообщение на консоль. К сожалению, это сообщение не записывается в лог и не пересылаются на удаленный syslog-server, и они не слишком информативны. Но, в других коммутаторах нет и таких =)

#DHCPSNP_ENGINE_InsertOption82AndForward:2826

IP Source Guard

IP Source Guard - функционал который позволяет блокировать все src-ip (и мак?) кроме выданных по DHCP. Весьма полезный функционал совместно с Option 82 insertion и DHCP Snooping.

На коммутаторе:

interface ethernet 1/1
 ip source-guard sip-mac
exit

Пробую поставить ip адрес вручную.
После истечения времени Lease-time связь с тестовым клиентом пропадает. После восстановления автоматических настроенк и получении ip адреса от DHCP-сервера связь восстанавливается.

ACL

ACL невозможно использовать совместно с ip source guard, т.к. на порту траффик обработаный source guard ACL уже не обрабатывается. Из этой ситуации есть 2 выхода.

  1. Применять ACL на аплинк-портах. смирившись с тем что траффик в пределах коммутатора не контролируется полностью. Это достаточно серьезный недостаток (кроме схемы влан-на-клиента, но при использовании этой схемы нет нужды в таком дорогом коммутаторе.)
  2. Использовать policy-map и "шейпить" нежелательный траффик до скорости 1 байт в секунду. Выглядит как "костыль", не так ли?

На втором способе остановлюсь чуть подробнее.

Для примера, рассмотрим следующюю ситуацию: Клиент может получать ip адрес из 3-х различных пулов в зависимости от состояния счета.
Пусть это будут пулы

  • 10.199.0.0 /24 для "неплатильщиков"
  • 10.200.0.0 /24 для "неавторизованных"

Для "неплатильщиков" нужно разрешить только хост 192.168.95.22 где запущен соответвующим образом настроенный ДНС и веб-сервер с сообщением о долге, а для "неавторизованных" разрешить хост 10.199.0.100 где, соответвенно, запущен сервис авторизации. Самбу запретить для всех.

Для этого пришлось применить следужщюю конструкцию:

access-list IP extended m4
 permit 10.199.0.0 255.255.0.0 host 10.199.0.100
 permit 10.200.0.0 255.255.0.0 host 192.168.95.22
 deny 10.199.0.0 255.255.0.0 any
 deny 10.200.0.0 255.255.0.0 any
 deny TCP any any destination-port 135 135
 deny TCP any any destination-port 137 137
 deny TCP any any destination-port 138 138
 deny TCP any any destination-port 139 139
 deny TCP any any destination-port 445 445
 deny UDP any any destination-port 135 135
 deny UDP any any destination-port 137 137
 deny UDP any any destination-port 138 138
 deny UDP any any destination-port 139 139
!
class-map m4 match-any
 match access-list m4
 exit
!
!
policy-map m4
 class m4
  set cos 0
  police 1 64 exceed-action drop
  exit
 exit
!
interface ethernet 1/1
 ip source-guard sip-mac
 switchport allowed vlan add 101 untagged
 switchport mode access
 switchport native vlan 101
 switchport allowed vlan remove 1
 switchport allowed vlan remove 4093
 service-policy input m4
!
Note: Особо отмечу, что policy-map заработали корректно только после перезагрузки коммутатора

Port Security

На коммутаторе вполне работоспасобна ф-я port-security

interface ethernet 1/2
 port security max-mac-count 10
 port security action trap-and-shutdown
 ip source-guard sip-mac
 switchport allowed vlan add 101 untagged
 switchport mode access
 switchport native vlan 101
 switchport allowed vlan remove 1
 switchport allowed vlan remove 4093
 service-policy input m4

При попытке атаковать коммутатор (утилита arppoison из пакета arptools) ф-я security отрабатывает верно, и коммутатор перестает изучать маки на атакованом порту.

Console# sh mac-address-table
 Interface MAC Address       VLAN Type
 --------- ----------------- ---- -----------------
  Eth 1/ 2 00-01-E5-E5-E1-97  101 Learned-PSEC
  Eth 1/ 2 00-02-CD-15-A8-EE  101 Learned-PSEC
  Eth 1/ 2 00-16-EF-72-56-36  101 Learned-PSEC
  Eth 1/ 2 00-18-B8-9B-C2-BE  101 Learned-PSEC
  Eth 1/ 2 00-2D-AF-F7-7E-CC  101 Learned-PSEC
  Eth 1/ 2 00-30-F9-DF-12-61  101 Learned-PSEC
  Eth 1/ 2 00-35-F2-76-37-D3  101 Learned-PSEC
  Eth 1/ 2 00-37-36-27-47-2F  101 Learned-PSEC
  Eth 1/ 2 00-4B-19-DF-10-4F  101 Learned-PSEC
  Eth 1/ 2 00-4C-D8-DF-1F-6D  101 Learned-PSEC
  Eth 1/26 00-30-48-35-9A-11    1 Learned
  Eth 1/26 00-30-48-35-9A-11  101 Learned

Т.е. атака arp poison не работает.

Note: Однако, в бочке меда есть немаленькая ложка дегтя - маки, имеющие статус Learned-PSEC не очищаются до перезагрузки. Ожидается исправлеие в ближайшее время.

Выводы (+ToDo)

Плюсы:

  1. Рабочий DHCP-snooping с поддержкой Option 82 insertion.
  2. Рабочий IP Source-Guard


Минусы

  1. Нет способа очистки маков изученных при включении port-security

Выводы: