Jump to content

Recommended Posts

Posted

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;) отдавать правильный адрес уже другому маку.

 

В какую сторону смотреть?

Posted

То ли RX в вашем ноуте не работает, то ли свич релеящий бузит и до ноута ответ дхцп сервера не доводит.

 

RX отпадает - тестил на разных машинках, при чем периодически отдает нормально (связано с лиз таймом).

Свич - тоже менял, 3526 - поведение такое же.

  • 6 months later...
Posted

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 сыпятся те же, что и выше сообщения.

Как решилась задачка?

Posted

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 мин. Это время нужно выждать, что-бы получить ип машине с другим маком.

Posted

на самом деле проблема в циклической выдаче и мгновенной отмене выданного адреса, это видно по логам:

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, не помогает ((

хоть бы идею какую-никакую в какую сторону копать ...

  • 3 weeks later...
  • 4 weeks later...
Posted

пришло наконец новое оборудование, сейчас пробую на DES-3200-18 и все работает! с теме же конфигами! значит проблема была в DES-3828, будем крутить его, хотя варианты с разными его настройками я перебрал еще тогда ...

  • 1 year later...
Posted (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 by kitan
Posted (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 by kitan
  • 10 months later...
Posted (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 by hsvt
Posted

Разобрался с помощью dhpcd -d дебаг. В конфиге dhcpd.conf не было добавлено сетки с которой релеит свич.

Posted (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 by hsvt
Posted

         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"

 

преобразование число-текст отрезает не значащие нули слева

Posted

DHCPDISCOVER from 8c:89:a5:02:99:06 via 10.100.0.1: unknown network segment

 

у вас сервер ниего не знает об этой сети, оттого и запись

поэтому shared network нужен.

 

что касается no free leases - это совсем другая проблема

Posted (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 by hsvt
Posted

Вот Вам рабочий конфиг который работает с 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";

}

Posted

Вот Вам рабочий конфиг который работает с 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"

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.