Jump to content

Recommended Posts

Posted (edited)

Всем привет!

Имеется:
1)Linux Router (10.0.0.1/24; 10.0.1.1/24; 10.0.2.1/24)

2)Linux ISC DHCP server 4.4.2 собранный из исходников с использованием USE_SOCKETS (10.0.0.2/24)
3)Dlink DGS-3000-28XS (10.0.1.2/24)
4)Клиентские устройства (10.0.2.2/24 - 10.0.2.250/24)

На DGS-3000-28XS необходимо настроить Relay + option 82, чтобы была связка IP + порт:

1 порт - 10.0.2.2/24

2 порт - 10.0.2.3/24

...

24 порт - 10.0.2.25/24

 

Настраиваю dhcp_relay на Dlink:

config dhcp_relay add ipif System 10.0.0.2
config dhcp_relay option_82 state enable
enable dhcp_relay

 

Конфиг ISC DHCP:

local-address 10.0.0.2;
authoritative;
ddns-update-style none;
log-facility local7;
default-lease-time 43200;
max-lease-time 43200;

class "SW0Port1" {
	match if binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6)) = "00:19:5b:fd:b0:6e" 
    and binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1)) = "1";
}

shared-network net0 {
	subnet 10.0.2.0 netmask 255.255.255.0 {
	option routers 10.0.2.1;
	pool {
		range 10.0.2.2;
		allow members of "SW0Port1";
	}
}


Подключаю клиента к 1 порту коммутатора. Клиент не получает IP-адрес. В логах DHCP сервера тишина.
Сделал tcpdump на DHCP сервере, пакет с option 82 в котором содержится Agent Circuit ID и Agent Remote ID прилетает.
Но dhcp сервер никак не реагирует. iptables на DHCP сервере отключен.
В чём я ошибся?

dhcp relay.png

option 82.png

Edited by zervu1boris
Posted

Попробуйте заменить

match if binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6)) = "00:19:5b:fd:b0:6e" 

 на

match if binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6)) = "0:19:5b:fd:b0:6e" 

Убираем лидирующий 0 в октете

Posted
20 часов назад, zhenya` сказал:

В отдельный шаред нетворк добавьте сабнет интерфейса дхцп сервера.

Сделал сначала так:

shared-network net1 {
        subnet 10.0.1.0 netmask 255.255.255.0 {
        }
}

Получил:

DHCPDISCOVER from e8:03:9a:18:82:4b via 10.0.0.2: network net1: no free leases

Потом сделал так:

shared-network net1 {
        subnet 10.0.1.0 netmask 255.255.255.0 {
                range 10.0.1.2 10.0.1.10;
                option routers 10.0.1.1;
        }
}

Клиент получил IP-адрес 10.0.1.3.
А должен был получить 10.0.2.2

 

15 часов назад, _J_ сказал:

Попробуйте заменить


match if binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6)) = "00:19:5b:fd:b0:6e" 

 на


match if binary-to-ascii(16, 8, ":", substring(option agent.remote-id, 2, 6)) = "0:19:5b:fd:b0:6e" 

Убираем лидирующий 0 в октете

Пока убрал проверку мака, сделал только по номеру порта

Posted
В 21.12.2020 в 17:36, zhenya` сказал:

Сабнет пустой сделайте и в один шареднетворк.

Спасибо, заработало!
 

local-address 10.0.1.2;

class "SW0Port1" {
        match if binary-to-ascii(10, 8, "", suffix( option agent.circuit-id, 1)) = "1";
}

shared-network net {
        subnet 10.0.1.0 netmask 255.255.255.0 { }

        subnet 10.0.2.0 netmask 255.255.255.0 {
                option routers 10.0.2.1;
                pool {
                        range 10.0.2.2;
                        allow members of "SW0Port1";
                }

        }
}

 

Posted (edited)

Теперь есть другой вопрос.
У нас половина сети построена на управляемых свитчах, а половина на неуправляемых.
В неуправляемом сегменте реализована авторизация клиентов с помощью IP + MAC.

Вопрос стоит в том, как настроить dhcp сервер так, чтобы можно было выдавать IP по порту и выдавать IP в соответствии с МАКом, и чтоб всё это работало через relay.

У меня в голове крутится только такой вариант:

local-address 10.0.1.2;

class "SW0Port1" {
        match if binary-to-ascii(10, 8, "", suffix( option agent.circuit-id, 1)) = "1";
}

shared-network net {
        subnet 10.0.1.0 netmask 255.255.255.0 { }

        subnet 10.0.2.0 netmask 255.255.255.0 {
                option routers 10.0.2.1;
                pool {
                        range 10.0.2.2;
                        allow members of "SW0Port1";
                }
                host id1 { hardware ethernet e8:03:9a:18:82:4b; fixed-address 10.0.2.121; option routers 10.0.2.1;}
        }
}

Но при таком варианте IP-адрес будет выдан из любого влана
 

схема0.png

Edited by zervu1boris
Posted
В 23.12.2020 в 12:10, zervu1boris сказал:

как настроить dhcp сервер так, чтобы можно было выдавать IP по порту и выдавать IP в соответствии с МАКом, и чтоб всё это работало через relay.

deny unknown clients для dhcp-сервера обслуживающего неуправляемые свитчи обязательно!
а для подсетки с opt82 allow unknown-clients точно также необходимо.

Можете попробовать совместить, но мне когда-то проще было 2 отдельных dhcp-сервера держать.

Posted (edited)

Всем спасибо!
Удалось реализовать. Пока не знаю на сколько это правильно, нагрузка на CPU покажет.
Может кому-то пригодится:

local-address 10.0.1.2;

class "SW0Port1" {
        match if binary-to-ascii(10, 8, "", suffix( option agent.circuit-id, 1)) = "1";
}

class "abonent0" {
        match if binary-to-ascii(10, 16, "", suffix(substring(option agent.circuit-id, 0,4), 2)) = "100"
        and binary-to-ascii(16, 8, ":", substring(hardware, 1, 7)) = "e8:3:9a:18:82:4b";
}

shared-network net {
        subnet 10.0.1.0 netmask 255.255.255.0 { }

        subnet 10.0.2.0 netmask 255.255.255.0 {
                option routers 10.0.2.1;
                pool {
                        range 10.0.2.2;
                        allow members of "SW0Port1";
                }
                pool {
                        range 10.0.2.100;
                        allow members of "abonent0";
                }
        }
}

В классе abonent0 сначала проверяется с какого vlan пришёл запрос. В моём случае 100.
Потом проверяется MAC абонента, в моём случае e8:3:9a:18:82:4b.
Абоненту выдаётся IP-адрес: 10.0.2.100

В классе SW0Port1 проверяется с какого порта пришёл запрос. Тут ещё необходимо сделать проверку по MACу свитча, если свитчей больше 1.

И ещё пока не разобрался с deny/allow unknown-clients

Edited by zervu1boris

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