Jump to content
Калькуляторы

ISC-DHCP пакет не попадает в класс opt 82

Прошу помощи, пакетик не попадает в класс по 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 отлично парсится. Однако в класс пакет так и не попадает, и уходит в гостевую подсеть.

 

Почему пакет не попадает в класс?

Share this post


Link to post
Share on other sites

У вас dhcp-сервер получает запросы от релея или видет клиентов по L2?

Share this post


Link to post
Share on other sites

От релея, по L2 видит только соседние серваки.

Edited by terrible

Share this post


Link to post
Share on other sites

Значит giaddr попадает в subnet, содержаший 10.249.201.28/32, ну дальше сами понимаете

Share this post


Link to post
Share on other sites

giaddr - насколько я понимаю, это адрес релея. Подсети релеев указаны отдельно в конфиге (172.16.*)

 

Или не так? я просто не пойму куда копать :(

Как, кстати, вывести полный дебаг dhcpd? а то dhcpd -d -f em0 полностью пакет не показыват, только типа пакета и кому летит

Share this post


Link to post
Share on other sites

Выкладывайте дамп dhcp-запросов(с сервера) в формате pcap, от клиента, который получает 10.249.201.28 вместо 192.168.28.163

Share this post


Link to post
Share on other sites

Снял пакет 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 by terrible

Share this post


Link to post
Share on other sites

Дамп у вас какой-то грустный совсем(надо было у tcpdump ставить опцию -s 0). Но раз проблема в лизах, то тут 3 пути:

1. прикрутить костыль к биллингу, который будет удалять лизу(при смене статуса должник-оплативший и наооборт) через omshell

2. использовать dhcp сервер, который использует sql-запросы для выдачи адресов

3. поставить маленький lease-time (?)

Share this post


Link to post
Share on other sites

Получается, что клиент уже брал адрес 10.249.201.28, и просит его продлить.

А как тогда ему дать отказ в продлении и выдать другой адрес?

Дать ему NAK, тогда он начнет все заново, начиная с DISCOVERY, и просить старый адрес уже не будет.

Share this post


Link to post
Share on other sites

1. прикрутить костыль к биллингу, который будет удалять лизу(при смене статуса должник-оплативший и наооборт) через omshell

Обязательно ознакомлюсь с этим

2. использовать dhcp сервер, который использует sql-запросы для выдачи адресов

Есть FreeRADIUS, он то всё отлично выдаёт и ему плевать на любые параметры DHCP пакета, кроме Option 82. Но его использование на продакшене пока не определено.

3. поставить маленький lease-time (?)

Он и так равен 15 минутам, однако dhcpd продолжает выдавать IP, который уже этому клиенту выдавал :( По сути это и есть та самая проблема, о которой я эту тему и начал.

Дать ему NAK, тогда он начнет все заново, начиная с DISCOVERY, и просить старый адрес уже не будет.

А это как?

Можно конечно вообще убить гостевую подсеть, тогда всем, кто не прописан в классах, будет выдан NAK. Однако есть другая проблема в этом: если поменять IP у клиента в конфиге dhcpd, то dhcpd будет продолжать отдавать ему старый IP адрес. По сути получится та-же проблема, что и в заголовке темы.

Share this post


Link to post
Share on other sites

Дать ему NAK, тогда он начнет все заново, начиная с DISCOVERY, и просить старый адрес уже не будет.

А это как?

Можно конечно вообще убить гостевую подсеть, тогда всем, кто не прописан в классах, будет выдан NAK. Однако есть другая проблема в этом: если поменять IP у клиента в конфиге dhcpd, то dhcpd будет продолжать отдавать ему старый IP адрес. По сути получится та-же проблема, что и в заголовке темы.

А что у Вас за DHCP-сервер?

Share this post


Link to post
Share on other sites
2. использовать dhcp сервер, который использует sql-запросы для выдачи адресов

ой а подскажите такой рабочий сервер под nix

Share this post


Link to post
Share on other sites

isc-dhcp31

Срочно прекращайте.

Используйте DHCP-сервер, специально заточенный под Option 82, а не reference design с костылями.

Share this post


Link to post
Share on other sites

isc-dhcp31

Срочно прекращайте.

Используйте DHCP-сервер, специально заточенный под Option 82, а не reference design с костылями.

Да. Cisco Network Registrar, отличная штука :)

Share this post


Link to post
Share on other sites

isc-dhcp31

Срочно прекращайте.

Используйте DHCP-сервер, специально заточенный под Option 82, а не reference design с костылями.

Да. Cisco Network Registrar, отличная штука :)

Я имел в виду самописный. Вверху две штуки, вариант от Ivan_83 я смотрел - недурно. Хотя лично сам я использую свой, третий вариант - так сложилось :).

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this