mrsaygo Posted June 10, 2011 Posted June 10, 2011 Ubuntu server 11.04 apt-get install dhcp3-server никаких танцев с включением USE_SOCKETS не проводилось, - все из коробки. 2 локальных интерфейса 192.168.10.1 - оттдает ИП с привязкой к маку - все работает 10.0.0.1 - отдает на d-link 3550 и далее (на данный момент тестируется только с d-link 3550) Конфиги: dhcpd.conf subnet 10.0.0.0 netmask 255.255.0.0 { include "/etc/dhcp/pb.conf"; } subnet 192.168.0.0 netmask 255.255.0.0{ include "/etc/dhcp/sb.conf"; } pb.conf option domain-name-servers хх.хх.хх.хх ,хх.хх.хх.хх; option routers 10.0.0.1; default-lease-time 30; max-lease-time 70; authoritative; option broadcast-address 10.0.255.255; option ntp-servers 195.137.202.4; #allow unknown-clients; log(info, "***"); if exists agent.circuit-id { log( info,concat("*Leased ",binary-to-ascii(10,8,".",leased-address)," (with opt82)") ); log( info,concat("*Remote-ID: ",binary-to-ascii(16,8,":",substring(option agent.remote-id,2,6))) ); log( info,concat("*Port: ",binary-to-ascii(10,8,"",suffix(option agent.circuit-id,1))) ); } else { log( info,concat("*Leased ",binary-to-ascii(10,8,".",leased-address)," (without opt82)") ); } log(info, "***"); class "10.0.2.254:7" { match if binary-to-ascii (10, 8, "", suffix( option agent.circuit-id, 1)) = "7" and binary-to-ascii(10,8,".",packet(24,4))="10.0.2.254"; } pool { range 10.0.2.7; allow members of "10.0.2.254:7"; } sb.conf range 192.168.200.1 192.168.200.250; option domain-name-servers хх.хх.хх.хх,хх.хх.хх.хх; option routers 192.168.10.1; default-lease-time 1114400; max-lease-time 11172800; authoritative; option broadcast-address 192.168.255.255; option ntp-servers хх.хх.хх.хх host 1a23{ hardware ethernet 00:1c:25:0f:30:a9; fixed-address 192.168.10.33; } (В файлах даны настройки по одному хосту для каждой подсети) А теперь суть проблемы - включаю ноут в 7 порт свича,- и получаю 10.0.2.7 - все хорошо. Syslog ubuntu dhcpd: *** ubuntu dhcpd: *Leased 10.0.2.7 (with opt82) ubuntu dhcpd: *Remote-ID: 0:19:5b:8b:7:10 ubuntu dhcpd: *Port: 7 ubuntu dhcpd: *** ubuntu dhcpd: DHCPREQUEST for 10.0.2.7 (10.0.0.1) from 00:13:77:69:76:34 (homa) via 10.0.2.254 ubuntu dhcpd: DHCPACK on 10.0.2.7 to 00:13:77:69:76:34 (homa) via 10.0.2.254 Перетыкаю патчкорд в другой ноут - Syslog сначала дает Jun 10 16:23:14 ubuntu dhcpd: DHCPDISCOVER from 00:1e:33:07:ef:89 via 10.0.2.254: network 10.0.0.0/16: no free leases Jun 10 16:23:23 ubuntu dhcpd: DHCPDISCOVER from 00:1e:33:07:ef:89 via eth0: network 10.0.0.0/16: no free leases Jun 10 16:23:23 ubuntu dhcpd: DHCPDISCOVER from 00:1e:33:07:ef:89 via 10.0.2.254: network 10.0.0.0/16: no free leases Оно то и понятно - leases Но потом начинается такое - Jun 10 16:26:06 ubuntu dhcpd: *** Jun 10 16:26:06 ubuntu dhcpd: DHCPDISCOVER from 00:1e:33:07:ef:89 via 10.0.2.254 Jun 10 16:26:06 ubuntu dhcpd: DHCPOFFER on 10.0.2.7 to 00:1e:33:07:ef:89 (NOUT233) via 10.0.2.254 Jun 10 16:26:06 ubuntu dhcpd: DHCPREQUEST for 10.0.2.7 (10.0.0.1) from 00:1e:33:07:ef:89 via eth0: lease 10.0.2.7 unavailable. Jun 10 16:26:06 ubuntu dhcpd: DHCPNAK on 10.0.2.7 to 00:1e:33:07:ef:89 via eth0 Jun 10 16:26:06 ubuntu dhcpd: *** Jun 10 16:26:06 ubuntu dhcpd: *Leased 10.0.2.7 (with opt82) Jun 10 16:26:06 ubuntu dhcpd: *Remote-ID: 0:19:5b:8b:7:10 Jun 10 16:26:06 ubuntu dhcpd: *Port: 7 Jun 10 16:26:06 ubuntu dhcpd: *** Jun 10 16:26:06 ubuntu dhcpd: DHCPREQUEST for 10.0.2.7 (10.0.0.1) from 00:1e:33:07:ef:89 (NOUT233) via 10.0.2.254 Jun 10 16:26:06 ubuntu dhcpd: DHCPACK on 10.0.2.7 to 00:1e:33:07:ef:89 (NOUT233) via 10.0.2.254 Jun 10 16:26:07 ubuntu dhcpd: DHCPDISCOVER from 00:1e:33:07:ef:89 via eth0: network 10.0.0.0/16: no free leases Jun 10 16:26:07 ubuntu dhcpd: *** Jun 10 16:26:07 ubuntu dhcpd: *Leased 10.0.2.7 (with opt82) Jun 10 16:26:07 ubuntu dhcpd: *Remote-ID: 0:19:5b:8b:7:10 Jun 10 16:26:07 ubuntu dhcpd: *Port: 7 Jun 10 16:26:07 ubuntu dhcpd: *** Jun 10 16:26:07 ubuntu dhcpd: DHCPDISCOVER from 00:1e:33:07:ef:89 via 10.0.2.254 Jun 10 16:26:07 ubuntu dhcpd: DHCPOFFER on 10.0.2.7 to 00:1e:33:07:ef:89 (NOUT233) via 10.0.2.254 Jun 10 16:26:07 ubuntu dhcpd: DHCPREQUEST for 10.0.2.7 (10.0.0.1) from 00:1e:33:07:ef:89 via eth0: lease 10.0.2.7 unavailable. Jun 10 16:26:07 ubuntu dhcpd: DHCPNAK on 10.0.2.7 to 00:1e:33:07:ef:89 via eth0 Jun 10 16:26:07 ubuntu dhcpd: *** Jun 10 16:26:07 ubuntu dhcpd: *Leased 10.0.2.7 (with opt82) Jun 10 16:26:07 ubuntu dhcpd: *Remote-ID: 0:19:5b:8b:7:10 Jun 10 16:26:07 ubuntu dhcpd: *Port: 7 Jun 10 16:26:07 ubuntu dhcpd: *** Jun 10 16:26:07 ubuntu dhcpd: DHCPREQUEST for 10.0.2.7 (10.0.0.1) from 00:1e:33:07:ef:89 (NOUT233) via 10.0.2.254 Jun 10 16:26:07 ubuntu dhcpd: DHCPACK on 10.0.2.7 to 00:1e:33:07:ef:89 (NOUT233) via 10.0.2.254 При этом ноут адрес не получает, но логи пишут вроде адрес отдан. Пробовал менять время leases - толку нет. Цель - заставить option 82 работать правильно, - при смене устройства не засорять логи, а по истечении скажем 10 минут (default-lease-time 600;) отдавать правильный адрес уже другому маку. В какую сторону смотреть? Вставить ник Quote
dsk Posted June 12, 2011 Posted June 12, 2011 То ли RX в вашем ноуте не работает, то ли свич релеящий бузит и до ноута ответ дхцп сервера не доводит. Вставить ник Quote
mrsaygo Posted June 13, 2011 Author Posted June 13, 2011 То ли RX в вашем ноуте не работает, то ли свич релеящий бузит и до ноута ответ дхцп сервера не доводит. RX отпадает - тестил на разных машинках, при чем периодически отдает нормально (связано с лиз таймом). Свич - тоже менял, 3526 - поведение такое же. Вставить ник Quote
dex Posted January 9, 2012 Posted January 9, 2012 ubuntu 11.10, isc-dhcp-server-4.1.1-P1-17ubuntu10.1, настроен под option 82, конфиги один в один тестовый свич des-3828 с натсройками: DES-3800:admin#show dhcp_relay Command: show dhcp_relay DHCP/BOOTP Relay Status : Enabled DHCP/BOOTP Hops Count Limit : 4 DHCP/BOOTP Relay Time Threshold : 0 DHCP Relay Agent Information Option 82 State : Enabled DHCP Relay Agent Information Option 82 Check : Enabled DHCP Relay Agent Information Option 82 Policy : Replace Interface Server 1 Server 2 Server 3 Server 4 ------------ --------------- --------------- --------------- -------------- System 192.168.168.6 Те же грабли, адрес выдается, DHCPREQUEST возвращает unavailable, и тут же проходит dhcpnak с отбоем. И цикл повторяется с ***енной скоростью, в syslog сыпятся те же, что и выше сообщения. Как решилась задачка? Вставить ник Quote
lan-viper Posted January 9, 2012 Posted January 9, 2012 dex, по проблеме топикстартера: у него для класса 10.0.2.254:7 (в который попадает абсолютно всё с порта 7 свича с ip 10.0.2.254) описан пул с range из одного ip 10.0.2.7, по этому переткнув патчкорд, новое устройство в порту сможет получить адрес 10.0.2.7 только по прошествии как минимум default-lease-time, как максимум max-lease-time. У него в конфиге минимум - 0,5 мин. Учитывал он это или нет, остаётся загадкой. У меня в сети для некоторых коммутаторов структура конфига подобно, только время больше 300 - 5 мин. Это время нужно выждать, что-бы получить ип машине с другим маком. Вставить ник Quote
dex Posted January 9, 2012 Posted January 9, 2012 на самом деле проблема в циклической выдаче и мгновенной отмене выданного адреса, это видно по логам: Jan 10 00:19:31 testd dhcpd: DHCPINFORM from 192.168.169.50 via 192.168.171.254 Jan 10 00:19:31 testd dhcpd: DHCPACK to 192.168.169.50 (00:17:31:81:23:19) via eth0 Jan 10 00:19:43 testd dhcpd: DHCPDISCOVER from 00:1f:16:37:84:03 via eth0: network test: no free leases Jan 10 00:19:43 testd dhcpd: *** Jan 10 00:19:43 testd dhcpd: *Leased 192.168.168.244 (with opt82) Jan 10 00:19:43 testd dhcpd: *Remote-ID: 0:1c:f0:23:51:0 Jan 10 00:19:43 testd dhcpd: *Port: 4 Jan 10 00:19:43 testd dhcpd: ### Jan 10 00:19:43 testd dhcpd: DHCPDISCOVER from 00:1f:16:37:84:03 via 192.168.171.254 Jan 10 00:19:44 testd dhcpd: DHCPOFFER on 192.168.168.244 to 00:1f:16:37:84:03 (pc) via 192.168.171.254 Jan 10 00:19:44 testd dhcpd: DHCPREQUEST for 192.168.168.244 (192.168.168.6) from 00:1f:16:37:84:03 via eth0: lease 192.168.168.244 unavailable. Jan 10 00:19:44 testd dhcpd: DHCPNAK on 192.168.168.244 to 00:1f:16:37:84:03 via eth0 Jan 10 00:19:44 testd dhcpd: *** Jan 10 00:19:44 testd dhcpd: *Leased 192.168.168.244 (with opt82) Jan 10 00:19:44 testd dhcpd: *Remote-ID: 0:1c:f0:23:51:0 Jan 10 00:19:44 testd dhcpd: *Port: 4 Jan 10 00:19:44 testd dhcpd: ### Jan 10 00:19:44 testd dhcpd: DHCPREQUEST for 192.168.168.244 (192.168.168.6) from 00:1f:16:37:84:03 (pc) via 192.168.171.254 Jan 10 00:19:44 testd dhcpd: DHCPACK on 192.168.168.244 to 00:1f:16:37:84:03 (pc) via 192.168.171.254 Jan 10 00:19:44 testd dhcpd: DHCPDISCOVER from 00:1f:16:37:84:03 via eth0: network test: no free leases Jan 10 00:19:44 testd dhcpd: *** Jan 10 00:19:44 testd dhcpd: *Leased 192.168.168.244 (with opt82) Jan 10 00:19:44 testd dhcpd: *Remote-ID: 0:1c:f0:23:51:0 Jan 10 00:19:44 testd dhcpd: *Port: 4 Jan 10 00:19:44 testd dhcpd: ### Jan 10 00:19:44 testd dhcpd: DHCPDISCOVER from 00:1f:16:37:84:03 via 192.168.171.254 Jan 10 00:19:44 testd dhcpd: DHCPOFFER on 192.168.168.244 to 00:1f:16:37:84:03 (pc) via 192.168.171.254 Jan 10 00:19:44 testd dhcpd: DHCPREQUEST for 192.168.168.244 (192.168.168.6) from 00:1f:16:37:84:03 via eth0: lease 192.168.168.244 unavailable. Jan 10 00:19:44 testd dhcpd: DHCPNAK on 192.168.168.244 to 00:1f:16:37:84:03 via eth0 Jan 10 00:19:44 testd dhcpd: *** Jan 10 00:19:44 testd dhcpd: *Leased 192.168.168.244 (with opt82) Jan 10 00:19:44 testd dhcpd: *Remote-ID: 0:1c:f0:23:51:0 Jan 10 00:19:44 testd dhcpd: *Port: 4 и до windows машины ответы эти долетают, только адрес никакой не присваивается, и syslog заполняется с ужосающей скоростью. вот еще выдежка из dhcpd.leases: lease 192.168.168.244 { starts 1 2012/01/09 12:19:52; ends 2 2012/01/10 00:19:52; cltt 1 2012/01/09 12:19:52; binding state active; next binding state free; hardware ethernet 00:1f:16:37:84:03; uid "\001\000\037\0267\204\003"; option agent.circuit-id 0:4:0:1:0:4; option agent.remote-id 0:6:0:1c:f0:23:51:0; client-hostname "pc"; } lease 192.168.168.244 { starts 1 2012/01/09 12:19:52; ends 1 2012/01/09 12:19:52; tstp 1 2012/01/09 12:19:52; cltt 1 2012/01/09 12:19:52; binding state free; hardware ethernet 00:1f:16:37:84:03; uid "\001\000\037\0267\204\003"; } lease 192.168.168.244 { starts 1 2012/01/09 12:19:53; ends 2 2012/01/10 00:19:53; cltt 1 2012/01/09 12:19:53; binding state active; next binding state free; hardware ethernet 00:1f:16:37:84:03; uid "\001\000\037\0267\204\003"; option agent.circuit-id 0:4:0:1:0:4; option agent.remote-id 0:6:0:1c:f0:23:51:0; client-hostname "pc"; } lease 192.168.168.244 { starts 1 2012/01/09 12:19:53; ends 1 2012/01/09 12:19:53; tstp 1 2012/01/09 12:19:53; cltt 1 2012/01/09 12:19:53; binding state free; hardware ethernet 00:1f:16:37:84:03; uid "\001\000\037\0267\204\003"; и так до бесконечности ... перепробовал включать и отключать стандартные опции в dhcpd.conf, не помогает (( хоть бы идею какую-никакую в какую сторону копать ... Вставить ник Quote
dex Posted February 21, 2012 Posted February 21, 2012 пришло наконец новое оборудование, сейчас пробую на DES-3200-18 и все работает! с теме же конфигами! значит проблема была в DES-3828, будем крутить его, хотя варианты с разными его настройками я перебрал еще тогда ... Вставить ник Quote
kitan Posted September 23, 2013 Posted September 23, 2013 (edited) Пришел к подобной проблеме. Ранее идентификация клиента происходила следующем образом: class "sw-10.0.5.23-p7" { match if option agent.remote-id = 0:6:00:1e:58:9e:c5:72 and substring(option agent.circuit-id,5,1)=7; } В данном случае приходится при смене коммутатора приходится менять МАК коммутатора на dhcp сервере, что не очень удобно. При попытке отказаться от опции RemoteID в dhcpd в пользу Relay IP появилась такая же проблема как у топикастера. Она заключается в следующем: На некоторых коммутаторах Dlink не перехватываются релеем юникастные пакеты dhcp. Например не перехватываются на устройствах DES-3200-xx-c1. В следствии чего запрос DHCP Request посылается напрямую dhcp серверу. При идентификации dhcp сервером клиента только по опции 82 проблемы с "lease x.x.x.x unavailable" не возникает. Даже когда запрос посылается напрямую серверу (юникастно). Если же использовать запись следующего вида: class "10.0.2.254:7" { match if binary-to-ascii (10, 8, "", suffix( option agent.circuit-id, 1)) = "7" and binary-to-ascii(10,8,".",packet(24,4))="10.0.2.254"; } т.е. вместо remote ID используется Relay agent IP, то при посылке клиентов юникастных запросов сервер отвечает DHCPNAK. Как мне кажется это происходит из-за того, что при посылке юникастного запроса значение Relay agent IP (packet(24,4)) выставляется в 0.0.0.0 . Пробовал выставлять значение класса след. образом: class "10.0.2.254:7" { match if binary-to-ascii (10, 8, "", suffix( option agent.circuit-id, 1)) = "7" and ((binary-to-ascii(10,8,".",packet(24,4))="10.0.2.254")or(binary-to-ascii(10,8,".",packet(24,4))="0.0.0.0")); } результата не дало. Кто-нибудь смог решить похожую проблему? Edited September 23, 2013 by kitan Вставить ник Quote
kitan Posted September 24, 2013 Posted September 24, 2013 (edited) Нашел как обойти отправление dhcpnak сервером. Если объявить класс подобным образом: class "10.0.2.254:p2" { match if ((substring(option agent.circuit-id,5,1)=2) or (not exists agent.circuit-id)) and ((binary-to-ascii(10, 8, ".", packet(24, 4))="10.0.2.254") or(binary-to-ascii(10, 8, ".", packet(24, 4))="0.0.0.0")); } то сервер отвечает на юникасты от клиентов корректно. Но в данном случае каждый класс объявленный подобным образом соответствует любому пакету без опции 82 пришедшему на сервер. В данном случае ответ выдается на основе информации из leases. Кто-нибудь использует подобную конфигурацию? Edited September 24, 2013 by kitan Вставить ник Quote
hsvt Posted August 6, 2014 Posted August 6, 2014 (edited) Здравствуйте. Я вот тут тоже решил попробовать схему с isc-dhcp43-server-4.3.0_2 + Options 82 на FreeBSD 9.2 и с D-Link DES-3528 (dhcp_relay + dhcp snoop). Опыта в этом не имею, поэтому прошу совета у экспертов. Выдача адреса БЕЗ классов и привязок к портам, макам и remote-id работает, но если дописывать преобразование и смещение то isc-dhcp игнорит Options 82 от коммутатора и адрес не выдает. Вот конфиги: default-lease-time 100; max-lease-time 7200; min-lease-time 1000; ddns-update-style none; authoritative; one-lease-per-client false; deny duplicates; ignore client-updates; local-address 192.168.254.218; log-facility local7; class "4" { match if binary-to-ascii(10, 8, ".", packet(24, 4)) ="192.168.254.1" and binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1)) = "4"; } subnet 192.168.254.0 netmask 255.255.255.0 { option routers 192.168.254.250; option subnet-mask 255.255.255.0; option broadcast-address 192.168.254.255; pool { range 192.168.254.81; allow members of "4"; } } D-Link: DES-3528:admin#show dhcp_relay Command: show dhcp_relay DHCP/BOOTP Relay Status : Enabled DHCP/BOOTP Hops Count Limit : 16 DHCP/BOOTP Relay Time Threshold : 0 DHCP Vendor Class Identifier Option 60 State: Disabled DHCP Client Identifier Option 61 State: Disabled DHCP Relay Agent Information Option 82 State : Enabled DHCP Relay Agent Information Option 82 Check : Disabled DHCP Relay Agent Information Option 82 Policy : Replace DHCP Relay Agent Information Option 82 Remote ID : AC-F1-DF-3D-74-50 Interface Server 1 Server 2 Server 3 Server 4 ------------ --------------- --------------- --------------- --------------- Server VLAN ID List --------------- ----------------------------------------------------------- 192.168.254.218 254 dhcpdump: TIME: 2014-08-06 18:00:30.911 IP: 192.168.254.1 (3c:61:04:47:1f:f0) > 192.168.254.218 (44:1e:a1:54:31:e5) OP: 1 (BOOTPREQUEST) HTYPE: 1 (Ethernet) HLEN: 6 HOPS: 1 XID: ac65d38a SECS: 7424 FLAGS: 0 CIADDR: 0.0.0.0 YIADDR: 0.0.0.0 SIADDR: 0.0.0.0 GIADDR: 192.168.254.1 CHADDR: 8c:89:a5:02:99:06:00:00:00:00:00:00:00:00:00:00 SNAME: . FNAME: . OPTION: 53 ( 1) DHCP message type 1 (DHCPDISCOVER) OPTION: 116 ( 1) DHCP Autoconfiguration 01 . OPTION: 61 ( 7) Client-identifier 01:8c:89:a5:02:99:06 OPTION: 12 ( 8) Host name admin OPTION: 60 ( 8) Vendor class identifier MSFT 5.0 OPTION: 55 ( 11) Parameter Request List 1 (Subnet mask) 15 (Domainname) 3 (Routers) 6 (DNS server) 44 (NetBIOS name server) 46 (NetBIOS node type) 47 (NetBIOS scope) 31 (Perform router discovery) 33 (Static route) 249 (MSFT - Classless route) 43 (Vendor specific info) OPTION: 43 ( 2) Vendor specific info dc00 .. OPTION: 82 ( 18) Relay Agent Information Circuit-ID 00:04:00:fe:00:04 <unknown-0> 02:08:00:06 <unknown-0> ac:f1:df:3d:74:50 tshark: option: (82) Agent Information Option Length: 18 Option 82 Suboption: (1) Agent Circuit ID Length: 6 Agent Circuit ID: 000400fe0004 Option 82 Suboption: (2) Agent Remote ID Length: 8 Agent Remote ID: 0006acf1df3d7450 Логов к сожалению предоставить не могу, не удается заставить isc-dhcp из "песочницы" писать логи в /var/log/dhcpd.log. Может кто нибудь помочь добиться выдачи адреса по параметрам из Option 82 (хотя бы без всяких патчей и самописнных серверов, коих тут в поиске по темам достаточно, но хотелось бы начать с оригинального сервера). Edited August 6, 2014 by hsvt Вставить ник Quote
hsvt Posted August 7, 2014 Posted August 7, 2014 Разобрался с помощью dhpcd -d дебаг. В конфиге dhcpd.conf не было добавлено сетки с которой релеит свич. Вставить ник Quote
hsvt Posted August 8, 2014 Posted August 8, 2014 (edited) Теперь столкнулся с проблемой "no free leases". default-lease-time 120; max-lease-time 7200; min-lease-time 1000; ddns-update-style none; authoritative; one-lease-per-client false; deny duplicates; ignore client-updates; local-address 192.168.254.218; log-facility local7; 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)) ," switch ", substring(option agent.remote-id, 2, 15) ," 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)) ) ); } class "4" { match if ( binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 2, 2)) = "254" and binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 4, 2)) = "4" and binary-to-ascii(16, 8, ":", substring(hardware, 1, 6)) = "8c:89:a5:02:99:06" and binary-to-ascii(10, 8, ".", packet(24, 4)) = "10.100.0.1" ); } shared-network "sw" { subnet 10.100.0.0 netmask 255.255.255.0 { } subnet 192.168.254.0 netmask 255.255.255.0 { option routers 192.168.254.250; option subnet-mask 255.255.255.0; option broadcast-address 192.168.254.255; pool { range 192.168.254.81; allow members of "4"; } } } При запуске: Starting dhcpd. Internet Systems Consortium DHCP Server 4.3.0 Copyright 2004-2014 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Wrote 0 class decls to leases file. Wrote 0 leases to leases file. Listening on BPF/igb1/44:1e:a1:54:31:e5/sw Sending on BPF/igb1/44:1e:a1:54:31:e5/sw Sending on Socket/fallback/fallback-net Server starting service. DHCPDISCOVER from 8c:89:a5:02:99:06 via 10.100.0.1: network sw: no free leases DHCPDISCOVER from 8c:89:a5:02:99:06 via igb1: network sw: no free leases DHCPDISCOVER from 8c:89:a5:02:99:06 via 10.100.0.1: network sw: no free leases DHCPDISCOVER from 8c:89:a5:02:99:06 via igb1: network sw: no free leases DHCPDISCOVER from 8c:89:a5:02:99:06 via 10.100.0.1: network sw: no free leases DHCPDISCOVER from 8c:89:a5:02:99:06 via igb1: network sw: no free leases DHCPDISCOVER from 8c:89:a5:02:99:06 via 10.100.0.1: network sw: no free leases DHCPDISCOVER from 8c:89:a5:02:99:06 via igb1: network sw: no free leases dhcp_relay включен на коммутаторе с адресом 10.100.0.1 (D-Link DES-3528) (проброшен vlan и всё это проходит с сервера через маршрутизатор т.е. сетки друг друга видят и пингуются), если убирать строчку shared-network "sw" { subnet 10.100.0.0 netmask 255.255.255.0 { } Тогда получаю сообщения такого вида: DHCPDISCOVER from 8c:89:a5:02:99:06 via 10.100.0.1: unknown network segment DHCPDISCOVER from 8c:89:a5:02:99:06 via igb1: network 192.168.254.0/24: no free leases DHCPDISCOVER from 8c:89:a5:02:99:06 via 10.100.0.1: unknown network segment DHCPDISCOVER from 8c:89:a5:02:99:06 via igb1: network 192.168.254.0/24: no free leases Ткинте пожалуйста где косяк. Я понимаю что dhcp_relay agent находится в другой сети (10.100.0.0/24) но из этого диапазона адреса выдавать не нужно, нужно только пересылать Option 82. Или нужно обязательно выносить коммутатор в такую же сетку адресов как 192.168.254.0/24 ? Edited August 8, 2014 by hsvt Вставить ник Quote
0pl0pl Posted August 8, 2014 Posted August 8, 2014 and binary-to-ascii(16, 8, ":", substring(hardware, 1, 6)) = "8c:89:a5:02:99:06" изменения в and binary-to-ascii(16, 8, ":", substring(hardware, 1, 6)) = "8c:89:a5:2:99:6" преобразование число-текст отрезает не значащие нули слева Вставить ник Quote
Negator Posted August 8, 2014 Posted August 8, 2014 DHCPDISCOVER from 8c:89:a5:02:99:06 via 10.100.0.1: unknown network segment у вас сервер ниего не знает об этой сети, оттого и запись поэтому shared network нужен. что касается no free leases - это совсем другая проблема Вставить ник Quote
hsvt Posted August 8, 2014 Posted August 8, 2014 (edited) Это исправил, спасибо, но проблему с выдачей адреса не решило. Переделал последний блок на: shared-network sw { subnet 192.168.254.0 netmask 255.255.255.0 { option routers 192.168.254.250; option subnet-mask 255.255.255.0; option broadcast-address 192.168.254.255; pool { range 192.168.254.81; allow members of "4"; } } } На D-Link выключил dhcp_relay и попробовал через dhcp_local_relay чтобы в пакете не было CIADDR коммутатора и релеился только по нужному vlan. TIME: 2014-08-08 11:43:22.756 IP: 0.0.0.0 (8c:89:a5:02:99:06) > 255.255.255.255 (ff:ff:ff:ff:ff:ff) OP: 1 (BOOTPREQUEST) HTYPE: 1 (Ethernet) HLEN: 6 HOPS: 0 XID: d7aa5ac7 SECS: 6656 FLAGS: 0 CIADDR: 0.0.0.0 YIADDR: 0.0.0.0 SIADDR: 0.0.0.0 GIADDR: 0.0.0.0 CHADDR: 8c:89:a5:02:99:06:00:00:00:00:00:00:00:00:00:00 SNAME: . FNAME: . OPTION: 53 ( 1) DHCP message type 1 (DHCPDISCOVER) OPTION: 116 ( 1) DHCP Autoconfiguration 01 . OPTION: 61 ( 7) Client-identifier 01:8c:89:a5:02:99:06 OPTION: 12 ( 8) Host name admin OPTION: 60 ( 8) Vendor class identifier MSFT 5.0 OPTION: 55 ( 11) Parameter Request List 1 (Subnet mask) 15 (Domainname) 3 (Routers) 6 (DNS server) 44 (NetBIOS name server) 46 (NetBIOS node type) 47 (NetBIOS scope) 31 (Perform router discovery) 33 (Static route) 249 (MSFT - Classless route) 43 (Vendor specific info) OPTION: 43 ( 2) Vendor specific info dc00 .. OPTION: 82 ( 18) Relay Agent Information Circuit-ID 00:04:00:fe:00:04 <unknown-0> 02:08:00:06 <unknown-0> ac:f1:df:3d:74:50 DHCPDISCOVER from 8c:89:a5:02:99:06 via igb1: network sw: no free leases DHCPDISCOVER from 8c:89:a5:02:99:06 via igb1: network sw: no free leases DHCPDISCOVER from 8c:89:a5:02:99:06 via igb1: network sw: no free leases DHCPDISCOVER from 8c:89:a5:02:99:06 via 10.100.0.1: unknown network segment у вас сервер ниего не знает об этой сети, оттого и запись поэтому shared network нужен. что касается no free leases - это совсем другая проблема shared-network прописан, пробовал уже по разному. С этой сети только информация Option 82 приходит. Edited August 8, 2014 by hsvt Вставить ник Quote
alexaaa Posted August 15, 2014 Posted August 15, 2014 Вот Вам рабочий конфиг который работает с DGS-3612 и QSW-8300-28F, уже 5 лет работает без проблем, адресса выдаются по vlan id, если с не заработает, то значит версия dhcp кривя, или прошивка свитча. option domain-name "server.ru"; option domain-name-servers 10.230.0.5,10.230.0.8; default-lease-time 10512000; max-lease-time 10512000; server-identifier 10.230.0.5; always-broadcast on; authoritative; ddns-update-style none; ignore client-updates; option ip-forwarding on; deny duplicates; log-facility local6; option ms-classless-static-routes code 249 = array of integer 8; option rfc3442-classless-static-routes code 121 = array of integer 8; option space MSFT; option MSFT.DisableNetBIOS code 1 = unsigned integer 32; option MSFT.ReleaseOnShutdown code 2 = unsigned integer 32; option MSFT.DefaultRouteMetric code 3 = unsigned integer 32; 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)) ) ); } subnet 10.230.0.0 netmask 255.255.248.0 { } subnet 10.230.16.0 netmask 255.255.248.0 { class "gorod2" { match if ( binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 2, 2)) = "202"); } pool { range 10.230.16.100 10.230.23.254; option routers 10.230.16.1; option broadcast-address 10.230.23.255; option ms-classless-static-routes 16, 10,200, 10,230,16,1, 16, 10,230, 10,230,16,1; option rfc3442-classless-static-routes 16, 10,200, 10,230,16,1, 16, 10,230, 10,230,16,1; allow members of "gorod2"; } Вставить ник Quote
hsvt Posted August 15, 2014 Posted August 15, 2014 Вот Вам рабочий конфиг который работает с DGS-3612 и QSW-8300-28F, уже 5 лет работает без проблем, адресса выдаются по vlan id, если с не заработает, то значит версия dhcp кривя, или прошивка свитча. option domain-name "server.ru"; option domain-name-servers 10.230.0.5,10.230.0.8; default-lease-time 10512000; max-lease-time 10512000; server-identifier 10.230.0.5; always-broadcast on; authoritative; ddns-update-style none; ignore client-updates; option ip-forwarding on; deny duplicates; log-facility local6; option ms-classless-static-routes code 249 = array of integer 8; option rfc3442-classless-static-routes code 121 = array of integer 8; option space MSFT; option MSFT.DisableNetBIOS code 1 = unsigned integer 32; option MSFT.ReleaseOnShutdown code 2 = unsigned integer 32; option MSFT.DefaultRouteMetric code 3 = unsigned integer 32; 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)) ) ); } subnet 10.230.0.0 netmask 255.255.248.0 { } subnet 10.230.16.0 netmask 255.255.248.0 { class "gorod2" { match if ( binary-to-ascii(10, 16, "", substring(option agent.circuit-id, 2, 2)) = "202"); } pool { range 10.230.16.100 10.230.23.254; option routers 10.230.16.1; option broadcast-address 10.230.23.255; option ms-classless-static-routes 16, 10,200, 10,230,16,1, 16, 10,230, 10,230,16,1; option rfc3442-classless-static-routes 16, 10,200, 10,230,16,1, 16, 10,230, 10,230,16,1; allow members of "gorod2"; } Приемно благодарен, я уже сам практически разобрался вот с таким конфигом. default-lease-time 300; max-lease-time 300; min-lease-time 120; ddns-update-style none; authoritative; one-lease-per-client true; deny duplicates; ignore client-updates; local-address 192.168.254.218; log-facility local7; log(info, "***"); if exists agent.circuit-id { log( info,concat("Leased IP: ",binary-to-ascii(10,8,".",leased-address)," (with opt82)") ); log( info,concat("MAC: ",binary-to-ascii(16,8,":",substring(hardware,1,6))) ); log( info,concat("Remote-ID: ",binary-to-ascii(16,8,":",substring(option agent.remote-id,2,6))) ); log( info,concat("Switch addr: ",binary-to-ascii(10,8, ".", packet(24, 4))) ); log( info,concat("Port: ",binary-to-ascii(10,8,"",suffix(option agent.circuit-id,1))) ); log( info,concat("VLAN: ",binary-to-ascii(10,16,"",substring(option agent.circuit-id,2,2))) ); } log(info, "***"); shared-network vlan254 { include "/usr/local/etc/dhcpd.d/10.100.0.1.conf"; subnet 10.100.0.0 netmask 255.255.255.0 { } subnet 192.168.254.0 netmask 255.255.255.0 { pool { allow members of "10.100.0.1:4"; range 192.168.254.81; option routers 192.168.254.250; option broadcast-address 192.168.254.255; option subnet-mask 255.255.255.0; } } } 10.100.0.1.conf class "10.100.0.1:4" { match if ( binary-to-ascii(10,16, "", substring(option agent.circuit-id,2,2)) = "254" and binary-to-ascii(10,16, "", substring(option agent.circuit-id,4,2)) = "4" and binary-to-ascii(16,8, ":", suffix (option agent.remote-id,6)) = "ac:f1:df:3d:74:50" ); } Осталось продумать логику привязок и с гостевым диапазоном с редиректом для дальнейших инструкций... Использует ли кто еще класс привязки по MAC? binary-to-ascii(16,8, ":", substring(hardware,1, 6)) = "0:14:22:8d:ca:a6" Вставить ник 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.