Jump to content

Recommended Posts

Posted

Суть проблемы:

Клиент не получает IP в пользовательском влане по Option82

(Просьба не посылать подальше, а помочь разобраться, было бы неплохо услышать тех кто пользуется оборудованием zyxel у себя в сетях)+(для сведения в управляемом влане айпишка отдается без проблем)

Имеется MES3528+GS4012F->DHCP сервер(ISC)

На свичах прописано два влана:

1800 - влан управления

10 - пользователький влан.

DHCP-сервер находится в влане 1800.

Насколько я понимаю, то option и information должен вставлять только MES3528, а GS4012 - только должен релеем передать этот запрос на сервер.

Упрощенно конфиги коммутаторов:

MES3528:(Клиент включается в 24 порт, uplink-порт25)

; Product Name = MES-3528
; Firmware Version = V3.90(BHR.2) | 08/25/2009
; SysConf Engine Version = 1.2
vlan 10 
  name test 
  normal 26 
  fixed 24-25 
  forbidden 1-23,27-28 
  untagged 1-24,27-28 
exit
vlan 1800 
  name MGMT 
  normal "" 
  fixed 1-23,25-28 
  forbidden 24 
  untagged 1-24,26-28 
  ip address default-management 10.7.1.33 255.255.255.0 
  ip address default-gateway 10.7.1.1 
exit
interface port-channel 24 
  pvid 10 
exit
interface port-channel 25 
  dhcp snooping trust 
  arp inspection trust 
exit
dhcp snooping 
dhcp snooping vlan 10  
dhcp snooping vlan 10 option 
dhcp snooping vlan 10 information 
dhcp dhcp-vlan 1800 
arp inspection vlan 10 
arp inspection

 

Конфиг GS4012F(11 порт - downlink,12 порт - DHCP Server):

; Product Name = GS-4012F
; Firmware Version = V3.80(TS.4) | 10/07/2008
; SysConf Engine Version = 1.1
vlan 10 
  name test 
  normal "" 
  fixed 11 
  forbidden 1-10,12 
  untagged 1-10,12 
exit
vlan 1800 
  name MGMT 
  normal "" 
  fixed 11-12 
  forbidden 1-10 
  untagged 1-10,12 
  ip address 10.7.1.35 255.255.255.0 
  ip address default-gateway 10.7.1.1 
exit
interface port-channel 12 
  pvid 1800 
exit
interface route-domain 10.7.1.35/24 
exit
ip address 192.168.0.1 255.255.255.0 
dhcp smart-relay 
dhcp smart-relay helper-address 10.7.1.107

 

Конфиг dhcp-сервера:

ddns-update-style none;
default-lease-time 86400;
max-lease-time 86460;
authoritative;
log-facility local7;
local-address 10.7.1.107;
###Клиентский айпишник:
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
option domain-name-servers 192.168.1.1;
class "test_port24" {
match if (binary-to-ascii (10, 8, "", substring( option agent.circuit-id, 1, 1))="24" and substring( option agent.circuit-id, 3, 3)="10" and substring( option agent.circuit-id, 4, 32)="test");
}
#### Адрес для 24-го порта:
pool {
range 192.168.1.10;
  allow members of "test_port24";
  }
}
###Выдача ай-пи адресов в управляемом влане:
subnet 10.7.1.0 netmask 255.255.255.0 {
option routers 10.7.1.1;
option domain-name-servers 10.7.1.1;
class "test_port26" {
match if (binary-to-ascii (10, 8, "", substring( option agent.circuit-id, 1, 1))="26" and substring( option agent.circuit-id, 4, 32)="test");
}
#### Адрес для 26го порта:
pool {
range 10.7.1.100;
  allow members of "test_port26";
  }
}

 

При попытке клиента получить ip в клиентском влане(10) сервер пишет:

May 19 11:12:41 test2 dhcpd: DHCPDISCOVER from 00:26:18:95:c3:da via eth0: network 10.7.1/24: no free leases
May 19 11:12:41 test2 dhcpd: DHCPDISCOVER from 00:26:18:95:c3:da via eth0: network 10.7.1/24: no free leases
May 19 11:12:41 test2 dhcpd: DHCPDISCOVER from 00:26:18:95:c3:da via 10.7.1.35: network 10.7.1/24: no free leases

Posted (edited)

Тестировал на es2108 с последней прошивкой с сайта. Как не настраивал его не смог добиться добавления полей в пакет. Смотрел wireshark-ом

 

 

еще не увидел на 25 порте vlan-trunking

Edited by Tsvetkov
Posted (edited)

У меня сеть на Zyxel XGS4728F , GS4012F, ES3124, MES3528 - в обязательном порядке юзаю опцию 82 и схему VLAN на дом (хотя в данном случае это пофиг). Все работает. Смогу описать логику работы и конфиги только в конце июня. Ща в отпуске и на сесии в другом городе, нет времени...соррии

Edited by white_crow
Posted
flash.one

Релеем должен работать MES3528, GS4012F должен пропускать DHCP прозрачно.

Не хочет оно так работать. DHCP-сервер находится в другом влане, нежели клиент. Если релеем работает MES3528 - то до сервера вообще ничего не доходит. Но если релеем работает GS4012 - то запрос попадает на сервер, но сервер пишет, что no free leases.
Posted (edited)
Ну так а с коммутатора у вас dhcp сервер пингуется.
Естественно. Я ж говорю, что если порт клиента включить во влан в котором стоит сервер - все отлично отрабатывается. Но если порт в клиентском влане, то почему-то не работает.
Если релеем работает MES3528 - то до сервера вообще ничего не доходит.
Здесь ошибся, запросы все таки есть, но опять же ответ: no free leases. Edited by flash.one
Posted
Здесь ошибся, запросы все таки есть, но опять же ответ: no free leases.
Значит неправильно настроен сервер. Попробуйте сети в shared-network объявить.

 

Posted
Значит неправильно настроен сервер. Попробуйте сети в shared-network объявить.
я так и думал что косяк в самом сервере. После обьявления сетей в shared-network все заработало. Огромное спасибо!

Может есть ещё какие-то нюансы?

Posted (edited)

#/etc/dhcpd.conf

local-address 10.7.1.107;

lease-file-name "/var/lib/dhcp3/dhcpd.leases";

one-lease-per-client true;

ddns-update-style none;

default-lease-time 172800;

max-lease-time 172800;

authoritative;

#authoritative;

log-facility local5;

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)), " (add 1 to port number!), 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))

,"IP" ,binary-to-ascii(10, 8, ".", packet(24, 4)) ));

 

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

}

option classes-static-route-ms code 249 = array of unsigned integer 8;

option classes-static-route code 121 = array of unsigned integer 8;

 

option domain-name-servers 192.168.1.1, 10.7.1.1;

include "/etc/dhcp3/dhcp_networks.conf";

 

#/etc/dhcp3/dhcp_networks.conf

shared-network Test {

subnet 10.7.1.0 netmask 255.255.255.0{}

 

###Клиентский айпишник:

subnet 10.20.114.0 netmask 255.255.255.0 {

option routers 10.20.114.1;

option subnet-mask 255.255.255.0;

option broadcast-address 10.20.114.255;

option classes-static-route-ms 8,10,10,20,114,1,16,192,168,10,20,114,1;

option classes-static-route 8,10,10,20,114,1,16,192,168,10,20,114,1;

include "/etc/dhcp3/10_7_1_33.conf";

}

 

 

#/etc/dhcp3/10_7_1_33.conf

#

 

class "24@10_7_1_33" {match if option agent.remote-id = 0:6:00:22:B0:50:9B:83 and option agent.circuit-id = 0:4:00:0A:0:18;}

pool {range 10.20.114.49; allow members of "24@10_7_1_33";}

pool {range 10.20.114.50; allow members of "24@10_7_1_33";}

 

Опоздал :)

Edited by Ivantey
  • 6 months later...
Posted

Привет.

Так, прочитал ветку, сделал всё, теперь буксую два часа уже.

Демон поднят на 10.0.0.1. Свич 4728 (прозрачно для dhcp) - 10.0.0.10. Клиентский 3528 - 10.0.0.102. Оба свича в vlan1 вместе с сервером. Влан 1002 поднята на обоих свичах, терминится на 4728 с айпи 10.0.0.129. В этой влан сидят dhcp-клиенты.

Сетки Servers (10.0.0.0/25) и Clients (тестовая vlan1002 - 10.0.0.128.25).

 

dhcpd.conf:

local-address 10.0.0.1;
lease-file-name "/var/db/dhcpd.leases";
one-lease-per-client true;
ddns-update-style none;
default-lease-time 172800;
max-lease-time 172800;
authoritative;
log-facility local3;
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)), " (add 1 to port number!), 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)),
            "IP" ,binary-to-ascii(10, 8, ".", packet(24, 4)) ));

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

option domain-name-servers 10.0.1.1;

shared-network Servers {
    subnet 10.0.0.0 netmask 255.255.255.128 {}
    option routers 10.0.0.10;
}

shared-network Clients {
    class "vlan1002" {match if ( substring( option agent.circuit-id, 3, 3)="1002"); }
    subnet 10.0.0.128 netmask 255.255.255.128 {
        option routers 10.0.0.129;
        option subnet-mask 255.255.255.128;
        option broadcast-address 10.0.0.255;
        pool {range 10.0.0.150 10.0.0.170; allow members of "vlan1002";}
    }
}

 

А теперь лог!!!!

Dec  8 23:32:13 gw dhcpd:
Dec  8 23:32:13 gw dhcpd: Listening on LPF/eth0/00:1b:78:7b:8f:d4/Servers
Dec  8 23:32:13 gw dhcpd: Sending on   LPF/eth0/00:1b:78:7b:8f:d4/Servers
Dec  8 23:32:13 gw dhcpd: Sending on   Socket/fallback/fallback-net
Dec  8 23:32:22 gw dhcpd: DHCPDISCOVER from cc:08:e0:0a:ca:1d via 10.0.0.102: network Servers: no free leases

 

То есть демон пытается выдать на запрос из сетки Clients адрес из сетки Servers! И, естественно, фейл. Где я накосячил?

Пытался раскодить шаманские строки Ivantey на тему option classes-static-route-ms, но инфы по ним нигде не нашел. По запаху они не имеют прямого отношения к сабжу, но КАК сказать демону, в какой сети выдавать адреса?

 

Спасибо!

Posted (edited)
shared-network Servers

Вот эта то сетка как раз НЕ shared.

 

Ну и посмотреть, приходит ли "1002" в нужной опции.

Когда я ставлю ее просто subnet, в логе отлуп, что не может дать адрес из 10.0.0.25. Те же яйцы.

А как посмотреть, приходит ли 1002 в нужной опции? Класс вроде отлавливается. Или я ошибаюсь?

 

Спасибо!

Edited by sillybilly
Posted

shared-network Clients {

class "vlan1002" {match if ( binary-to-ascii (10, 16, "", substring( option agent.circuit-id, 2, 2))="1002");}

subnet 10.0.0.128 netmask 255.255.255.128 {

option routers 10.0.0.129;

option subnet-mask 255.255.255.128;

option broadcast-address 10.0.0.255;

pool {range 10.0.0.150; allow members of "vlan1002";}

pool {range 10.0.0.151; allow members of "vlan1002";}

}

}

Posted

Ivantey, снаряды всё ближе, спасибо за binary-to-ascii. Однако пока не попадают. Мучаю далее!

 

Вот что дает dhcpdump:

---------------------------------------------------------------------------
  TIME: 2010-12-09 01:22:13.516
    IP: 10.0.0.10 (0:19:cb:93:1d:a7) > 10.0.0.1 (0:1b:78:7b:8f:d4)
    OP: 1 (BOOTPREQUEST)
HTYPE: 1 (Ethernet)
  HLEN: 6
  HOPS: 1
   XID: 00000178
  SECS: 42
FLAGS: 0
CIADDR: 0.0.0.0
YIADDR: 0.0.0.0
SIADDR: 0.0.0.0
GIADDR: 10.0.0.10
CHADDR: cc:08:e0:0a:ca:1d:00:00:00:00:00:00:00:00:00:00
SNAME: .
FNAME: .
OPTION:  53 (  1) DHCP message type         1 (DHCPDISCOVER)
OPTION:  55 (  6) Parameter Request List      1 (Subnet mask)
                                              3 (Routers)
                                              6 (DNS server)
                                             15 (Domainname)
                                            119 (Domain Search)
                                            252 (MSFT - WinSock Proxy Auto Detect)

OPTION:  57 (  2) Maximum DHCP message size 1500
OPTION:  61 (  7) Client-identifier         01:cc:08:e0:0a:ca:1d
OPTION:  51 (  4) IP address leasetime      7776000 (12w6d)
OPTION:  82 ( 14) Relay Agent Information
                  Circuit-ID    00:1a:03:ea:53:77:2e:64:32:34:6b:31
---------------------------------------------------------------------------

Posted

Совсем сломал голову.

Запросы до демона доходят только тогда, когда на клиентском свиче (нахрена??) заводится mgmt-адрес, принадлежащий той вилане, в которую я релею dhcp. Это, идеологически, бред.

Я бы хотел релеить ТОЛЬКО на терминирующем свиче (4728 в моем случае), ибо бродкасты с клиентских свичей до него ДОХОДЯТ, иначе б в нем не работал встроенный dhcp-сервер, а больше ничего для счастья не надо.

Но, как ни пытаюсь я сконфигурить релей на 4728 (удалив релей на клиентском), ни одного запроса с него до демона не долетает.

Это - неправильно!

Пошел пинать инженеров зухеля.

 

Posted (edited)

Пошел пинать инженеров зухеля.

уже пинал на счет es2108 - сказали, что покраска 82 опцией будет работать только, когда пользователь в влане управления

Edited by Tsvetkov
Posted
Пошел пинать инженеров зухеля.
уже пинал на счет es2108 - сказали, что покраска 82 опцией будет работать только, когда пользователь в влане управления

Ага. Т.е. я не одинок в этой проблеме. О результатах доложу!

 

Posted (edited)

sillybilly

 

У нас работает точно такая же схема, которую привели Вы. С той лишь разницей, что в ядре стоит Zyxel GS-4024, но это не принципиально, т.к. DHCP Relay поднят на абонентских MES-3528. При этом абонентские свитчи не имеют адреса в том VLANе, где находится DHCP-сервер.

 

Вот краткий конфиг свитчей.

 

GS-4024

VLAN 1: (192.168.1.1/24) (влан для маршрутизации трафика между L3-свитчами)

VLAN 100: (10.10.0.1/24) (разные серверы, в т.ч. DHCP, имеющий адрес 10.10.0.4)

 

MES-3528

VLAN 1: (192.168.1.21/24) (маршрутизирующий)

VLAN 2006: (10.20.6.1/24) (абонентский)

 

На MES-3528 настроен default gateway на 192.168.1.1, а также DHCP Snooping для VLAN 2006, где свитч выступает релеем для пересылки DHCP-запросов на адрес 10.10.0.4 (сначала делал глобальный DHCP-релей, тоже работает). На GS-4024 настроен маршрут на 10.20.6.0/24 через 192.168.1.21.

 

Фрагмент конфига DHCP:

class "vlan-2006" {
  match if binary-to-ascii(10,16,"",substring(option agent.circuit-id,2,2)) = "2006";
}

subnet 10.20.6.0 netmask 255.255.255.0 {
  pool {
    range 10.20.6.10 10.20.6.254;
    allow members of "vlan-2006";
    option routers 10.20.6.1;
  }
}

 

У Вас, возможно, не настроена маршрутизация между коммутаторами. MES должен видеть DHCP-сервер (проверяется пингом...)

 

И еще меня смущает следующая строчка из Вашего конфига:

class "vlan1002" {match if ( substring( option agent.circuit-id, 3, 3)="1002"); }

Во-первых, коммутатор добавляет номер VLANа в hex-коде, и чтобы сравнивать с символами ("1002"), соответственно, надо сперва преобразовать в ascii (binary-to-ascii). Во-вторых, почему берете три символа? Согласно документации Zyxel, он добавляет в option 82 следующие поля:

Slot ID (1 byte);
Port ID (1 byte);
VLAN ID (2 bytes);
Information (up to 64 bytes).

Поэтому правильней было бы Вам написать

class "vlan1002" {match if binary-to-ascii(10,16,"",substring( option agent.circuit-id,2,2))="1002"; }

 

Удачи :)

Edited by motorhunter
Posted

sillybilly

так и есть, релей работает если в том вилане есть ip адрес.

 

без ip адреса работает dhcp snooping - тогда к пакету просто добавляется опция 82 и он летит дальше (только на MES в BHR4 и ниже пакет и/или ответ еще летит и другим абонентам в том же вилане на том же свитче). dhcp-vlan перехватывает *все* dhcp пакеты на свитче и отправляет их в указанный влан, с опцией или без.

 

Posted
sillybilly

так и есть, релей работает если в том вилане есть ip адрес.

Не обязательно, если настраивать в разделе Global (а не отдельно для каждого VLANа), то работает и без адреса.
Posted

motorhunter, я это всё перепробовал 33 раза в разных комбинациях.

В самом удачном случае через 4728 пролетает DHCPDISCOVER. Но на клиентский свич ответ не доходит. Полагаю, что 4728 сильно отличается от 4024, ему нужна какая-то дополнительная настройка, чтоб корректно проталкивать ответы в нужный вилан.

По сабстрингу - да, вначале тупо скопировал из топика, а потом подумал... :)

 

Спасибо!

Posted

Дополню.

На самом деле вопрос состоит из двух - и я зря устраиваю мешанину.

 

Вопрос 1 - как донести до dhcpd, что мы хотим адрес в vlan1002, если DHCPREQUEST идет из бродкаст-домена vlan1, а про vlan1002 сервер ваще ни ухом ни рылом? Ответ пока один - завести IP-интерфейс в 3528 для vlan1002 и тогда сервак ПОНИМАЕТ, откуда дровишки. Если есть другой ответ - скажите же мне его!

Вопрос 2 - если решен вопрос 1 - как донести DHCPLEASE обратно до клиента? Напоминаю, про виланы dhcpd НЕ знает. Про них знает 4728 и 3528, но последний явно не маршрутизатор.

 

Вот где-то так.

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 и с Политикой конфиденциальности.