Користувальницькькі налаштування

Налаштування сайту


option82

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Наступна ревізія
Попередня ревізія
option82 [2022/09/24 14:39]
127.0.0.1 зовнішнє редагування
option82 [2023/07/08 14:11] (поточний)
nightfly
Рядок 1: Рядок 1:
 ====== Mini FAQ ====== ====== Mini FAQ ======
  
-Q: Что требуется от свича, чтобы заработала option 82? \\ +Q: Що потрібно від свіча, щоб запрацювала option 82? \\ 
-A: Иметь настроенный и работающий dhcp relay с включенной option 82, dhcp snooping не пропускающий клиентские запросы в обход рилея и ip source guard дропающий пакеты для айпишек не полученных сквозь рилей.\\+A: Мати налаштований і працюючий dhcp relay з увімкненою option 82, dhcp snooping, що не пропускає клієнтські запити в обхід рілею, та ip source guard, що дропає пакети для айпішок, які не отримано крізь рілей.\\.
  
  
-Q: На каких свичах должен быть рилей? \\ +Q: На яких свічах має бути рілей? \\ 
-A: На всех - уровня доступа.\\+A: На всіх - рівня доступу.\\
  
  
-Q: У нас тут пол сети на мыльницах, это будет работать? А можно держать часть сети на IP+MAC и другую часть на option 82? \\ +Q: У нас тут пів мережі на мильницях, це буде працювати? А можна тримати частину мережі на IP+MAC та іншу частину на option 82? \\ 
-A: Произошла критическая ошибка - у вас недостаточно денег для использования этого функционала.\\+A: Сталася критична помилка - у вас недостатньо грошей для використання цього функціоналу.\\
  
  
  
-====== Настройка Ubilling и DHCP option 82 ======+====== Налаштування Ubilling та DHCP option 82 ======
  
-Для того, чтобы все заработало в базовом варианте, нам потребуется выполнить шесть простых шагов:+Для того, щоб усе запрацювало в базовому варіанті, нам потрібно виконати шість простих кроків:
  
-1. Подсеть пользователей добавлена как:+1. Підмережу користувачів додано як:
  
-^ ID ^ Начальная ІР ^ Последняя ІР ^ Сеть/CIDR     ^ Тип сети ^+^ ID ^ Початкова ІР ^ Остання ІР ^ Мережа/CIDR     ^ Тип мережі ^
 | 1  | 172.16.0.0   | 172.16.0.255 | 172.16.0.0/24 | dhcp82   | | 1  | 172.16.0.0   | 172.16.0.255 | 172.16.0.0/24 | dhcp82   |
  
-2.  /etc/rc.conf выглядит следующим образом +2.  /etc/rc.conf виглядає наступним чином 
 <file ini rc.conf> <file ini rc.conf>
 ifconfig_em0="inet 172.16.0.1 netmask 255.255.255.0" ifconfig_em0="inet 172.16.0.1 netmask 255.255.255.0"
Рядок 63: Рядок 64:
  
 log(info, "=="); log(info, "==");
-if exists agent.remote-id { +if exists agent.remote-id and exists agent.circuit-id { 
-        set clip = binary-to-ascii(10,8,".",leased-address); +if binary-to-ascii(16, 8, "", substring(option agent.remote-id, 2, 1)) = "0"
-        set clremote = binary-to-ascii(16,8,"",option agent.remote-id); +set switch-mac = concat("0", binary-to-ascii(16, 8, "", substring(option agent.remote-id, 2, 1)), ":", binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 3, 6))); 
-        set clcircuit = binary-to-ascii(10,8,"",option agent.circuit-id);+# log(info,concat("SWITCH-MAC1:",switch-mac)); 
 +} else { 
 +# set switch-mac = binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6)); 
 +# log(info,concat("SWITCH-MAC2:",switch-mac)); 
 +set switch-mac = concat ( 
 +suffix (concat ("0", binary-to-ascii (16, 8, "", substring(option agent.remote-id,2,1))),2), ":", 
 +suffix (concat ("0", binary-to-ascii (16, 8, "", substring(option agent.remote-id,3,1))),2), ":", 
 +suffix (concat ("0", binary-to-ascii (16, 8, "", substring(option agent.remote-id,4,1))),2), ":", 
 +suffix (concat ("0", binary-to-ascii (16, 8, "", substring(option agent.remote-id,5,1))),2), ":", 
 +suffix (concat ("0", binary-to-ascii (16, 8, "", substring(option agent.remote-id,6,1))),2), ":", 
 +suffix (concat ("0", binary-to-ascii (16, 8, "", substring(option agent.remote-id,7,1))),2) 
 +); 
 +# log(info,concat("SWITCH-MAC3:",switch-mac3)); 
 +
 +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); 
 +set switch-port = binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1)); 
 +set switch-port-vlan = binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 2, 2));
  
-        log( info,concat("*Leased IP: ",clip, " SWITCH: ",clremote," PORT: ",clcircuit ," (with opt82)") );+log( info,concat("OPTION82 INFO - SWITCHMAC: ",switch-mac," PORTSW: ",switch-port," VLAN: ",switch-port-vlan)); 
 + 
 +log( info,concat("*Leased IP: ",clip, " SWITCH: ",clremote," PORT: ",clcircuit," SWITCHMAC: ",switch-mac," PORTSW: ",switch-port," VLAN: ",switch-port-vlan," (with opt82)") );
 } else { } else {
-        set clhw = concat ( +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,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,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,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,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,5,1))),2), ":", 
-        suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,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,concat("*Leased IP: ",binary-to-ascii(10,8,".",leased-address), " MAC: ", clhw," (without opt82)") );
 } }
 log(info, "=="); log(info, "==");
- 
  
 } }
Рядок 89: Рядок 109:
 </file> </file>
  
-4. Шаблон config/dhcp/option82.template находиться в дефолтном состоянии ([[templating#dhcp_option82|поддерживаемые макросы]])\\+4. Шаблон config/dhcp/option82.template перебуває в дефолтному стані ([[templating#dhcp_option82|підтримувані макроси]])\\
  
-5. В конфиге alter.ini установлена опция NMLEASES = /var/log/dhcpd.log и настроено [[bsddhcpd|правильное логирование ISP-DHCPD]] \\+5. У конфізі alter.ini встановлено опцію NMLEASES = /var/log/dhcpd.log і налаштовано [[bsddhcpd|правильне логування ISP-DHCPD]] \\
  
-6. В OnConnect отключена прибивка по MAC-у. Теперь это проблема ip source guard и dhcp snooping вашего свича (192.168.94.4 в примере).+6. В OnConnect вимкнено прибивання за MAC-у. Тепер це проблема ip source guard і dhcp snooping вашого свіча (192.168.94.4 у прикладі).
  
  
-Исходя из всего вышеуказанного, не сложно заключитьчто привязка планируется по паре полных remote-id/circuit-id. Проверить поведение такого конфига не сложно при помощи следующих нехитрых телодвижений+Виходячи з усього вищевказаного, не складно зробити висновокщо прив'язка планується за парою повних remote-id/circuit-id. Перевірити поведінку такого конфіга не складно за допомогою наступних нехитрих рухів тіла
  
 +====== Відлагодження scapy======
  
-====== Отладка scapy====== 
 <code> <code>
 p="\x01\x01\x05\x02\x06\x11\x22\x34\x44\x55\x66" p="\x01\x01\x05\x02\x06\x11\x22\x34\x44\x55\x66"
Рядок 106: Рядок 126:
 </code> </code>
  
-в ответ на что мы должны получить что-то типа:+у відповідь на що ми маємо отримати щось на кшталт:
  
 <file txt dhcpd.log> <file txt dhcpd.log>
Рядок 121: Рядок 141:
 </file> </file>
  
-а также при прослушивании при помощи +а також під час прослуховування за допомогою  
 <code> <code>
 tcpdump -n -i em0 -s 0 -v -vv tcpdump -n -i em0 -s 0 -v -vv
 </code> </code>
  
-мы будем наблюдать прилетающие к нам +ми спостерігатимемо прилітаючі до нас
  
 <code> <code>
Рядок 136: Рядок 157:
  
  
-====== Особенности работы на свитчах Zyxel ======+====== Особливості роботи на комутаторах Zyxel ======
  
 +GS-4012, GS-3012 взагалі не повертають remote-id. Тому орієнтуватися варто тільки на sub-option 1 (Agent Circuit ID). Тож при побудові шаблону потрібно керуватися ось цим: http://zyxel.ru/kb/2030
  
-GS-4012, GS-3012 вообще не возвращают remote-id. Поэтому ориентироваться стоит только  sub-option 1 (Agent Circuit ID). Так что при построении шаблона требуется руководствоваться вот этим: http://zyxel.ru/kb/2030 
  
 {{ :zyxelopt82.png?400 |}} {{ :zyxelopt82.png?400 |}}
  
-В черновом варианте можно оформить это примерно так:+У чорновому варіанті можна оформити це приблизно так: 
 <code> <code>
     set clremote = binary-to-ascii(10,16,"",substring(option agent.circuit-id,4,2));     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));     set clcircuit = binary-to-ascii(10,16,"",substring(option agent.circuit-id,1,2));
 </code> </code>
-а также исправить option82.template в соответствии с этими реалиями 
  
-что в результате дает нам следующий лог+а також виправити option82.template відповідно до цих реалій 
 + 
 +що в результаті дає нам такий лог 
  
 <code> <code>
Рядок 159: Рядок 183:
  
  
-Пример конфигурации Zyxel GS-3012:+Приклад конфігурації Zyxel GS-3012:
 <code> <code>
 ip address inband-default 192.168.94.4 255.255.255.0  ip address inband-default 192.168.94.4 255.255.255.0 
Рядок 177: Рядок 201:
 </code> </code>
  
-====== Упрощение жизни ====== +====== Спрощення життя ======
-Для более удобного вылавливания пар remote-id и circuit-id существует сервис аналогичный [[uhw|UHW]] находящийся в **docs/opt82_uhw**. Настройка в основном аналогична таковой у оригинального сервиса. Ходят слухи, что грозились дописать еще и самостоятельную активацию абонентом ;)+
  
 +Для зручнішого виловлювання пар remote-id і circuit-id існує сервіс аналогічний [[uhw|UHW]], що знаходиться в **docs/opt82_uhw**. Налаштування в основному аналогічне такому в оригінального сервісу. Ходять чутки, що погрожували дописати ще й самостійну активацію абонентом ;)
 +
 +
 + ====== Патч для isc-dhcp44-server ======
 +
 +Для того, щоб користувачі могли змінювати свої пристрої скільки завгодно разів, і не чекати, поки на сервері закінчиться ліза під їхню адресу, - до DHCP-сервера потрібно застосувати патч і перезібрати пакет із вихідного коду.  
 +
 +<code>
 +--- server/dhcp.c.orig 2017-07-25 16:39:54.000000000 +0300
 ++++ server/dhcp.c 2017-09-13 00:26:29.330284000 +0300
 +@@ -31,6 +31,7 @@
 + #include <limits.h>
 + #include <sys/time.h>
    
 ++extern int flag_dd_option;
 + static void maybe_return_agent_options(struct packet *packet,
 +         struct option_state *options);
 + static int reuse_lease (struct packet* packet, struct lease* new_lease,
 +@@ -4900,8 +4901,13 @@
 +  {
 +  if (LEASE_NOT_EMPTY(pool->free))
 +  candl = LEASE_GET_FIRST(pool->free);
 +- else
 ++ else if (LEASE_NOT_EMPTY(pool->abandoned))
 +  candl = LEASE_GET_FIRST(pool->abandoned);
 ++ else if (flag_dd_option)
 ++ {
 ++ candl = LEASE_GET_FIRST(pool->active);
 ++ candl -> ends = cur_time;
 ++ }
 +  }
 + 
 +  /*
 +</code>
 +
 +
 +<code>
 +--- server/dhcpd.c.orig 2017-07-25 16:39:54.000000000 +0300
 ++++ server/dhcpd.c 2017-09-13 03:25:44.556962000 +0300
 +@@ -57,6 +57,7 @@
 + gid_t set_gid = 0;
 + #endif /* PARANOIA */
 + 
 ++int flag_dd_option = 0;
 + struct iaddr server_identifier;
 + int server_identifier_matched;
 + 
 +@@ -184,6 +185,7 @@
 +               [-play trace-input-file]\n"
 + #endif /* TRACING */
 +               [-pf pid-file] [--no-pid] [-s server]\n"
 ++   "             [-dd] - enable dd mode\n"
 +               [if0 [...ifN]]",
 +    isc_file_basename(progname));
 + }
 +@@ -329,6 +331,8 @@
 +  usage(use_noarg, argv[i-1]);
 +  set_chroot = argv [i];
 + #endif /* PARANOIA */
 ++ } else if (!strcmp (argv [i], "-dd")) {
 ++ flag_dd_option = 1;
 +  } else if (!strcmp (argv [i], "-cf")) {
 +  if (++i == argc)
 +  usage(use_noarg, argv[i-1]);
 +</code>
 +
 +Після того, як перезібрали пакет та встановили його в системі, необхідно через rc.conf ввімкнути даний функціонал, додавши опцію ''-dd'' до параметрів запуску, наприклад:
 +<file ini rc.conf>
 +dhcpd_flags="-q -dd"
 +</file>
 +
 +
option82.1664019551.txt.gz · Востаннє змінено: 2022/09/24 14:39 повз 127.0.0.1