Перейти к содержимому
Калькуляторы

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Изменено пользователем terrible

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Изменено пользователем terrible

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

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

А это как?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

А это как?

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

http://forum.nag.ru/forum/index.php?showtopic=64849

 

и в соседнем топике аналогичный функционал на сях.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

isc-dhcp31

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

isc-dhcp31

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

isc-dhcp31

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.