terrible Posted June 17, 2011 Posted June 17, 2011 Прошу помощи, пакетик не попадает в класс по opt 82. Кусок конфига, в котором клиента пробую загнать в класс только по номеру порта: if exists agent.circuit-id { log(info, concat("Lease" ," IP ", binary-to-ascii(10, 8, ".", leased-address) ," MAC ", binary-to-ascii(16, 8, ":", substring(hardware, 1, 6)) ," port ", binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 4, 2)) ," VLAN ", binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 2, 2)) ," switch ", binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 20)) ) ); } shared-network "clients" { subnet 192.168.28.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; option broadcast-address 192.168.28.255; option routers 192.168.28.1; option ms-classless-static-routes 16, 192, 168, 192, 168, 28, 1; option rfc3442-classless-static-routes 16, 192, 168, 192, 168, 28, 1; class "5068" { match if binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 4, 2)) = "2"; } pool { range 192.168.28.163; allow members of "5068"; } } subnet 172.16.3.0 netmask 255.255.255.0 { } subnet 172.16.28.0 netmask 255.255.255.0 { } subnet 10.249.200.0 netmask 255.255.252.0 { range 10.249.200.1 10.249.203.254; option routers 10.249.200.1; } } При получении DHCP пакета, получаю в лог сообщение: Lease IP 10.249.201.28 MAC 0:1:a3:12:e2:94 port 2 VLAN 28 switch 0:21:91:52:dc:b4 Т.е. opt 82 отлично парсится. Однако в класс пакет так и не попадает, и уходит в гостевую подсеть. Почему пакет не попадает в класс? Вставить ник Quote
s.lobanov Posted June 17, 2011 Posted June 17, 2011 У вас dhcp-сервер получает запросы от релея или видет клиентов по L2? Вставить ник Quote
terrible Posted June 17, 2011 Author Posted June 17, 2011 (edited) От релея, по L2 видит только соседние серваки. Edited June 17, 2011 by terrible Вставить ник Quote
s.lobanov Posted June 17, 2011 Posted June 17, 2011 Значит giaddr попадает в subnet, содержаший 10.249.201.28/32, ну дальше сами понимаете Вставить ник Quote
terrible Posted June 17, 2011 Author Posted June 17, 2011 giaddr - насколько я понимаю, это адрес релея. Подсети релеев указаны отдельно в конфиге (172.16.*) Или не так? я просто не пойму куда копать :( Как, кстати, вывести полный дебаг dhcpd? а то dhcpd -d -f em0 полностью пакет не показыват, только типа пакета и кому летит Вставить ник Quote
s.lobanov Posted June 17, 2011 Posted June 17, 2011 Выкладывайте дамп dhcp-запросов(с сервера) в формате pcap, от клиента, который получает 10.249.201.28 вместо 192.168.28.163 Вставить ник Quote
terrible Posted June 17, 2011 Author Posted June 17, 2011 (edited) Снял пакет DHCP с помощью FreeRADIUS: Received DHCP-Request of id ff97665f from 172.16.28.1:68 to 172.16.3.1:67 DHCP-Opcode = Client-Message DHCP-Hardware-Type = Ethernet DHCP-Hardware-Address-Length = 6 DHCP-Hop-Count = 1 DHCP-Transaction-Id = 4288112223 DHCP-Number-of-Seconds = 0 DHCP-Flags = 0 DHCP-Client-IP-Address = 10.249.201.28 DHCP-Your-IP-Address = 0.0.0.0 DHCP-Server-IP-Address = 0.0.0.0 DHCP-Gateway-IP-Address = 172.16.28.1 DHCP-Client-Hardware-Address = 00:01:a3:12:e2:94 DHCP-Message-Type = DHCP-Request DHCP-Client-Identifier = 00:01:a3:12:e2:94 DHCP-Hostname = "terre4t65h6hh" DHCP-Vendor-Class-Identifier = "MSFT 5.0" DHCP-Parameter-Request-List = DHCP-Subnet-Mask DHCP-Parameter-Request-List = DHCP-Domain-Name DHCP-Parameter-Request-List = DHCP-Router-Address DHCP-Parameter-Request-List = DHCP-Domain-Name-Server DHCP-Parameter-Request-List = DHCP-NETBIOS-Name-Servers DHCP-Parameter-Request-List = DHCP-NETBIOS-Node-Type DHCP-Parameter-Request-List = DHCP-NETBIOS DHCP-Parameter-Request-List = DHCP-Perform-Router-Discovery DHCP-Parameter-Request-List = DHCP-Static-Routes DHCP-Parameter-Request-List = 249 DHCP-Parameter-Request-List = DHCP-Vendor DHCP-Relay-Agent-Information = 0x01060004001c00020208000600219152dcb4 Получается, что клиент уже брал адрес 10.249.201.28, и просит его продлить. А как тогда ему дать отказ в продлении и выдать другой адрес? Блин, поменял MAC у клиента - он стал всё нормально получать оО Поменял назад - такая-же кака Дамп пакетов: http://files.mail.ru/2GJ6N1 Edited June 17, 2011 by terrible Вставить ник Quote
s.lobanov Posted June 17, 2011 Posted June 17, 2011 Дамп у вас какой-то грустный совсем(надо было у tcpdump ставить опцию -s 0). Но раз проблема в лизах, то тут 3 пути: 1. прикрутить костыль к биллингу, который будет удалять лизу(при смене статуса должник-оплативший и наооборт) через omshell 2. использовать dhcp сервер, который использует sql-запросы для выдачи адресов 3. поставить маленький lease-time (?) Вставить ник Quote
Abram Posted June 18, 2011 Posted June 18, 2011 Получается, что клиент уже брал адрес 10.249.201.28, и просит его продлить. А как тогда ему дать отказ в продлении и выдать другой адрес? Дать ему NAK, тогда он начнет все заново, начиная с DISCOVERY, и просить старый адрес уже не будет. Вставить ник Quote
terrible Posted June 19, 2011 Author Posted June 19, 2011 1. прикрутить костыль к биллингу, который будет удалять лизу(при смене статуса должник-оплативший и наооборт) через omshell Обязательно ознакомлюсь с этим 2. использовать dhcp сервер, который использует sql-запросы для выдачи адресов Есть FreeRADIUS, он то всё отлично выдаёт и ему плевать на любые параметры DHCP пакета, кроме Option 82. Но его использование на продакшене пока не определено. 3. поставить маленький lease-time (?) Он и так равен 15 минутам, однако dhcpd продолжает выдавать IP, который уже этому клиенту выдавал :( По сути это и есть та самая проблема, о которой я эту тему и начал. Дать ему NAK, тогда он начнет все заново, начиная с DISCOVERY, и просить старый адрес уже не будет. А это как? Можно конечно вообще убить гостевую подсеть, тогда всем, кто не прописан в классах, будет выдан NAK. Однако есть другая проблема в этом: если поменять IP у клиента в конфиге dhcpd, то dhcpd будет продолжать отдавать ему старый IP адрес. По сути получится та-же проблема, что и в заголовке темы. Вставить ник Quote
Abram Posted June 22, 2011 Posted June 22, 2011 Дать ему NAK, тогда он начнет все заново, начиная с DISCOVERY, и просить старый адрес уже не будет. А это как? Можно конечно вообще убить гостевую подсеть, тогда всем, кто не прописан в классах, будет выдан NAK. Однако есть другая проблема в этом: если поменять IP у клиента в конфиге dhcpd, то dhcpd будет продолжать отдавать ему старый IP адрес. По сути получится та-же проблема, что и в заголовке темы. А что у Вас за DHCP-сервер? Вставить ник Quote
mukca Posted June 22, 2011 Posted June 22, 2011 2. использовать dhcp сервер, который использует sql-запросы для выдачи адресов ой а подскажите такой рабочий сервер под nix Вставить ник Quote
Ivan_83 Posted June 22, 2011 Posted June 22, 2011 http://forum.nag.ru/forum/index.php?showtopic=64849 и в соседнем топике аналогичный функционал на сях. Вставить ник Quote
Abram Posted June 23, 2011 Posted June 23, 2011 isc-dhcp31 Срочно прекращайте. Используйте DHCP-сервер, специально заточенный под Option 82, а не reference design с костылями. Вставить ник Quote
ilili Posted June 24, 2011 Posted June 24, 2011 isc-dhcp31 Срочно прекращайте. Используйте DHCP-сервер, специально заточенный под Option 82, а не reference design с костылями. Да. Cisco Network Registrar, отличная штука :) Вставить ник Quote
Abram Posted June 24, 2011 Posted June 24, 2011 isc-dhcp31 Срочно прекращайте. Используйте DHCP-сервер, специально заточенный под Option 82, а не reference design с костылями. Да. Cisco Network Registrar, отличная штука :) Я имел в виду самописный. Вверху две штуки, вариант от Ivan_83 я смотрел - недурно. Хотя лично сам я использую свой, третий вариант - так сложилось :). Вставить ник Quote
terrible Posted July 8, 2011 Author Posted July 8, 2011 Проблему решил патчем: http://forum.nag.ru/forum/index.php?showtopic=61077&st=20&p=551071entry551071 Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.