Инструменты пользователя

Инструменты сайта


option82

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
option82 [2013/10/19 00:41]
nightfly [Упрощение жизни]
option82 [2014/06/11 13:38] (текущий)
nightfly [Отладка]
Строка 1: Строка 1:
 +====== Mini FAQ ======
  
 +Q: Что требуется от свича, чтобы заработала option 82? \\
 +A: Иметь настроенный и работающий dhcp relay с включенной option 82, dhcp snooping не пропускающий клиентские запросы в обход рилея и ip source guard дропающий пакеты для айпишек не полученных сквозь рилей.\\
 +
 +
 +Q: На каких свичах должен быть рилей? \\
 +A: На всех - уровня доступа.\\
 +
 +
 +Q: У нас тут пол сети на мыльницах,​ это будет работать?​ А можно держать часть сети на IP+MAC и другую часть на option 82? \\
 +A: Произошла критическая ошибка - у вас недостаточно денег для использования этого функционала.\\
 +
 +
 +
 +====== Настройка Ubilling и DHCP option 82 ======
 +
 +Для того, чтобы все заработало в базовом варианте,​ нам потребуется выполнить шесть простых шагов:
 +
 +1. Подсеть пользователей добавлена как:
 +
 +^ ID ^ Начальная ІР ^ Последняя ІР ^ Сеть/​CIDR ​    ^ Тип сети ^
 +| 1  | 172.16.0.0 ​  | 172.16.0.255 | 172.16.0.0/​24 | dhcp82 ​  |
 +
 +2.  /​etc/​rc.conf выглядит следующим образом ​
 +<file ini rc.conf>
 +ifconfig_em0="​inet 172.16.0.1 netmask 255.255.255.0"​
 +ifconfig_em0_alias0="​inet 172.32.0.1 netmask 255.255.240.0"​
 +ifconfig_em0_alias1="​inet 192.168.94.1 netmask 255.255.255.0"​
 +</​file>​
 +
 +3. Шаблон config/​dhcp/​global.template
 +
 +<file txt global.template>​
 +option domain-name "​ourisp";​
 +option domain-name-servers 172.16.0.1;
 +default-lease-time 3600;
 +max-lease-time 43200;
 +authoritative;​
 +ddns-update-style none;
 +log-facility local7;
 +one-lease-per-client true;
 +deny duplicates;
 +
 +shared-network ourisp {
 +
 +{SUBNETS}
 +
 +subnet 192.168.94.0 netmask 255.255.255.0 {
 +}
 +
 +subnet 172.32.0.0 netmask 255.255.240.0 {
 +  default-lease-time 3600;
 +  option domain-name "​isp";​
 +  option subnet-mask 255.255.240.0;​
 +  option domain-name-servers 172.32.0.1;
 +  option routers 172.32.0.1;
 +  ​
 +  pool {
 +   range 172.32.0.100 172.32.0.254;​
 +    {DENYMEMBERS}
 +   }
 +
 +log(info, "​=="​);​
 +if exists agent.remote-id {
 +        set clip = binary-to-ascii(10,​8,"​.",​leased-address);​
 +        set clremote = binary-to-ascii(16,​8,"",​option agent.remote-id);​
 +        set clcircuit = binary-to-ascii(10,​8,"",​option agent.circuit-id);​
 +
 +        log( info,​concat("​*Leased IP: ",​clip,​ " SWITCH: ",​clremote,"​ PORT: ",​clcircuit ," (with opt82)"​) );
 +} else {
 +        set clhw = concat (
 +        suffix (concat ("​0",​ binary-to-ascii (16, 8, "",​ substring(hardware,​1,​1))),​2),​ ":",​
 +        suffix (concat ("​0",​ binary-to-ascii (16, 8, "",​ substring(hardware,​2,​1))),​2),​ ":",​
 +        suffix (concat ("​0",​ binary-to-ascii (16, 8, "",​ substring(hardware,​3,​1))),​2),​ ":",​
 +        suffix (concat ("​0",​ binary-to-ascii (16, 8, "",​ substring(hardware,​4,​1))),​2),​ ":",​
 +        suffix (concat ("​0",​ binary-to-ascii (16, 8, "",​ substring(hardware,​5,​1))),​2),​ ":",​
 +        suffix (concat ("​0",​ binary-to-ascii (16, 8, "",​ substring(hardware,​6,​1))),​2)
 +        );
 +
 +        log( info,​concat("​*Leased IP: ",​binary-to-ascii(10,​8,"​.",​leased-address),​ " MAC: ", clhw," (without opt82)"​) );
 +}
 +log(info, "​=="​);​
 +
 +
 +}
 +
 +}
 +</​file>​
 +
 +4. Шаблон config/​dhcp/​option82.template находиться в дефолтном состоянии ([[templating#​dhcp_option82|поддерживаемые макросы]])\\
 +
 +5. В конфиге alter.ini установлена опция NMLEASES = /​var/​log/​dhcpd.log и настроено [[bsddhcpd|правильное логирование ISP-DHCPD]] \\
 +
 +6. В OnConnect отключена прибивка по MAC-у. Теперь это проблема ip source guard и dhcp snooping вашего свича (192.168.94.4 в примере).
 +
 +
 +Исходя из всего вышеуказанного,​ не сложно заключить,​ что привязка планируется по паре полных remote-id/​circuit-id. Проверить поведение такого конфига не сложно при помощи следующих нехитрых телодвижений
 +
 +
 +====== Отладка scapy======
 +<​code>​
 +p="​\x01\x01\x05\x02\x06\x11\x22\x34\x44\x55\x66"​
 +dhcp_discover =  Ether(src=RandMAC(),​dst="​ff:​ff:​ff:​ff:​ff:​ff"​)/​IP(src="​0.0.0.0",​dst="​255.255.255.255"​)/​UDP(sport=68,​dport=67)/​BOOTP(chaddr=RandString(12,'​0123456789abcdef'​))/​DHCP(options=[("​message-type","​discover"​),​("​relay_agent_Information",​p),"​end"​])
 +sendp(dhcp_discover)
 +</​code>​
 +
 +в ответ на что мы должны получить что-то типа:
 +
 +<file txt dhcpd.log>​
 +Oct 15 00:38:20 test dhcpd: Wrote 0 class decls to leases file.
 +Oct 15 00:38:20 test dhcpd: Wrote 1 leases to leases file.
 +Oct 15 00:38:34 test dhcpd: ==
 +Oct 15 00:38:34 test dhcpd: *Leased IP: 172.16.0.2 SWITCH: 112234445566 PORT: 5 (with opt82)
 +Oct 15 00:38:34 test dhcpd: ==
 +Oct 15 00:38:34 test dhcpd: ==
 +Oct 15 00:38:34 test dhcpd: *Leased IP: 172.16.0.2 SWITCH: 112234445566 PORT: 5 (with opt82)
 +Oct 15 00:38:34 test dhcpd: ==
 +Oct 15 00:38:34 test dhcpd: DHCPDISCOVER from 30:​32:​63:​30:​35:​62 via em0
 +Oct 15 00:38:35 test dhcpd: DHCPOFFER on 172.16.0.2 to 30:​32:​63:​30:​35:​62 via em0
 +</​file>​
 +
 +а также при прослушивании при помощи ​
 +<​code>​
 +tcpdump -n -i em0 -s 0 -v -vv
 +</​code>​
 +
 +мы будем наблюдать прилетающие к нам ​
 +
 +<​code>​
 +Agent-Information Option 82, length 13: 
 +              Remote-ID........
 +       Circuit-ID.......
 +
 +</​code>​
 +
 +
 +====== Особенности работы на свитчах Zyxel ======
 +
 +
 +GS-4012, GS-3012 вообще не возвращают remote-id. Поэтому ориентироваться стоит только ​ sub-option 1 (Agent Circuit ID). Так что при построении шаблона требуется руководствоваться вот этим: http://​zyxel.ru/​kb/​2030
 +
 +{{ :​zyxelopt82.png?​400 |}}
 +
 +В черновом варианте можно оформить это примерно так:
 +<​code>​
 +    set clremote = binary-to-ascii(10,​16,"",​substring(option agent.circuit-id,​4,​2));​
 +    set clcircuit = binary-to-ascii(10,​16,"",​substring(option agent.circuit-id,​1,​2));​
 +</​code>​
 +а также исправить option82.template в соответствии с этими реалиями
 +
 +что в результате дает нам следующий лог
 +
 +<​code>​
 +Oct 15 16:52:00 test dhcpd: ==
 +Oct 15 16:52:00 test dhcpd: *Leased IP: 172.32.0.100 SWITCH: 18259 PORT: 768 (with opt82)
 +Oct 15 16:52:00 test dhcpd: ==
 +</​code>​
 +
 +
 +Пример конфигурации Zyxel GS-3012:
 +<​code>​
 +ip address inband-default 192.168.94.4 255.255.255.0 ​
 +ip address default-gateway 192.168.94.1
 +interface port-channel 12  ​
 +  dhcp snooping trust 
 +exit 
 +dhcp smart-relay ​
 +dhcp smart-relay helper-address 192.168.94.1 ​
 +dhcp smart-relay option ​
 +dhcp smart-relay information ​
 +dhcp snooping ​
 +dhcp snooping vlan 1  ​
 +dhcp snooping vlan 1 option ​
 +dhcp snooping vlan 1 information ​
 +dhcp dhcp-vlan 1 
 +</​code>​
 +
 +====== Упрощение жизни ======
 +Для более удобного вылавливания пар remote-id и circuit-id существует сервис аналогичный [[uhw|UHW]] находящийся в **docs/​opt82_uhw**. Настройка в основном аналогична таковой у оригинального сервиса. Ходят слухи, что грозились дописать еще и самостоятельную активацию абонентом ;)
 +
 + 
option82.txt · Последние изменения: 2014/06/11 13:38 — nightfly