Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Порівняння попередніх версій Попередня ревізія | Попередня ревізія | ||
option82 [2013/10/19 00:41] |
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=" | ||
+ | </ | ||
+ | |||