faq обучение настройка
Текущее время: Сб июл 26, 2025 08:46

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 71 ]  На страницу 1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Песнь о VLAN, Option 82 и DHCP | DES3526
СообщениеДобавлено: Вт янв 15, 2008 19:37 
Не в сети

Зарегистрирован: Вт янв 15, 2008 18:43
Сообщений: 11
Здравсвуйте, многоуважаемые!

Вот столкнулся с проблемкой и решился таки отписаться сюда (ну D-Link у меня, куда ж писать-то). Сразу оговорюсь, что по проблемме, описанной ниже были звонки в сервисный центр в Киеве, где мне обещали помочь и вообще терпеливо ко мне относились, вдумчиво думали и обещали собрать стенд по моей схеме и всё опробовать. В общем, как говорится, респект и уважуха техсаппорту Д-Линка! :-) Пишу сюда, ибо может некто уже сталкивался и может помочь мне не сломать мой мозг.

Итак, переходим к котлетам.

Идея-схема

Linux gate <--> Switch D-Link DES 3526G <--> Subnets/workstations

На свиче подняты пара виланов, которые пересекаются на 1 порту, который в свою очередь уходит на сервак. Юзеры/сети подключены к нетегированным портам-членам своих виланов. За каждым виланом своя сеть. Юзеры должны получать по ДХЦП от сервака адреса из своих сетей. Всякая лабуда типа файрволинга, роутинга, форвардинга нас не интересует и разбирается средствами сервака.


1, Linux

Интерфейсы, которые нас интересуют:
eth0 10.90.90.10 -- connected to DES 3526G port #1
eth0.100 192.168.1.254/24 -- VLAN alias for vlan-id 100
eth0.200 172.16.0.254/24 -- VLAN alias for vlan-id 200

ISC-DHCP:
а) Слушает на интерфейсе eth0 (что не есть принципиально).
б) Настроен с как shared-network со своими subnets, приналдежащих
своим виланам и пулами для раздачи.
в) При прослушивании ищет agent.circuit-id в пакете, при обнаружении логирует его и прыгает на тот пул, для которого описан класс по вилану.


2. Switch DES 3526G

a) VLAN100: tagged 1,5 untagged 6
b) VLAN200: tagged 1,7 untagged 8

dhcp_relay on
dhcp_relay option_82 policy replace
dhcp_relay option_82 state enabled
dhcp_relay add ipif System 10.90.90.10

3. Клиенты -- пофиг что, но с сетевой картой :-)

Это была преамбула, а теперь амбула. Виланы отрабатывают на ура. Клиент со статическим IP нормально шурует и видит гейт, но статика нам не подходит, поэтому приходим к самомому интересному.

Втыкаем клиента в порт 6 (vlan-id 100) и пытаемся получить адрес по DHCP. Сервачок запускаем для начала с опцией -d, дабы наблюдать за безобразием. И о! Чудо! В логах присутствует перехваченный CIRCUIT-ID (я выдёргиваю из него значение vlan-id, получается как 0100) и раз он есть, ДХЦП сервер преспокойно отдает клиенту адрес из пула для родного вилана нумбер 100 и всё в шоколаде!

Спокойно, скоро конец истории, ща начнётся...

Втыкаем ишшо одного клиента в порт 8 (нетэгированный вилан 200), статический IP из сетки 172.16.0.0/24 -- всё гуд. Повторяем попытку получить адресок от нашего ДХЦП... Жопа! В логах нет ваабче CIRCUIT-ID. Напрочь отсутсвует. Поэтому сервак и отвечает, что no free leases. Да иткуда им лизам-то взяться, потому как ИП можно получить члену какого-то класса, а не просто так.

Вот и всё. Если б кто мог помочь....

Да. Купить циску и не мучаться не предлагать -- денех нетути, поднимать несколько экземпляров ДХЦП сервака и слушать каждый свой вилановый интерфес -- фу! Ибо дёртихак и некрасиво. Нафиг тогда dhcp_relay? ;-)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт янв 15, 2008 21:12 
Не в сети
Сотрудник D-LINK
Сотрудник D-LINK

Зарегистрирован: Пт май 13, 2005 15:49
Сообщений: 20616
Откуда: D-Link, Moscow
Какая у вас версия прошивки?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт янв 15, 2008 22:21 
Не в сети

Зарегистрирован: Вт янв 15, 2008 18:43
Сообщений: 11
501b09


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт янв 15, 2008 22:43 
Не в сети
Сотрудник D-LINK
Сотрудник D-LINK

Зарегистрирован: Пт май 13, 2005 15:49
Сообщений: 20616
Откуда: D-Link, Moscow
Я Вам прошивку выслал.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср янв 16, 2008 00:17 
Не в сети

Зарегистрирован: Вт янв 15, 2008 18:43
Сообщений: 11
Спасибо. Обязательно попробую, хотя я и ошибся в указании версии моей текущей прошивки (у меня B15) -- Ваша новее.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср янв 16, 2008 13:43 
Не в сети

Зарегистрирован: Вт янв 15, 2008 18:43
Сообщений: 11
Не помогло...

Не первый я. Вот цитата:

"Имхо, вряд ли кто-то даст рабочие примеры, т.к. Option 82 - штука довольно редко используемая сейчас.

Кстати, насколько я знаю, в 3526 DHCP relay реализован ограниченно. На 3526 Option 82 добавляется только при назначении собственного интерфейса управления как DHCP Relay агента. Недостатки:
- Интерфейс управления свичом (адрес которого 3526 вставляет в поле giaddr) в одной с клиентами VLAN. Т.е. не получится сделать отдельную VLAN управления для устройств сети доступа.
- VLAN, в которой осуществляется установка Option 82, – только одна. Т.е. нельзя c помощью DHCP организовать VLAN-per-Service, где для одна VLAN для данных, другая для голоса, третья - для видео и т.д."

Это правда?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср янв 16, 2008 14:08 
Не в сети

Зарегистрирован: Чт дек 06, 2007 14:33
Сообщений: 54
Откуда: Томск
схема: пихаем интерфейсы свичей в управляющий вилан, с тэгом, скажем, 20.
config ipif System vlan vlan20 ipaddress 172.16.1.X/24 state enable
create iproute default 172.16.1.254 1
enable dhcp_relay
config dhcp_relay hops 4 time 0
config dhcp_relay option_82 state enable
config dhcp_relay option_82 check disable
config dhcp_relay option_82 policy replace
config dhcp_relay add ipif System 172.16.1.254

1.254 - это соответственно наш dhcp-сервер

у него в конфиге:
class "s1-port1" {
match if concat(binary-to-ascii(16, 8, ":", suffix(option agent.remote-id, 5)), ":", binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1))) = "mac:of:switch:port";
}

shared-network "cl" {
subnet 172.16.1.0 netmask 255.255.255.0 { not authoritative; }
...тут описываем сети из которых будем выдавать адреса
subnet 1.1.1.0 netmask 255.255.255.0 {
option routers 1.1.1.254;
option domain-name-servers 1.1.1.253;

pool { range 1.1.1.1 1.1.1.1 ; allow members of "s1-port1"; }
}
...ещё много сетей
}

вроде всё.
а, ещё нужно запретить прямые dhcp клиентам:
create access_profile ip udp src_port_mask 0xFFFF profile_id 5
config access_profile profile_id 5 add access_id 1 ip udp src_port 68 port 1 deny


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср янв 16, 2008 15:30 
Не в сети

Зарегистрирован: Вт янв 15, 2008 18:43
Сообщений: 11
Не работает. Option_82 по прежнему включается только для одного вилана, запросы с других виланов приходят чистыми.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт янв 22, 2008 11:51 
Не в сети

Зарегистрирован: Пт авг 10, 2007 11:04
Сообщений: 277
Откуда: Moscow
Пришлите конфиг коммутатора.
Тк в моём тесте всё работает отлично.
Я Вам выслал последнюю версию прошивки.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт янв 22, 2008 17:27 
Не в сети

Зарегистрирован: Пн сен 27, 2004 18:18
Сообщений: 1642
Откуда: Vault 13
Alexander Kiriluk писал(а):
цитата:

"Имхо, вряд ли кто-то даст рабочие примеры, т.к. Option 82 - штука довольно редко используемая сейчас.
примеры? легко! их есть у нас :) вот, ловите:
Код:
authoritative;
ddns-update-style none;

default-lease-time  1800;   # 1/2 hour
max-lease-time      3600;   # 1 hour
min-lease-time       900;   # 1/4 hour

use-lease-addr-for-default-route on;
one-lease-per-client on;
deny duplicates;
deny bootp;

option arp-cache-timeout 3600;
option netbios-node-type 1; # B-node (Broadcast)

#-----------------------------------------------------------------------------
# специфичные для Microsoft-а вещи:
# DHCP Options Supported by Clients: http://support.microsoft.com/kb/121005
# How to disable NetBIOS over TCP/IP by using DHCP server options: http://support.microsoft.com/kb/313314
# DHCP Tools and Settings: http://technet2.microsoft.com/windowsserver/en/library/a70f1bb7-d2d4-49f0-96d6-4b7414ecfaae1033.mspx?mfr=true
option space microsoft;
option microsoft.disable-netbios-over-tcpip code 1 = unsigned integer 32;
option microsoft.release-on-shutdown        code 2 = unsigned integer 32;
# только для Windows 2000 и XP клиентов используется:
# substring(option vendor-class-identifier, 0, 8) = "MSFT 5.0"
if substring(option vendor-class-identifier, 0, 4) = "MSFT" {
    vendor-option-space microsoft;
    # по дефолту NetBIOS over TCP/IP выключен! пример где включен см. ниже
    option microsoft.disable-netbios-over-tcpip 2;
    option microsoft.release-on-shutdown 1;
}

#-----------------------------------------------------------------------------
# Classless Static Route aka RFC 3442: http://www.ietf.org/rfc/rfc3442.txt
# Windows Vista и другие не Windows DHCP клиенты:
option classless-static-route    code 121 = array of unsigned integer 8;
# Windows 2000 and XP DHCP клиенты:
option classless-static-route-ms code 249 = array of unsigned integer 8;


#-----------------------------------------------------------------------------
# логирование
if exists agent.remote-id and exists agent.circuit-id {
    if binary-to-ascii(16, 8, "", substring(option agent.remote-id, 2, 1)) = "0" {
        set switch-mac = concat("0", binary-to-ascii(16, 8, "", substring(option agent.remote-id, 2, 1)), ":", binary-to-ascii(16, 8, ":", substring(option ag
ent.remote-id, 3, 6)));
    } else {
        set switch-mac = binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6));
    }
    set switch-addr = binary-to-ascii(10, 8, ".", packet(24, 4));
    set switch-port = binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1));
    set switch-port-vlan = binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 2, 2));
    log(info, concat("- Lease: ", binary-to-ascii(10, 8, ".", leased-address), " via IP: ", switch-addr, " (MAC: ", switch-mac, ") on port: ", switch-port, "
in VLAN: ", switch-port-vlan));
}


#-----------------------------------------------------------------------------
# подсеть без классов, классический вариант
subnet 172.16.0.0 netmask 255.255.255.0 {
    range 172.16.0.60 172.16.0.70;
    option routers 172.16.0.251;
    option domain-name-servers 172.16.0.253;
    # для этой сети NetBIOS over TCP/IP включен
    option microsoft.disable-netbios-over-tcpip 1;
}
host host_10 { hardware ethernet 00:0f:ea:f3:42:9a; fixed-address 172.16.0.10; }
...
host host_50 { hardware ethernet 00:19:d1:8c:10:70; fixed-address 172.16.0.50; }


#-----------------------------------------------------------------------------
# описание классов которые используются при DHCP relay + option 82:

# в качестве условия берется МАС адрес свича:
class "your:switch:with:option_82:MAC:address:switch_port_number" {
    match if concat(
        binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 3, 6)),
        ":",
        binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1))
    ) = "your:switch:with:option_82:MAC:address:switch_port_number";
}
# сокращенная запись:
class "your:switch:with:option_82:MAC:address:switch_port_number" {
    match if concat(binary-to-ascii(16,8,":",substring(optionagent.remote-id,3,6)),":",binary-to-ascii(10,8,"",substring(optionagent.circuit-id,5,1))) = "your:switch:with:option_82:MAC:address:switch_port_number";
}

# вместо MAC-а из agent.remote-id, берем IP адрес свича из пакета:
class "your.switch.with_option_82.IP_address:switch_port_number" {
    match if concat(
        binary-to-ascii(10, 8, ".", packet(24, 4)),
        ":",
        binary-to-ascii(10, 8, "", suffix(option agent.circuit-id, 1))
    ) = "your.switch.with_option_82.IP_address:switch_port_number";
}
# сокращенная запись:
class "your.switch.with_option_82.IP_address:switch_port_number" {
    match if concat(binary-to-ascii(10,8,".",packet(24,4)),":",binary-to-ascii(10,8,"",suffix(optionagent.circuit-id,1))) = "your.switch.with_option_82.IP_address:switch_port_number";
}

# MAC адрес клиента как хар-ка класса:
class "some:your:client:hardware:MAC:address" {
    match if substring(hardware, 1, 7) = some:your:client:hardware:MAC:address;
}

# ну или любая другая запись вида:
# class "имя_класса" { всяко_разно_что_нужно_чтобы_класс_матчился; }


#-----------------------------------------------------------------------------
# подсети с классами
shared-network "clients" {
    # подсеть с железом
    # описание небходимо чтобы DHCP знал топологию сети
    subnet 10.10.10.0 netmask 255.255.254.0 { }

    # подсети с юзерами
    # для примера даны 3 подсети, чтобы было видно как прописывается classless static route
    # в каждой сети, для примера, даны 5 хостов
    subnet 192.168.100.0 netmask 255.255.255.0 {
        ping-check off;
        option routers 192.168.100.1;
        option domain-name-servers 192.168.100.1;
        option classless-static-route    24,192,168,110, 192,168,100,1,  24,192,168,120, 192,168,100,1;
        option classless-static-route-ms 24,192,168,110, 192,168,100,1,  24,192,168,120, 192,168,100,1;

        pool { range 192.168.100.5; allow members of "имя_класса"; }
        pool { range 192.168.100.6; allow members of "имя_класса"; }
        pool { range 192.168.100.7; allow members of "имя_класса"; }
        pool { range 192.168.100.8; allow members of "имя_класса"; }
        pool { range 192.168.100.9; allow members of "имя_класса"; }
    }

    subnet 192.168.110.0 netmask 255.255.255.0 {
        ping-check off;
        option routers 192.168.110.1;
        option domain-name-servers 192.168.110.1;
        option classless-static-route    24,192,168,100, 192,168,110,1,  24,192,168,120, 192,168,110,1;
        option classless-static-route-ms 24,192,168,100, 192,168,110,1,  24,192,168,120, 192,168,110,1;

        pool { range 192.168.110.5; allow members of "имя_класса"; }
        pool { range 192.168.110.6; allow members of "имя_класса"; }
        pool { range 192.168.110.7; allow members of "имя_класса"; }
        pool { range 192.168.110.8; allow members of "имя_класса"; }
        pool { range 192.168.110.9; allow members of "имя_класса"; }
    }

    subnet 192.168.120.0 netmask 255.255.255.0 {
        ping-check off;
        option routers 192.168.120.1;
        option domain-name-servers 192.168.120.1;
        option classless-static-route    24,192,168,100, 192,168,120,1,  24,192,168,110, 192,168,120,1;
        option classless-static-route-ms 24,192,168,100, 192,168,120,1,  24,192,168,110, 192,168,120,1;

        pool { range 192.168.120.5; allow members of "имя_класса"; }
        pool { range 192.168.120.6; allow members of "имя_класса"; }
        pool { range 192.168.120.7; allow members of "имя_класса"; }
        pool { range 192.168.120.8; allow members of "имя_класса"; }
        pool { range 192.168.120.9; allow members of "имя_класса"; }
    }

# дальше идет еще описание подсетей
#    subnet 192.168.XYZ.0 netmask 255.255.255.0 { }
# аналогично тому что выше
}
насчет редкости использования я бы сказал что это кому как надо ... если надо - используют, если не надо, то и не заморачиваются ;)
Alexander Kiriluk писал(а):
Кстати, насколько я знаю, в 3526 DHCP relay реализован ограниченно.
а можно подробностей? ;)
Alexander Kiriluk писал(а):
На 3526 Option 82 добавляется только при назначении собственного интерфейса управления как DHCP Relay агента.
а как иначе то?
Alexander Kiriluk писал(а):
- Интерфейс управления свичом (адрес которого 3526 вставляет в поле giaddr) в одной с клиентами VLAN. Т.е. не получится сделать отдельную VLAN управления для устройств сети доступа.
это почему это не получится? как раз таки получится ... достаточно вынести клиентов в отдельный VLAN, а для управления использовать VLAN default (плюсов у этого решения оч. много ;)) ... если держать и клиентов и свич в одной подсети то необходимость DHCP Relay вообще теряет смысл, т.к. клиенты могут напрямую обращаться к DHCP серверу (я не беру случаи использования ACL) ... DHCP Relay как таковой был придуман для того чтобы бродкастовые запросы от клиентов одной подсети могли попасть через роутер в другую подсеть в которой собственно и расположен DHCP сервер ... на L2 свичах же это используется в основном для того чтобы можно было повесить DHCP сервер в одном единственном VLAN и таким образом не гонять запросы по всему их множеству ... ну и естессно, при использовании Option 82, Вы всегда знаете с какого именно порта и какого именно свича пришел тот или иной запрос ... это я так, простым языком, упрощенно, все описываю, если Вы не против конечно ...
Alexander Kiriluk писал(а):
- VLAN, в которой осуществляется установка Option 82, – только одна. Т.е. нельзя c помощью DHCP организовать VLAN-per-Service, где для одна VLAN для данных, другая для голоса, третья - для видео и т.д."
б-р-р-р ... relay да, работает только в одном, системном, VLAN, но кто Вам мешает создать другие VLAN и использовать их по Вашему желанию?

_________________
с уважением, БП


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср янв 23, 2008 16:37 
Не в сети

Зарегистрирован: Вт янв 15, 2008 18:43
Сообщений: 11
Хух. Спасибо всем откликнувшимся. У меня всё еще не заработало, блин. Может я где-то глючу, поэтому попытаюсь детальнее описать свою схемку.

Итак, для наглядности рисунок (дабы предвосхитить возможные вопросы)
Изображение

Настройки свича

(полный конфиг не кидаю -- много, да и не нужно)

Код:
DES-3526:admin#show switch
Command: show switch

Device Type       : DES-3526 Fast-Ethernet Switch
Combo Port Type   : 1000Base-T + 1000Base-T
MAC Address       : 00-1B-11-AF-E6-4D
IP Address        : 10.90.90.90 (Manual)
VLAN Name         : default
Subnet Mask       : 255.255.255.0
Default Gateway   : 10.90.90.10
Boot PROM Version : Build 3.00.008
Firmware Version  : Build 5.01-B16
Hardware Version  : 0A3G
Device S/N        :
Power Status      : Main - Normal, Redundant - Not Present
System Name       :
System Location   :
System Contact    :
Spanning Tree     : Disabled
GVRP              : Disabled
IGMP Snooping     : Disabled
TELNET            : Enabled (TCP 23)
SSH               : Disabled
WEB               : Enabled (TCP 80)
RMON              : Disabled
Asymmetric VLAN   : Disabled


Код:
DES-3526:admin#show vlan
Command: show vlan

VID             : 1          VLAN Name     : default
VLAN TYPE       : static     Advertisement : Enabled
Member ports    : 1-4,11-26           
Static ports    : 1-4,11-26           
Current Tagged ports   :                     
Current Untagged ports : 1-4,11-26           
Static Tagged ports    :                     
Static Untagged ports  : 1-4,11-26           
Forbidden ports :                     

VID             : 100        VLAN Name     : vlan100
VLAN TYPE       : static     Advertisement : Disabled
Member ports    : 1,5-6               
Static ports    : 1,5-6               
Current Tagged ports   : 1,5                 
Current Untagged ports : 6                   
Static Tagged ports    : 1,5                 
Static Untagged ports  : 6                   
Forbidden ports :                     

VID             : 200        VLAN Name     : vlan200                           
VLAN TYPE       : static     Advertisement : Disabled
Member ports    : 1,7-8               
Static ports    : 1,7-8               
Current Tagged ports   : 1,7                 
Current Untagged ports : 8                   
Static Tagged ports    : 1,7                 
Static Untagged ports  : 8                   
Forbidden ports :                     

VID             : 300        VLAN Name     : vlan300                           
VLAN TYPE       : static     Advertisement : Disabled
Member ports    : 1,9-10               
Static ports    : 1,9-10               
Current Tagged ports   : 1,9                 
Current Untagged ports : 10                   
Static Tagged ports    : 1,9                 
Static Untagged ports  : 10                   
Forbidden ports :                     

Total Entries : 4


Код:
DES-3526:admin#show dhcp_relay                           
Command: show dhcp_relay

DHCP/BOOTP Relay Status         : Enabled
DHCP/BOOTP Hops Count Limit     : 8
DHCP/BOOTP Relay Time Threshold : 0
DHCP Relay Agent Information Option 82 State  : Enabled
DHCP Relay Agent Information Option 82 Check  : Disabled
DHCP Relay Agent Information Option 82 Policy : Replace

Interface     Server 1         Server 2         Server 3         Server 4
------------  ---------------  ---------------  ---------------  --------------
System        10.90.90.10


Вот и всё, что нужно для опции 82. Пинги на сервак идут, всё нормально.

DHCP Sever

Система: gentoo-sources-2.6.22-r9
dhcpd: isc-dhcp-3.1.0

Никакие iptables не включены, форвардинг включен.

Настройка интерфейсов

Код:
# Поднимаем native vlan интерфейс и присваиваем IP из сети ipif System свитча
ifconfig eth0 10.90.90.10 netmask 255.255.255.0 up

# устанавливаем тип отображения виланов в линуксе
vconfig set_name_type  DEV_PLUS_VID_NO_PAD

# создаем вилан 100 на интерфейсе eth0
vconfig add eth0 100

# заставляем ядро пересобирать эзернет пакет с виланом (в доке isc-dhcp попросили сделать)
vconfig set_flag eth0.100 1 1

# присваиваем IP адрес из сети 100-го вилана
ifconfig eth0.100 192.168.5.254 netmask 255.255.255.0 up

# аналогино вилану 100
vconfig add eth0 200
vconfig set_flag eth0.200 1 1
ifconfig eth0.200 172.16.0.1 netmask 255.255.255.0 up

# аналогично вилану 100
vconfig add eth0 300
vconfig set_flag eth0.300 1 1
ifconfig eth0.200 10.1.1.1 netmask 255.255.255.0 up


Теперь в системе на внутреннем интерфейсе eth0 прописаны дополнительно три вилана с тегами 100, 200 и 300.

Далее конфигурим dhcpd
dhcpd.conf
Код:
# Всякая стандартная фигня
allow booting;
allow bootp;

default-lease-time 600;
max-lease-time 7200;
log-facility local7;
ddns-update-style none;
# DHCP сервер слушает запросы здесь
local-address 10.90.90.10;
authoritative;

# Просто для отладки добавляем это условие. При обнаружении включенной опции 82 в пакете будет выводится что-то подобное: [i]Circuit-ID VLAN tag: 0100[/i]
if exists agent.circuit-id {
    log( info, concat("Circuit-ID VLAN tag: ", binary-to-ascii(10,8,"",substring(option agent.circuit-id,2,2))));
}

# Определяем класс для запросов, пришедших с vlan 100
class "vlan100" {
    match if binary-to-ascii(10,8,"",substring(option agent.circuit-id,2,2))="0100";
}

# Определяем класс для запросов, пришедших с vlan 200
class "vlan200" {
    match if binary-to-ascii(10,8,"",substring(option agent.circuit-id,2,2))="0200";
}

# Определяем класс для запросов, пришедших с vlan 300
class "vlan300" {
    match if binary-to-ascii(10,8,"",substring(option agent.circuit-id,2,2))="0300";
}

# Собственно конфигурация подсетей
shared-network dlink-3526 {

    # vlan100 subnet description
    subnet 192.168.5.0 netmask 255.255.255.0 {
   filename "pxelinux.0";
        next-server 192.168.5.254;
   option ip-forwarding off;
   option routers 192.168.5.254;
    }

    # native VLAN subnet
    # Определение "слушателя" без пулов
    subnet 10.90.90.0 netmask 255.255.255.0 {
    }
   
    # vlan200 subnet
    subnet 172.16.0.0 netmask 255.255.255.240 {
   option broadcast-address 172.16.0.15;
   option routers 172.16.0.1;
    }

    # vlan300 subnet
    subnet 10.1.1.0 netmask 255.255.255.0 {
   option broadcast-address 10.1.1.255;
   option routers 10.1.1.1;
    }
   
    # address pool for vlan100 clients
    pool {
        range 192.168.5.160 192.168.5.180;
   allow members of "vlan100";
    }
   
    # address pool for vlan200 clients
    pool {
   range 172.16.0.2 172.16.0.13;
   allow members of "vlan200";
    }

    # address pool for vlan300 clients
    pool {
   range 10.1.1.50 10.1.1.100;
   allow members of "vlan300";
    }

   
} # End of shared-network dlink-3626


Вот и всё.

Далее переходим к проверке работоспособности конфигов. Перед началом тестов обнулены dhcpd.leases, конфиги сохранены, свитч и сервак ребутнулись. Проверил конфиги и работостособность со статическими IP -- все ок.

1. Запускаем #dhcpd -d и смотрим.


1. Втыкаем клиента в порт 6 (Vlan 100). Пробуем получить адрес. Лог красиво отхватывает Circuit-ID. Всё хорошо -- получили 192.168.5.160 (из того пула, что надо).

2. Втыкаем другого клиента в порт 8 (Vlan 200). Тоже всё гуд. Получаем 172.16.0.2

3. Втыкаемся в порт 10 (Vlan 300)... ёпрст! В логах нету CIRCUIT-ID!!! Куда делся? Где ошибка?

Я уже дурной с этим всем :-) Может кому удастся узреть таракана?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср янв 23, 2008 18:22 
Не в сети

Зарегистрирован: Пн сен 27, 2004 18:18
Сообщений: 1642
Откуда: Vault 13
Alexander Kiriluk писал(а):
Может я где-то глючу, поэтому попытаюсь детальнее описать свою схемку.
объясните, пожалуйста, зачем Вы используете DHCP relay когда Ваши юзеры напрямую "видят" DHCP сервер?
Alexander Kiriluk писал(а):
Втыкаем клиента в порт 6 (vlan-id 100) и пытаемся получить адрес по DHCP. Сервачок запускаем для начала с опцией -d, дабы наблюдать за безобразием. И о! Чудо! В логах присутствует перехваченный CIRCUIT-ID (я выдёргиваю из него значение vlan-id, получается как 0100) и раз он есть, ДХЦП сервер преспокойно отдает клиенту адрес из пула для родного вилана нумбер 100 и всё в шоколаде!
для логирования не обязательно юзать ключик "-d", можно добавить в конфиг нечто в духе:
Код:
if exists agent.remote-id and exists agent.circuit-id {
    if binary-to-ascii(16, 8, "", substring(option agent.remote-id, 2, 1)) = "0" {
        set switch-mac = concat("0", binary-to-ascii(16, 8, "", substring(option agent.remote-id, 2, 1)), ":", binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 3, 6)));
    } else {
        set switch-mac = binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6));
    }
    set switch-addr = binary-to-ascii(10, 8, ".", packet(24, 4));
    set switch-port = binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1));
    set switch-port-vlan = binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 2, 2));
    log(info, concat("- Lease: ", binary-to-ascii(10, 8, ".", leased-address), " via IP: ", switch-addr, " (MAC: ", switch-mac, ") on port: ", switch-port, "in VLAN: ", switch-port-vlan));
}
и смотреть в логе и лизах то что надо ;)

насчет "0100" ... почему бы Вам не использовать консрукцию вида:
Код:
class "vlan100" {
    match if concat("0", binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 2, 2))) = "100";
}
и всех делов ... будуте спокойно писать номер тега ;)

_________________
с уважением, БП


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср янв 23, 2008 18:39 
Не в сети

Зарегистрирован: Вт янв 15, 2008 18:43
Сообщений: 11
Цитата:
объясните, пожалуйста, зачем Вы используете DHCP relay когда Ваши юзеры напрямую "видят" DHCP сервер?


Для раздачи ИП по географическому расположению сетей (за портами будут еще свичи). Дальше кому что можно будет разруливать файрволл. Ну захотелось мне так реализовать. Что плохого? :-)

Цитата:
для логирования не обязательно юзать ключик "-d", можно добавить в конфиг нечто в духе:


Это не принципиально. Мне не тяжко лидирующий нолик дописать .


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт янв 24, 2008 12:53 
Не в сети

Зарегистрирован: Пн сен 27, 2004 18:18
Сообщений: 1642
Откуда: Vault 13
Alexander Kiriluk писал(а):
Для раздачи ИП по географическому расположению сетей (за портами будут еще свичи). Дальше кому что можно будет разруливать файрволл. Ну захотелось мне так реализовать. Что плохого? :-)
плохого в этом ничего нет, option 82 для этого как раз и предназначена, просто ... скажите, у Вас DHCP слушает на ваших eth0.100/200/300?

_________________
с уважением, БП


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт янв 24, 2008 14:46 
Не в сети

Зарегистрирован: Вт янв 15, 2008 18:43
Сообщений: 11
Цитата:
плохого в этом ничего нет, option 82 для этого как раз и предназначена, просто ... скажите, у Вас DHCP слушает на ваших eth0.100/200/300?


Нет, конечно. Это видно из настройки из настройки DHCP сервера

local-address 10.90.90.10;

А этот адрес присвоен eth0 (в принципе на инрефейс приходит весь траффик от свитча и дхцп-запросы тоже, но сей факт никак не отражается на работе самого демона, т.к. в система слушает на 10.90.90.10:67, а пришедшее при необходимости форвардится ядром куда надо; при необходимости легко закрывается при помощи файрволла: iptables -A INPUT -i eth0.100 -p udp --dport 67 -j DROP, например... ну и т.д.)

Хочется реализовать данную возможность, ибо такая схема позволяет вовсю разгуляться воображению: Dynamic ACL, Raduis, Transparent Proxy, Traffic Shaping и много других умных аглицких слов, которые все понимает цыска, но при цене вопроса... Ну Вы меня понимаете ;-)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 71 ]  На страницу 1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Google [Bot] и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB