Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
| Порівняння попередніх версій Попередня ревізія | Попередня ревізія | ||
|
option82 [2014/06/11 13:38] |
option82 [2023/07/08 14:11] (поточний) nightfly |
||
|---|---|---|---|
| Рядок 1: | Рядок 1: | ||
| + | ====== Mini FAQ ====== | ||
| + | |||
| + | Q: Що потрібно від свіча, щоб запрацювала option 82? \\ | ||
| + | A: Мати налаштований і працюючий dhcp relay з увімкненою option 82, dhcp snooping, що не пропускає клієнтські запити в обхід рілею, та ip source guard, що дропає пакети для айпішок, | ||
| + | |||
| + | |||
| + | Q: На яких свічах має бути рілей? \\ | ||
| + | A: На всіх - рівня доступу.\\ | ||
| + | |||
| + | |||
| + | Q: У нас тут пів мережі на мильницях, | ||
| + | A: Сталася критична помилка - у вас недостатньо грошей для використання цього функціоналу.\\ | ||
| + | |||
| + | |||
| + | |||
| + | ====== Налаштування Ubilling та DHCP option 82 ====== | ||
| + | |||
| + | Для того, щоб усе запрацювало в базовому варіанті, | ||
| + | |||
| + | 1. Підмережу користувачів додано як: | ||
| + | |||
| + | ^ ID ^ Початкова ІР ^ Остання ІР ^ Мережа/ | ||
| + | | 1 | 172.16.0.0 | ||
| + | |||
| + | 2. / | ||
| + | |||
| + | <file ini rc.conf> | ||
| + | ifconfig_em0=" | ||
| + | ifconfig_em0_alias0=" | ||
| + | ifconfig_em0_alias1=" | ||
| + | </ | ||
| + | |||
| + | 3. Шаблон config/ | ||
| + | |||
| + | <file txt global.template> | ||
| + | option domain-name " | ||
| + | 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 " | ||
| + | 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 and exists agent.circuit-id { | ||
| + | if binary-to-ascii(16, | ||
| + | set switch-mac = concat(" | ||
| + | # log(info, | ||
| + | } else { | ||
| + | # set switch-mac = binary-to-ascii(16, | ||
| + | # log(info, | ||
| + | set switch-mac = concat ( | ||
| + | suffix (concat (" | ||
| + | suffix (concat (" | ||
| + | suffix (concat (" | ||
| + | suffix (concat (" | ||
| + | suffix (concat (" | ||
| + | suffix (concat (" | ||
| + | ); | ||
| + | # log(info, | ||
| + | } | ||
| + | set clip = binary-to-ascii(10, | ||
| + | set clremote = binary-to-ascii(16, | ||
| + | set clcircuit = binary-to-ascii(10, | ||
| + | set switch-port = binary-to-ascii(10, | ||
| + | set switch-port-vlan = binary-to-ascii(10, | ||
| + | |||
| + | log( info, | ||
| + | |||
| + | log( info, | ||
| + | } else { | ||
| + | set clhw = concat ( | ||
| + | suffix (concat (" | ||
| + | suffix (concat (" | ||
| + | suffix (concat (" | ||
| + | suffix (concat (" | ||
| + | suffix (concat (" | ||
| + | suffix (concat (" | ||
| + | ); | ||
| + | |||
| + | log( info, | ||
| + | } | ||
| + | log(info, " | ||
| + | |||
| + | } | ||
| + | |||
| + | } | ||
| + | </ | ||
| + | |||
| + | 4. Шаблон config/ | ||
| + | |||
| + | 5. У конфізі alter.ini встановлено опцію NMLEASES = / | ||
| + | |||
| + | 6. В OnConnect вимкнено прибивання за MAC-у. Тепер це проблема ip source guard і dhcp snooping вашого свіча (192.168.94.4 у прикладі). | ||
| + | |||
| + | |||
| + | Виходячи з усього вищевказаного, | ||
| + | |||
| + | ====== Відлагодження scapy====== | ||
| + | |||
| + | < | ||
| + | p=" | ||
| + | dhcp_discover = Ether(src=RandMAC(), | ||
| + | sendp(dhcp_discover) | ||
| + | </ | ||
| + | |||
| + | у відповідь на що ми маємо отримати щось на кшталт: | ||
| + | |||
| + | <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: | ||
| + | Oct 15 00:38:35 test dhcpd: DHCPOFFER on 172.16.0.2 to 30: | ||
| + | </ | ||
| + | |||
| + | а також під час прослуховування за допомогою | ||
| + | |||
| + | < | ||
| + | tcpdump -n -i em0 -s 0 -v -vv | ||
| + | </ | ||
| + | |||
| + | ми спостерігатимемо прилітаючі до нас | ||
| + | |||
| + | < | ||
| + | Agent-Information Option 82, length 13: | ||
| + | Remote-ID........ | ||
| + | Circuit-ID....... | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | ====== Особливості роботи на комутаторах Zyxel ====== | ||
| + | |||
| + | GS-4012, GS-3012 взагалі не повертають remote-id. Тому орієнтуватися варто тільки на sub-option 1 (Agent Circuit ID). Тож при побудові шаблону потрібно керуватися ось цим: http:// | ||
| + | |||
| + | |||
| + | {{ : | ||
| + | |||
| + | У чорновому варіанті можна оформити це приблизно так: | ||
| + | |||
| + | < | ||
| + | set clremote = binary-to-ascii(10, | ||
| + | set clcircuit = binary-to-ascii(10, | ||
| + | </ | ||
| + | |||
| + | а також виправити option82.template відповідно до цих реалій | ||
| + | |||
| + | що в результаті дає нам такий лог | ||
| + | |||
| + | |||
| + | < | ||
| + | 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: == | ||
| + | </ | ||
| + | |||
| + | |||
| + | Приклад конфігурації Zyxel GS-3012: | ||
| + | < | ||
| + | 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 | ||
| + | </ | ||
| + | |||
| + | ====== Спрощення життя ====== | ||
| + | |||
| + | Для зручнішого виловлювання пар remote-id і circuit-id існує сервіс аналогічний [[uhw|UHW]], | ||
| + | |||
| + | |||
| + | | ||
| + | |||
| + | Для того, щоб користувачі могли змінювати свої пристрої скільки завгодно разів, і не чекати, | ||
| + | |||
| + | < | ||
| + | --- server/ | ||
| + | +++ server/ | ||
| + | @@ -31,6 +31,7 @@ | ||
| + | # | ||
| + | # | ||
| + | |||
| + | +extern int flag_dd_option; | ||
| + | | ||
| + | | ||
| + | | ||
| + | @@ -4900,8 +4901,13 @@ | ||
| + | { | ||
| + | if (LEASE_NOT_EMPTY(pool-> | ||
| + | | ||
| + | - else | ||
| + | + else if (LEASE_NOT_EMPTY(pool-> | ||
| + | | ||
| + | + else if (flag_dd_option) | ||
| + | + { | ||
| + | + candl = LEASE_GET_FIRST(pool-> | ||
| + | + candl -> ends = cur_time; | ||
| + | + } | ||
| + | } | ||
| + | |||
| + | /* | ||
| + | </ | ||
| + | |||
| + | |||
| + | < | ||
| + | --- server/ | ||
| + | +++ server/ | ||
| + | @@ -57,6 +57,7 @@ | ||
| + | gid_t set_gid = 0; | ||
| + | # | ||
| + | |||
| + | +int flag_dd_option = 0; | ||
| + | | ||
| + | int server_identifier_matched; | ||
| + | |||
| + | @@ -184,6 +185,7 @@ | ||
| + | | ||
| + | # | ||
| + | | ||
| + | + " | ||
| + | | ||
| + | | ||
| + | } | ||
| + | @@ -329,6 +331,8 @@ | ||
| + | | ||
| + | | ||
| + | # | ||
| + | + } else if (!strcmp (argv [i], " | ||
| + | + flag_dd_option = 1; | ||
| + | } else if (!strcmp (argv [i], " | ||
| + | if (++i == argc) | ||
| + | | ||
| + | </ | ||
| + | |||
| + | Після того, як перезібрали пакет та встановили його в системі, | ||
| + | <file ini rc.conf> | ||
| + | dhcpd_flags=" | ||
| + | </ | ||
| + | |||