AT 8000S: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
(не показано 39 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
+ | [[Категория:AliedTelesysSwitch]] |
||
+ | [[Категория:Switch]] |
||
=AT-8000S= |
=AT-8000S= |
||
Строка 68: | Строка 70: | ||
+ | ===VLANs=== |
||
− | ===Вланы, snmp, radius=== |
||
В коммутаторе прописываю 2 влана: |
В коммутаторе прописываю 2 влана: |
||
*101 - клиентский |
*101 - клиентский |
||
Строка 76: | Строка 78: | ||
vlan 101-102 |
vlan 101-102 |
||
exit |
exit |
||
− | </PRE> |
||
− | Отключаю STP |
||
− | <PRE> |
||
− | no spanning-tree |
||
</PRE> |
</PRE> |
||
Добавляю все порты к соответвующим вланам (e1-e24 access, gi1-g2 - trunk) |
Добавляю все порты к соответвующим вланам (e1-e24 access, gi1-g2 - trunk) |
||
Строка 91: | Строка 89: | ||
switchport access vlan 101 |
switchport access vlan 101 |
||
exit |
exit |
||
+ | </PRE> |
||
+ | ===Интерфейс управления=== |
||
+ | Управляющий VLAN у меня vid=102 |
||
+ | <PRE> |
||
+ | interface vlan 102 |
||
+ | ip address 172.16.251.2 255.255.240.0 |
||
+ | exit |
||
+ | ip default-gateway 172.16.251.1 |
||
</PRE> |
</PRE> |
||
+ | ===Доступ на коммутатор=== |
||
Авторизовывать админов и техников я хочу через центральный радиус-серевер<BR> |
Авторизовывать админов и техников я хочу через центральный радиус-серевер<BR> |
||
+ | Доступ разрешить используя только ssh. В отлисии от DES-35(26|50) производительности процессора достаточно для полноценной работы в ssh без подтормаживаний CLI. |
||
+ | <PRE> |
||
+ | ip ssh server |
||
+ | </PRE> |
||
+ | |||
Создаю именованный (RADIUS) список методов аторизации (попробовать радиус, если ответа нет - локальную БД)и применяю его к линии (telnet). |
Создаю именованный (RADIUS) список методов аторизации (попробовать радиус, если ответа нет - локальную БД)и применяю его к линии (telnet). |
||
Аналогично для перехода в привелегированный режим используется сначала радиус, и в случае если ответ не получен - локальнай пароль enable) |
Аналогично для перехода в привелегированный режим используется сначала радиус, и в случае если ответ не получен - локальнай пароль enable) |
||
Строка 103: | Строка 115: | ||
line telnet |
line telnet |
||
+ | login authentication RADIUS |
||
+ | enable authentication RADIUS |
||
+ | exit |
||
+ | |||
+ | line ssh |
||
login authentication RADIUS |
login authentication RADIUS |
||
enable authentication RADIUS |
enable authentication RADIUS |
||
exit |
exit |
||
</PRE> |
</PRE> |
||
+ | |||
+ | |||
+ | Со стороны радиуса (FreeRadius) это выглядит так (/etc/raddb/users): |
||
+ | <PRE> |
||
+ | sirmax Cleartext-Password := "This_Is_My_MegaPassWorD" |
||
+ | User-Service-Type = Shell-User, |
||
+ | cisco-avpair = "shell:priv-lvl=1" |
||
+ | |||
+ | $enab15$ Cleartext-Password := "SuperDuperEnablePass" |
||
+ | Cisco-AVPair = "shell:priv-lvl=15" |
||
+ | |||
+ | </PRE> |
||
+ | |||
+ | |||
+ | Интерфейс коммутатора можно дополнительно закрыть ACL. |
||
+ | <PRE> |
||
+ | management access-list Equipment |
||
+ | permit ip-source 172.16.29.0 mask /24 service ssh |
||
+ | permit ip-source 172.16.29.0 mask /24 service snmp |
||
+ | ... |
||
+ | exit |
||
+ | |||
+ | management access-class Equipment |
||
+ | </PRE> |
||
+ | Подразумевается deny ip any any вконце ACL. |
||
+ | В данной конфигурации telnet и http(s) закрыты полностью. |
||
+ | |||
+ | ===Логгирование событий=== |
||
+ | Включаю логгирование на удаленный syslog-cервер. |
||
+ | <PRE> |
||
+ | logging 172.16.100.100 |
||
+ | </PRE> |
||
+ | |||
+ | ===SNMP=== |
||
+ | Коммутатор поддерживает snmp v3, соответвенно, его и использую. |
||
+ | |||
+ | Требуется потверждение установки enginID |
||
+ | <PRE> |
||
+ | snmp-server engineID local default |
||
+ | </PRE> |
||
+ | |||
+ | <PRE> |
||
+ | snmp-server location My_Location |
||
+ | snmp-server contact sirmax_at_noname.com.ua |
||
+ | snmp-server view ALL iso included |
||
+ | snmp-server community public ro view ALL |
||
+ | snmp-server host 172.16.100.100 private traps 2 |
||
+ | snmp-server group monitor v3 priv notify ALL read ALL write ALL |
||
+ | snmp-server user monitor monitor auth-md5 megapassworddlyasnmp |
||
+ | </PRE> |
||
+ | |||
+ | Проверяю работу (вывод не полный) |
||
+ | {{Command|<nowiki> |
||
+ | # snmpwalk -v3 -u monitor -X megapassworddlyasnmp -A megapassworddlyasnmp -l authPriv 172.16.251.2 |
||
+ | SNMPv2-MIB::sysDescr.0 = STRING: ATI AT-8000S |
||
+ | SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.207.1.4.126 |
||
+ | DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (152900) 0:25:29.00 |
||
+ | SNMPv2-MIB::sysContact.0 = STRING: sirmax_at_noname.com.ua |
||
+ | SNMPv2-MIB::sysName.0 = STRING: |
||
+ | SNMPv2-MIB::sysLocation.0 = STRING: My_Location |
||
+ | SNMPv2-MIB::sysServices.0 = INTEGER: 2 |
||
+ | SNMPv2-MIB::sysORLastChange.0 = Timeticks: (0) 0:00:00.00 |
||
+ | SNMPv2-MIB::sysORID.1 = OID: SNMPv2-SMI::enterprises.89.73 |
||
+ | SNMPv2-MIB::sysORDescr.1 = STRING: RS capabilities |
||
+ | SNMPv2-MIB::sysORUpTime.1 = Timeticks: (0) 0:00:00.00 |
||
+ | |||
+ | </nowiki>}} |
||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===Прочее=== |
||
+ | Кроме всего, отключаю явно весь функционал который не использую. |
||
+ | |||
+ | Отключаю STP, gvrp, http-сервер |
||
+ | <PRE> |
||
+ | no spanning-tree |
||
+ | no gvrp enable |
||
+ | no ip http server |
||
+ | </PRE> |
||
+ | |||
+ | Синхронизация времени |
||
+ | <PRE> |
||
+ | clock timezone +2 |
||
+ | clock summer-time recurring last Sat Mar 03:00 last Sat Oct 04:00 zone utc |
||
+ | clock source sntp |
||
+ | sntp unicast client enable |
||
+ | sntp unicast client poll |
||
+ | sntp server 10.0.1.1 poll |
||
+ | sntp server 10.1.1.1 poll |
||
+ | </PRE> |
||
+ | DNSб доменное имя |
||
+ | <PRE> |
||
+ | ip domain-name switch.domain.tls |
||
+ | ip name-server 193.33.хх.хх 193.33.хх.хх |
||
+ | </PRE> |
||
+ | ==Наcтройка DHCP Relay + Option 82 == |
||
+ | ===Настройка на комутаторе=== |
||
+ | В коммутаторе заявлена поддержка, однако в CLI есть ошибки и встроенная подсказка не всегда работает корректно. |
||
+ | |||
+ | Указать ip DHCP-сервера. |
||
+ | <PRE> |
||
+ | ip dhcp relay address 172.16.251.1 |
||
+ | </PRE> |
||
+ | Включить глобально релей. |
||
+ | <PRE> |
||
+ | ip dhcp relay enable |
||
+ | </PRE> |
||
+ | |||
+ | Включить вставку option 82 в DHCP-пакеты. |
||
+ | <PRE> |
||
+ | ip dhcp information option |
||
+ | </PRE> |
||
+ | |||
+ | Включить в соответвующих вланах. |
||
+ | <PRE> |
||
+ | interface vlan 101 |
||
+ | ip dhcp relay enable |
||
+ | exit |
||
+ | interface vlan 102 |
||
+ | ip dhcp relay enable |
||
+ | exit |
||
+ | </PRE> |
||
+ | |||
+ | Отмечу, что несмотря на то что в документации в примере указан интерфейс eХХ (физический порт) у меня заработал релей только после активации на VLAN. |
||
+ | ===Анализ полученного пакета=== |
||
+ | Наблюдаю следующий пакет (оставлено только самое важное): |
||
+ | <PRE> |
||
+ | Internet Protocol, Src: 172.16.251.2 (172.16.251.2), Dst: 172.16.251.1 (172.16.251.1) |
||
+ | Version: 4 |
||
+ | Header length: 20 bytes |
||
+ | Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00) |
||
+ | 0000 00.. = Differentiated Services Codepoint: Default (0x00) |
||
+ | .... ..0. = ECN-Capable Transport (ECT): 0 |
||
+ | .... ...0 = ECN-CE: 0 |
||
+ | Total Length: 345 |
||
+ | Identification: 0x37ba (14266) |
||
+ | Flags: 0x00 |
||
+ | 0... = Reserved bit: Not set |
||
+ | .0.. = Don't fragment: Not set |
||
+ | ..0. = More fragments: Not set |
||
+ | Fragment offset: 0 |
||
+ | Time to live: 64 |
||
+ | Protocol: UDP (0x11) |
||
+ | Header checksum: 0xf3b4 [correct] |
||
+ | [Good: True] |
||
+ | [Bad : False] |
||
+ | Source: 172.16.251.2 (172.16.251.2) |
||
+ | Destination: 172.16.251.1 (172.16.251.1) |
||
+ | User Datagram Protocol, Src Port: 68 (68), Dst Port: 67 (67) |
||
+ | Source port: 68 (68) |
||
+ | Destination port: 67 (67) |
||
+ | Length: 325 |
||
+ | Checksum: 0x41c7 [correct] |
||
+ | [Good Checksum: True] |
||
+ | [Bad Checksum: False] |
||
+ | Bootstrap Protocol |
||
+ | Message type: Boot Request (1) |
||
+ | Hardware type: Ethernet |
||
+ | Hardware address length: 6 |
||
+ | Hops: 1 |
||
+ | Transaction ID: 0xc27bab16 |
||
+ | Seconds elapsed: 27 (little endian bug?) |
||
+ | 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: 0.0.0.0 (0.0.0.0) |
||
+ | 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 Discover |
||
+ | Option: (53) DHCP Message Type |
||
+ | Length: 1 |
||
+ | Value: 01 |
||
+ | Option: (t=116,l=1) DHCP Auto-Configuration |
||
+ | Option: (116) DHCP Auto-Configuration |
||
+ | Length: 1 |
||
+ | Value: 01 |
||
+ | Option: (t=61,l=7) Client identifier |
||
+ | Option: (61) Client identifier |
||
+ | Length: 7 |
||
+ | Value: 01001C23958D8B |
||
+ | Hardware type: Ethernet |
||
+ | Client MAC address: 00:1c:23:95:8d:8b (00:1c:23:95:8d:8b) |
||
+ | Option: (t=50,l=4) Requested IP Address = 169.254.86.169 |
||
+ | Option: (50) Requested IP Address |
||
+ | Length: 4 |
||
+ | Value: A9FE56A9 |
||
+ | Option: (t=12,l=6) Host Name = "tester" |
||
+ | Option: (12) Host Name |
||
+ | Length: 6 |
||
+ | Value: 746573746572 |
||
+ | Option: (t=60,l=8) Vendor class identifier = "MSFT 5.0" |
||
+ | Option: (60) Vendor class identifier |
||
+ | Length: 8 |
||
+ | Value: 4D53465420352E30 |
||
+ | Option: (t=55,l=11) Parameter Request List |
||
+ | Option: (55) Parameter Request List |
||
+ | Length: 11 |
||
+ | Value: 010F03062C2E2F1F21F92B |
||
+ | 1 = Subnet Mask |
||
+ | 15 = Domain Name |
||
+ | 3 = Router |
||
+ | 6 = Domain Name Server |
||
+ | 44 = NetBIOS over TCP/IP Name Server |
||
+ | 46 = NetBIOS over TCP/IP Node Type |
||
+ | 47 = NetBIOS over TCP/IP Scope |
||
+ | 31 = Perform Router Discover |
||
+ | 33 = Static Route |
||
+ | 249 = Classless Static Route (Microsoft) |
||
+ | 43 = Vendor-Specific Information |
||
+ | Option: (t=43,l=2) Vendor-Specific Information |
||
+ | Option: (43) Vendor-Specific Information |
||
+ | Length: 2 |
||
+ | Value: DC00 |
||
+ | Option: (t=82,l=18) Agent Information Option |
||
+ | Option: (82) Agent Information Option |
||
+ | Length: 18 |
||
+ | Value: 0106000400650101020800060015775F4D60 |
||
+ | Agent Circuit ID: 000400650101 |
||
+ | Agent Remote ID: 00060015775F4D60 |
||
+ | End Option |
||
+ | </PRE> |
||
+ | |||
+ | Т.е. коммутатор корректно вставил значения |
||
+ | <PRE> |
||
+ | Agent Circuit ID: 000400650101 |
||
+ | Agent Remote ID: 00060015775F4D60 |
||
+ | </PRE> |
||
+ | Осталось их только правильно интерпретировать. |
||
+ | ===Формат полей Option 82 для AT-8000S/24=== |
||
+ | ====Circit ID==== |
||
+ | Первое впечатление, что формат 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] |
||
+ | |||
+ | Разберем подробнее: |
||
+ | Agent Circuit ID: 000400650101 |
||
+ | Т.е. фактически, первые 2 байта нужно просто отбросить и нигде не учитывать (при вычислении сдвигов, и т.п.) - аналогично Dlink. |
||
+ | |||
+ | |||
+ | <TABLE border=1> |
||
+ | <TR> |
||
+ | <TD>1</TD><TD>2</TD><TD>3</TD><TD>4</TD><TD>5</TD><TD>6</TD><TD>7</TD> |
||
+ | </TR> |
||
+ | <TR> |
||
+ | <TD>Тип опции=01 (hex)</TD><TD>Длина=06 (hex)</TD><TD>Тип Circuit ID=00 (hex)</TD><TD>Длина=04 (hex) </TD><TD>VLAN ID=0065 (hex)</TD><TD>Module (=01) (hex)</TD><TD>Port=01 (hex)</TD> |
||
+ | </TR> |
||
+ | <TR> |
||
+ | <TD>Тип опции=01 (dec)</TD><TD>Длина=06 (dec)</TD><TD>Тип Circuit ID=00 (dec)</TD><TD>Длина=04 (dec)</TD><TD>VLAN ID=101 (dec)</TD><TD>Module (=01) (dec)</TD><TD>Port=01 (dec)</TD> |
||
+ | </TR> |
||
+ | <TR> |
||
+ | <TD>1 байт</TD><TD>1 байт</TD><TD>1 байт</TD><TD>1 байт</TD><TD>2 байта</TD><TD>1 байт</TD><TD>1 байт</TD> |
||
+ | </TR> |
||
+ | </TABLE> |
||
+ | Отличие тольк в том что stand-alone комммутатор выставляет значение 01 а не 00 в поле Module. Что позволило найти ошибку (неточность) в собсвенном конфиге. |
||
+ | |||
+ | Соответвенно, практически никаких отличий от DES-30(26|50) нет |
||
+ | |||
+ | Для выдач адреса на основе порта |
||
+ | <PRE> |
||
+ | class "match-port-1" |
||
+ | { |
||
+ | match if ( |
||
+ | binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1)) = "1" |
||
+ | ); |
||
+ | |||
+ | } |
||
+ | </PRE> |
||
+ | К вопросу о неточности: |
||
+ | Сравнить (для Длинка) |
||
+ | <PRE> |
||
+ | binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 4, 2)) = "1" |
||
+ | </PRE> |
||
+ | и используемый АТ-8000S |
||
+ | <PRE> |
||
+ | binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1)) = "1" |
||
+ | </PRE> |
||
+ | |||
+ | |||
+ | |||
+ | {{Note|<nowiki>Первая запись означает "взять из circuit-id по смещению 4 2 байта, и все 2 байта перевести в 10-тичное число. Все 2 байта - это 16 бит, второй аргумент ф-и binary-to-ascii. При таком подходе для длинка все будет верно, module=0 всегда. Соответвенно, преобразовываемый порт будет просто предварен нулем, что при преобразовании в десятичное число не играет роли. В случае AT значение module = 1, и, соответвенно, возникает ошибка. |
||
+ | |||
+ | Более правильный вариант - взять последний один(suffix(option agent.circuit-id, 1) ) байт и преобразовывать к десятичному виду.</nowiki>}} |
||
+ | |||
+ | ====Remote ID==== |
||
+ | В этих коммутаторах в качестве Remote ID выступает мак коммутатора. Это вносит некорое неудобство при смене коммутатора, требуется перенастройка dhcpd. |
||
+ | ===DHCP Snooping=== |
Текущая версия на 17:32, 3 апреля 2020
AT-8000S
В наличие имеется около 50-60 коммутаторов AT-8000S
Задача: проверить возможность их использования в нашей сети наравне с Dlink DES-3526.
Базовая настройка
Загрузка
Судя по тому что я вижу при загрузке, этот коммутатор очень похож на Lucent OmniStack LS6224
Консольный кабель обычный нуль-модемный. Скорость - 115200.
Процедура загрузки длиться около 25 секунд.
Приведенная ниже загрузка уже с последним (3.0.0.33) firmware, доступном на сайте производителя.
Boot1 Checksum Test...............................PASS Boot2 Checksum Test...............................PASS Flash Image Validation Test.......................PASS BOOT Software Version 1.0.1.06 Built 01-Jul-2007 17:08:46 ATI8000 board, 88F5181 CPU based with ARM926EJ-S core. 64MByte SDRAM. I-Cache 32 KB. D-Cache 32KB. Cache Enabled. Autoboot in 2 seconds - press RETURN or Esc. to abort and enter prom. Preparing to decompress... 100% Decompressing SW from image-2 100% OK Running from RAM... ********************************************************************* *** Running SW Ver. 3.0.0.33 Date 08-Jan-2009 Time 14:19:42 *** ********************************************************************* HW version is Base Mac address is: 00:15:77:5f:4d:60 Dram size is : 64M bytes Dram first block size is : 43520K bytes Dram first PTR is : 0x1580000 Dram second block size is : 0K bytes Dram second PTR is : 0x4000000 Flash size is: 16M 01-Oct-2006 01:01:05 %CDB-I-LOADCONFIG: Loading running configuration. 01-Oct-2006 01:01:05 %CDB-I-LOADCONFIG: Loading startup configuration. Device configuration: Slot 1 - AT-8000S/24 ------------------------------------ -- Unit Standalone -- ------------------------------------ Tapi Version: v1.3.3.1 Core Version: v1.3.3.1 01-Oct-2006 01:01:18 %INIT-I-InitCompleted: Initialization task is completed 01-Oct-2006 01:01:18 %SNMP-I-CDBITEMSNUM: Number of running configuration items loaded: 12 01-Oct-2006 01:01:18 %SNMP-I-CDBITEMSNUM: Number of startup configuration items loaded: 12 User Name:
VLANs
В коммутаторе прописываю 2 влана:
- 101 - клиентский
- 102 - управление.
vlan database vlan 101-102 exit
Добавляю все порты к соответвующим вланам (e1-e24 access, gi1-g2 - trunk)
interface range ethernet g(1-2) switchport mode trunk switchport trunk allowed vlan add 101 switchport trunk allowed vlan add 102 exit interface range ethernet e(1-24) switchport access vlan 101 exit
Интерфейс управления
Управляющий VLAN у меня vid=102
interface vlan 102 ip address 172.16.251.2 255.255.240.0 exit ip default-gateway 172.16.251.1
Доступ на коммутатор
Авторизовывать админов и техников я хочу через центральный радиус-серевер
Доступ разрешить используя только ssh. В отлисии от DES-35(26|50) производительности процессора достаточно для полноценной работы в ssh без подтормаживаний CLI.
ip ssh server
Создаю именованный (RADIUS) список методов аторизации (попробовать радиус, если ответа нет - локальную БД)и применяю его к линии (telnet). Аналогично для перехода в привелегированный режим используется сначала радиус, и в случае если ответ не получен - локальнай пароль enable)
radius-server host 172.16.1.1 retransmit 5 deadtime 60 key switch aaa authentication enable RADIUS radius enable aaa authentication login RADIUS radius local enable aaa accounting login radius line telnet login authentication RADIUS enable authentication RADIUS exit line ssh login authentication RADIUS enable authentication RADIUS exit
Со стороны радиуса (FreeRadius) это выглядит так (/etc/raddb/users):
sirmax Cleartext-Password := "This_Is_My_MegaPassWorD" User-Service-Type = Shell-User, cisco-avpair = "shell:priv-lvl=1" $enab15$ Cleartext-Password := "SuperDuperEnablePass" Cisco-AVPair = "shell:priv-lvl=15"
Интерфейс коммутатора можно дополнительно закрыть ACL.
management access-list Equipment permit ip-source 172.16.29.0 mask /24 service ssh permit ip-source 172.16.29.0 mask /24 service snmp ... exit management access-class Equipment
Подразумевается deny ip any any вконце ACL. В данной конфигурации telnet и http(s) закрыты полностью.
Логгирование событий
Включаю логгирование на удаленный syslog-cервер.
logging 172.16.100.100
SNMP
Коммутатор поддерживает snmp v3, соответвенно, его и использую.
Требуется потверждение установки enginID
snmp-server engineID local default
snmp-server location My_Location snmp-server contact sirmax_at_noname.com.ua snmp-server view ALL iso included snmp-server community public ro view ALL snmp-server host 172.16.100.100 private traps 2 snmp-server group monitor v3 priv notify ALL read ALL write ALL snmp-server user monitor monitor auth-md5 megapassworddlyasnmp
Проверяю работу (вывод не полный)
Прочее
Кроме всего, отключаю явно весь функционал который не использую.
Отключаю STP, gvrp, http-сервер
no spanning-tree no gvrp enable no ip http server
Синхронизация времени
clock timezone +2 clock summer-time recurring last Sat Mar 03:00 last Sat Oct 04:00 zone utc clock source sntp sntp unicast client enable sntp unicast client poll sntp server 10.0.1.1 poll sntp server 10.1.1.1 poll
DNSб доменное имя
ip domain-name switch.domain.tls ip name-server 193.33.хх.хх 193.33.хх.хх
Наcтройка DHCP Relay + Option 82
Настройка на комутаторе
В коммутаторе заявлена поддержка, однако в CLI есть ошибки и встроенная подсказка не всегда работает корректно.
Указать ip DHCP-сервера.
ip dhcp relay address 172.16.251.1
Включить глобально релей.
ip dhcp relay enable
Включить вставку option 82 в DHCP-пакеты.
ip dhcp information option
Включить в соответвующих вланах.
interface vlan 101 ip dhcp relay enable exit interface vlan 102 ip dhcp relay enable exit
Отмечу, что несмотря на то что в документации в примере указан интерфейс eХХ (физический порт) у меня заработал релей только после активации на VLAN.
Анализ полученного пакета
Наблюдаю следующий пакет (оставлено только самое важное):
Internet Protocol, Src: 172.16.251.2 (172.16.251.2), Dst: 172.16.251.1 (172.16.251.1) Version: 4 Header length: 20 bytes Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00) 0000 00.. = Differentiated Services Codepoint: Default (0x00) .... ..0. = ECN-Capable Transport (ECT): 0 .... ...0 = ECN-CE: 0 Total Length: 345 Identification: 0x37ba (14266) Flags: 0x00 0... = Reserved bit: Not set .0.. = Don't fragment: Not set ..0. = More fragments: Not set Fragment offset: 0 Time to live: 64 Protocol: UDP (0x11) Header checksum: 0xf3b4 [correct] [Good: True] [Bad : False] Source: 172.16.251.2 (172.16.251.2) Destination: 172.16.251.1 (172.16.251.1) User Datagram Protocol, Src Port: 68 (68), Dst Port: 67 (67) Source port: 68 (68) Destination port: 67 (67) Length: 325 Checksum: 0x41c7 [correct] [Good Checksum: True] [Bad Checksum: False] Bootstrap Protocol Message type: Boot Request (1) Hardware type: Ethernet Hardware address length: 6 Hops: 1 Transaction ID: 0xc27bab16 Seconds elapsed: 27 (little endian bug?) 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: 0.0.0.0 (0.0.0.0) 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 Discover Option: (53) DHCP Message Type Length: 1 Value: 01 Option: (t=116,l=1) DHCP Auto-Configuration Option: (116) DHCP Auto-Configuration Length: 1 Value: 01 Option: (t=61,l=7) Client identifier Option: (61) Client identifier Length: 7 Value: 01001C23958D8B Hardware type: Ethernet Client MAC address: 00:1c:23:95:8d:8b (00:1c:23:95:8d:8b) Option: (t=50,l=4) Requested IP Address = 169.254.86.169 Option: (50) Requested IP Address Length: 4 Value: A9FE56A9 Option: (t=12,l=6) Host Name = "tester" Option: (12) Host Name Length: 6 Value: 746573746572 Option: (t=60,l=8) Vendor class identifier = "MSFT 5.0" Option: (60) Vendor class identifier Length: 8 Value: 4D53465420352E30 Option: (t=55,l=11) Parameter Request List Option: (55) Parameter Request List Length: 11 Value: 010F03062C2E2F1F21F92B 1 = Subnet Mask 15 = Domain Name 3 = Router 6 = Domain Name Server 44 = NetBIOS over TCP/IP Name Server 46 = NetBIOS over TCP/IP Node Type 47 = NetBIOS over TCP/IP Scope 31 = Perform Router Discover 33 = Static Route 249 = Classless Static Route (Microsoft) 43 = Vendor-Specific Information Option: (t=43,l=2) Vendor-Specific Information Option: (43) Vendor-Specific Information Length: 2 Value: DC00 Option: (t=82,l=18) Agent Information Option Option: (82) Agent Information Option Length: 18 Value: 0106000400650101020800060015775F4D60 Agent Circuit ID: 000400650101 Agent Remote ID: 00060015775F4D60 End Option
Т.е. коммутатор корректно вставил значения
Agent Circuit ID: 000400650101 Agent Remote ID: 00060015775F4D60
Осталось их только правильно интерпретировать.
Формат полей Option 82 для AT-8000S/24
Circit ID
Первое впечатление, что формат Circuit ID анлогичен Dlink DES-3526
Разберем подробнее: Agent Circuit ID: 000400650101 Т.е. фактически, первые 2 байта нужно просто отбросить и нигде не учитывать (при вычислении сдвигов, и т.п.) - аналогично Dlink.
1 | 2 | 3 | 4 | 5 | 6 | 7 |
Тип опции=01 (hex) | Длина=06 (hex) | Тип Circuit ID=00 (hex) | Длина=04 (hex) | VLAN ID=0065 (hex) | Module (=01) (hex) | Port=01 (hex) |
Тип опции=01 (dec) | Длина=06 (dec) | Тип Circuit ID=00 (dec) | Длина=04 (dec) | VLAN ID=101 (dec) | Module (=01) (dec) | Port=01 (dec) |
1 байт | 1 байт | 1 байт | 1 байт | 2 байта | 1 байт | 1 байт |
Отличие тольк в том что stand-alone комммутатор выставляет значение 01 а не 00 в поле Module. Что позволило найти ошибку (неточность) в собсвенном конфиге.
Соответвенно, практически никаких отличий от DES-30(26|50) нет
Для выдач адреса на основе порта
class "match-port-1" { match if ( binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1)) = "1" ); }
К вопросу о неточности: Сравнить (для Длинка)
binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 4, 2)) = "1"
и используемый АТ-8000S
binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1)) = "1"
Remote ID
В этих коммутаторах в качестве Remote ID выступает мак коммутатора. Это вносит некорое неудобство при смене коммутатора, требуется перенастройка dhcpd.