AlKov Posted January 31, 2010 Posted January 31, 2010 Есть сеть, поделенная на два сегмента двумя роутерами которые в свою очередь "смотрят" в третий роутер (в "главный", так сказать). На этом роутере поднят dhcp, который раздает IP юзерам (статика, привязанная к МАС-у). Приблизительно такая схема: (юзеры сегм. 1) 10.0.0.0/21------роутер №1------10.1.0.1/24------ |-------10.1.0.254/24-----роутер №3 + dhcp (юзеры сегм. 2) 10.0.8.0/21------роутер №2------10.1.0.2/24------ Есть "служебный ноут", предназначенный для "прописывания" новых МАС-ов (читай - юзеров), которому от dhcp выдаётся стат. "служебный IP". На роутерах №1 и №2 для этой цели подняты сабинтерфейсы со стороны юзеров с IP тех самых "служебных" подсетей, ну например, 172.16.0.0/28 и 172.16.0.16/28 соответственно. Задача - как выдать "правильный" IP от dhcp служебному ноуту, в зависимости от того, за каким роутером (№1, или №2) он находится?? P.S. Роутеры №1 и №2 - DOCSIS CMTS, роутер №3 - PC с Linux Fedora 6 на борту, ISC dhcp v3.1.0. Вставить ник Quote
Nic Posted January 31, 2010 Posted January 31, 2010 Ну так роутеры 1 и 2 по любому работают как dhcp релей, следовательно, как минимум свой ip в пакет вставляют. Так что остается только нужный класс в конфиге дхцп прописать... Вставить ник Quote
AlKov Posted February 1, 2010 Author Posted February 1, 2010 (edited) Ну так роутеры 1 и 2 по любому работают как dhcp релей, следовательно, как минимум свой ip в пакет вставляют. Так что остается только нужный класс в конфиге дхцп прописать...Эмм.. А примерчиком не поделитесь, или ссылкой на описание подобного решения? Не приходилось еще с классами работать..Как бы вроде оно самое, но.. Не могу никак сообразить, как "прикрутить" выдраные данные (то, что требуется есть - IP роутера и МАС клиента) к секции host? Хотелось бы выдавать один конкретный статический IP для конкретного МАС-а, а в примерах с классами везде pool.. Или dhcp сам разберется, из какой секции host вытягивать IP? Вот вроде все есть.. Lease for 10.0.128.24 Router IP: 10.0.128.1 MAC of subscriber: 0:1e:8c:13:17:91 Lease for 10.0.152.24 Router IP: 10.0.152.1 MAC of subscriber: 0:1e:8c:13:17:91 Как бы сиё теперь оформить в dhcpd.conf, чтобы в зависимости от Router IP "срабатывал" конкретный host host user001e8c131791_a { hardware ethernet 00:1E:8C:13:17:91; next-server XX.XX.XX.XX; fixed-address 10.0.128.24; option subnet-mask 255.255.252.0; } host user001e8c131791_b { hardware ethernet 00:1E:8C:13:17:91; next-server XX.XX.XX.XX; fixed-address 10.0.152.24; option subnet-mask 255.255.252.0; } Edited February 1, 2010 by AlKov Вставить ник Quote
Nic Posted February 1, 2010 Posted February 1, 2010 (edited) Кста, если верить доке, то все тривиально - делаете 2 ip адреса в декларации хоста, из разных подсетей. Далее сервер должен, в зависимости от подсети релея, сам выбрать нужный ип. Т.е. так: host user001e8c131791_b { hardware ethernet 00:1E:8C:13:17:91; next-server XX.XX.XX.XX; fixed-address 10.0.152.24; fixed-address 10.0.128.24; option subnet-mask 255.255.252.0; } Ежели не прокатит, тогда class userXXX_1 { match if (binary-to-ascii (16, 8, ":", substring( hardware, 1, 6)) = "0:13:11:d8:1e:aa" and #MAC ноута binary-to-ascii (10, 8, ".", packet( 24, 4)) = "111.112.113.1"); #ip релея. такую конструкцию не проверял, но должно прокатить. } class userXXX_2 { match if (binary-to-ascii (16, 8, ":", substring( hardware, 1, 6)) = "0:13:11:d8:1e:aa" and #MAC ноута binary-to-ascii (10, 8, ".", packet( 24, 4)) = "111.112.114.1"); #ip релея. такую конструкцию не проверял, но должно прокатить. } #остальной конфиг shared-network super-mega-ip-net{ subnet 111.112.113.1 netmask 255.255.255.0{ pool { range 111.112.113.10; allow members of userXXX_1; } pool { #остальные хомячки; } } subnet 111.112.114.1 netmask 255.255.255.0{ pool { range 111.112.114.10; allow members of userXXX_1; } pool { #остальные хомячки; } } } Edited February 1, 2010 by Nic Вставить ник Quote
AlKov Posted February 2, 2010 Author Posted February 2, 2010 Кста, если верить доке, то все тривиально - делаете 2 ip адреса в декларации хоста, из разных подсетей. Далее сервер должен, в зависимости от подсети релея, сам выбрать нужный ип.Т.е. так: host user001e8c131791_b { hardware ethernet 00:1E:8C:13:17:91; next-server XX.XX.XX.XX; fixed-address 10.0.152.24; fixed-address 10.0.128.24; option subnet-mask 255.255.252.0; } Т.е. Вы хотите сказать, что можно не заморачиваться с классами, а просто сделать два объявления соотв. сабнетов, а dhcp уже сам разберется по ответу от релея?Ежели не прокатит, тогда class userXXX_1 { match if (binary-to-ascii (16, 8, ":", substring( hardware, 1, 6)) = "0:13:11:d8:1e:aa" and #MAC ноута binary-to-ascii (10, 8, ".", packet( 24, 4)) = "111.112.113.1"); #ip релея. такую конструкцию не проверял, но должно прокатить. } class userXXX_2 { match if (binary-to-ascii (16, 8, ":", substring( hardware, 1, 6)) = "0:13:11:d8:1e:aa" and #MAC ноута binary-to-ascii (10, 8, ".", packet( 24, 4)) = "111.112.114.1"); #ip релея. такую конструкцию не проверял, но должно прокатить. } #остальной конфиг shared-network super-mega-ip-net{ subnet 111.112.113.1 netmask 255.255.255.0{ pool { range 111.112.113.10; allow members of userXXX_1; } pool { #остальные хомячки; } } subnet 111.112.114.1 netmask 255.255.255.0{ pool { range 111.112.114.10; allow members of userXXX_1; } pool { #остальные хомячки; } } } А здесь объявление пула обязательно? Ведь по большому счету это будет один IP. Вставить ник Quote
AlKov Posted February 2, 2010 Author Posted February 2, 2010 Кста, если верить доке, то все тривиально - делаете 2 ip адреса в декларации хоста, из разных подсетей. Далее сервер должен, в зависимости от подсети релея, сам выбрать нужный ип.Т.е. так: host user001e8c131791_b { hardware ethernet 00:1E:8C:13:17:91; next-server XX.XX.XX.XX; fixed-address 10.0.152.24; fixed-address 10.0.128.24; option subnet-mask 255.255.252.0; } Не катит.. :( В лог матюгает вот так Feb 2 15:32:44 router dhcpd: /etc/dhcpd/other.conf line 29: Only one fixed address declaration per host. Feb 2 15:32:44 router dhcpd: fixed-address 10.0.128.24; Feb 2 15:32:44 router dhcpd: ^ Feb 2 15:32:44 router dhcpd: /etc/dhcpd.conf line 805: /etc/dhcpd/other.conf: bad parse. Feb 2 15:32:44 router dhcpd: include "/etc/dhcpd/other.conf" Feb 2 15:32:44 router dhcpd: ^ Feb 2 15:32:44 router dhcpd: Configuration file errors encountered -- exiting Это если два IP прописаны. По одному все в норме. Может это как-то по-другому объявляется, типа два объявления host?? Вставить ник Quote
zlobar Posted February 2, 2010 Posted February 2, 2010 Может это как-то по-другому объявляется, типа два объявления host?? Именно! host aaa { hardware ethernet 00:1d:60:95:e6:55; fixed-address 10.110.45.102; } host bbb { hardware ethernet 00:1d:60:95:e6:55; fixed-address 10.110.40.30; } IP из сетей на разных интерфейсах. Вставить ник Quote
Abram Posted February 2, 2010 Posted February 2, 2010 Может это как-то по-другому объявляется, типа два объявления host?? Именно! host aaa { hardware ethernet 00:1d:60:95:e6:55; fixed-address 10.110.45.102; } host bbb { hardware ethernet 00:1d:60:95:e6:55; fixed-address 10.110.40.30; } IP из сетей на разных интерфейсах. Подтверждаю, давно такое есть - работает. Вставить ник Quote
AlKov Posted February 2, 2010 Author Posted February 2, 2010 (edited) Подтверждаю, давно такое есть - работает. А вот такое не пробовали? host user001 { hardware ethernet 00:11:7F:02:1B:66; next-server XX.XX.XX.XX; fixed-address 10.0.128.24,10.0.152.24; } Однако тоже работает! :) Вычитал на opennet (man dhcpd). Параметр fixed-address fixed-address адрес [, адрес ... ]; Параметр fixed-address используется для назначения одного или нескольких постоянных адресов клиенту. Параметр может присутствовать только в секции host. Если указано более одного адреса, то клиенту будет присвоен адрес соответствующий подсети к которой подключен клиент в данный момент. Если нет адресов соответствующих подсети в которую включен клиент, то считается что этот клиент не соответствует объявлению host и эти адреса ему не присваиваются. Каждый адрес может быть IP адресом или доменным именем, которое резолвится в один или несколько IP адресов. Вот только немного смущает момент с масками.. У меня в одной подсети маска /21, а в другой /29 и для "обычного" юзера в каждой секции host я добавляю option subnet-mask XXX.XXX.XXX.XXX; Там у всех маска одинакова. А здесь как быть? Либо все же логичнее сделать два объявления host, или (судя по ману), dhcpd сам разберется с масками и "отдаст" клиенту нужную? Edited February 2, 2010 by AlKov Вставить ник Quote
Nic Posted February 2, 2010 Posted February 2, 2010 Предлагаю попробовать оба варианта и рассказать, что получилось. Вставить ник 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.