kisa Posted February 22, 2006 Posted February 22, 2006 Доброго времени суток! Есть тестовая конфигурация. Коммутатор des-3526 (172.21.21.189), на котором включен DHCP relay. К нему подключен машинка FreeBSD с dhcpd 3.0.3 (172.21.21.191) и еще одна станция, которая будет выступать dhcp клиентом, подключена к порту #3.Все порты в default влане. Попытка получить адрес клиентом ни к чему хорошему не приводит. Пробовал использовать виндовый dhcp сервер, который упоминают на сайте длинка... с ним все ок. То есть проблема именно в настройках dhcpd. Конфиг dhcpd: if exists agent.circuit-id { log ( info, concat( "Lease for ", binary-to-ascii (10, 8, ".", leased-address), " is connected to interface ", binary-to-ascii (10, 8, "/", suffix ( option agent.circuit-id, 2)), " VLAN ", binary-to-ascii (10, 16, "", substring( option agent.circuit-id, 2, 2)), "on switch ", binary-to-ascii (16, 8, ":", substring( option agent.remote-id, 2, 6)))); log ( info, concat( "Lease for ", binary-to-ascii (10, 8, ".", leased-address), " raw option-82 info is CID: ", binary-to-ascii (10, 8, ":", option agent.circuit-id), " AID: ", binary-to-ascii (16, 8, ".", option agent.remote-id))); } class "c2" { match if option agent.circuit-id = 0:4:0:1:0:3; } subnet 172.21.21.0 netmask 255.255.255.0 { pool { allow members of "c2"; range 172.21.21.53; } } Вот логи dhcpd: dhcpd: Lease for 172.21.21.53 is connected to interface 0/3, VLAN 1 on switch 0:13:46:e6:ba:d2 dhcpd: Lease for 172.21.21.53 raw option-82 info is CID: 0:4:0:1:0:3 AID: 0.6.0.13.46.e6.ba.d2 dhcpd: DHCPDISCOVER from 00:11:11:25:ec:fa via 172.21.21.189 dhcpd: DHCPOFFER on 172.21.21.53 to 00:11:11:25:ec:fa via 172.21.21.189 dhcpd: DHCPREQUEST for 172.21.21.53 (172.21.21.191) from 00:11:11:25:ec:fa via rl0: lease 172.21.21.53 unavailable. dhcpd: DHCPNAK on 172.21.21.53 to 00:11:11:25:ec:fa via rl0 dhcpd: DHCPDISCOVER from 00:11:11:25:ec:fa via rl0: network 172.21.21/24: no free leases dhcpd: Lease for 172.21.21.53 is connected to interface 0/3, VLAN 1 on switch 0:13:46:e6:ba:d2 dhcpd: Lease for 172.21.21.53 raw option-82 info is CID: 0:4:0:1:0:3 AID: 0.6.0.13.46.e6.ba.d2 dhcpd: DHCPREQUEST for 172.21.21.53 (172.21.21.191) from 00:11:11:25:ec:fa via 172.21.21.189 dhcpd: DHCPACK on 172.21.21.53 to 00:11:11:25:ec:fa via 172.21.21.189 dhcpd: Lease for 172.21.21.53 is connected to interface 0/3, VLAN 1 on switch 0:13:46:e6:ba:d2 dhcpd: Lease for 172.21.21.53 raw option-82 info is CID: 0:4:0:1:0:3 AID: 0.6.0.13.46.e6.ba.d2 dhcpd: DHCPDISCOVER from 00:11:11:25:ec:fa via 172.21.21.189 dhcpd: DHCPOFFER on 172.21.21.53 to 00:11:11:25:ec:fa via 172.21.21.189 dhcpd: DHCPREQUEST for 172.21.21.53 (172.21.21.191) from 00:11:11:25:ec:fa via rl0: lease 172.21.21.53 unavailable. dhcpd: DHCPNAK on 172.21.21.53 to 00:11:11:25:ec:fa via rl0 и т.д. многократные повторенения данных блоков. Почему DHCPDISCOVER и DHCPOFFER приходят via 172.21.21.189 (это relay), а вот DHCPREQUEST приходит via rl0? Ведь таким образом в него не добавляются заголовки option 82... может поэтому и возникает dhcpd: DHCPNAK on 172.21.21.53 to 00:11:11:25:ec:fa via rl0 ?? Хотя с другой стороны, в списках рассылки dhcp народ говорит, что типа все ок: запросы DHCPREQUEST юникастовые и их не все dhcp агенты отслеживают и, соответвественно, не добавляют в них option 82.. в таком случае сам dhcpd сервер берет option.circuit-id из ранее записанной для IP адреса lease информации. У кого работают схемы c option 82 помогите разобраться. Спасибо. Вставить ник Quote
znick Posted February 22, 2006 Posted February 22, 2006 попробуй для начала на клиентской машине запустить tcpdump и посмотри какие пакеты приходят от винды, и сравни их с теми пакетами что посылает dhcp от FreeBSD Вставить ник Quote
kisa Posted February 23, 2006 Author Posted February 23, 2006 Вопрос снят. Проблема решена путем усложнения тестовой схемы к тому виду, в котором она будет использоваться с продакшене. Хотя очень было интересно узнать почему все-таки не работает простой пример с одним вланом. Может кому пригодится, вот пример настроек dhcpd для случая, когда он находится в том же вилане, что и управляющие интерфейсы свитчей. class "c3" { match if option agent.circuit-id = 0:4:0:2:0:3; } class "c5" { match if option agent.circuit-id = 0:4:0:3:0:5; } shared-network sw { subnet 172.21.21.0 netmask 255.255.255.0 { } subnet 10.35.0.0 netmask 255.255.255.0 { pool { allow members of "c5"; range 10.35.0.1; } } subnet 10.33.0.0 netmask 255.255.255.0 { pool { allow members of "c3"; range 10.33.0.1; } } } Первый subnet - это подсеть свитчей, в этой же сети находится единственный интерфейс dhcpd сервера. Вторые два subnet'а - это тестовые сети для клиентов из разных вланов. Чтобы окончательно использовать схему в боевых условиях останется только добавить в условие math для классов опцию agent.remote-id. Вставить ник Quote
kisa Posted March 8, 2006 Author Posted March 8, 2006 История продолжается. Озадачился моментом, когда к одному порту будет подключено несколько клиентов. Например, два компьютера в одной квартире. Соответсвенно, хотелось бы в этом случае не выдавать пул из двух адресов на порт, а специально для таких случаев все-таки снова вспомнить про мас адреса. Соответсвенно, добавляю допольнительное ограничение на условие попадания в класс: class "c1" { match if bla-bla and hardware "xx:xx:xx:xx:xx:xx"; } Проверяю.... не работает :( Убираю допольнительное условие hardware и добавляю логирование значения переменной hardware. Получаю клиентом адрес, смотрю в лог и обнаруживаю, что к мас адресу добавлен префикс "1:". То есть в итоге вижуе "1:xx:xx:xx:xx:xx:xx". Добавляю эту единичку в условие, все работает! Может кто пояснить сию странность? Спасибо. Вставить ник 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.