В ISC-DHCPD с версии 4.2 появилась есть возможность делать такое:
shared-network HotSpot {
subnet 10.45.50.0 netmask 255.255.255.0 {
option routers 10.45.50.1;
}
class "AP1-vlan1096" {
match if binary-to-ascii(16, 8, ":", hardware) = "1:0:27:22:52:8a:85"
and binary-to-ascii(16, 8, ".", option agent.circuit-id) = "0.4.4.48.0.5";
}
pool {
allow members of "AP1-vlan1096";
range 10.45.50.11;
}
pool {
deny members of "AP1-vlan1096";
range x.x.x.x x.x.x.y;
}
}То есть, если AP1 (определяемая по её MAC 0:27:22:52:8a:85) запросила адрес в vlan 1096 (0x448) на шестом порту каталиста (который и вставил в запрос option 82 с этими данными), то выдаётся статический адрес 10.45.50.11. А если из другого, то на общих основаниях, из отдельного пула.
Тут же кучка заботливо разложенных граблей: функция binary-to-ascii() отрезает ведущие нули в каждом октете (буквы делает нижнего регистра); внутренная реализация классов в версии 4.2 имеет вычислительную сложность O(n*n) от количества описанных классов, так что масштабируется это решение не очень.
no subject
Date: 2012-08-16 05:14 (UTC)class "AP1-vlan1096" { match if hardware = 1:0:27:22:52:8a:85 and option agent.circuit-id = 0:4:4:30:0:5; }А для масштабируемости можно сдлетьа что-то типа
class "AP1-vlan1096" { match concat(hardware, option agent.circuit-id) } subclass "AP1-vlan1096" 1:0:27:22:52:8a:85:0:4:4:30:0:5;И там вроде сложности другие, по субклассам хеш есть.
Впрочем, пишу по памяти, могу ошибиться.