Перейти к содержимому
Калькуляторы

Проблема с isc dhcp + option 82 Странности поведени

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пришел к подобной проблеме. Ранее идентификация клиента происходила следующем образом:

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"));

}

результата не дало. Кто-нибудь смог решить похожую проблему?

Изменено пользователем kitan

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нашел как обойти отправление 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. Кто-нибудь использует подобную конфигурацию?

Изменено пользователем kitan

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Изменено пользователем hsvt

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Теперь столкнулся с проблемой "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 ?

Изменено пользователем hsvt

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

         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"

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это исправил, спасибо, но проблему с выдачей адреса не решило.

 

Переделал последний блок на:

 

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 приходит.

Изменено пользователем hsvt

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.