Jump to content
Калькуляторы

Вопрос про dhcpd.conf Вопрос про dhcpd.conf, возмоджности eval

Интересует сравнительно небольшая по числу абонентов инсталляция dhcpd с использованием option 82. Как бы всё работает, но конфиг уж очень неудобный получается: приходится в *каждом* class в его match определять и МАС свича и порт. МАС, а не ip - потому что все свичи умеют МАС, но ip отдавать умеют не все. Порты кстати у цыско с нуля начинаются, а у других мутаторов с 1 - тоже неудобно и хочется заменить переменной, но не знаю как.

 

Суть вопроса: можно ли каким-либо образом указывать в конфиге МАС свича один раз, чтобы потом ссылаться на него в каждом матче ? Т.е. что-то типа переменных или макросов интересует.

 

Или допустим с помощью eval написать что-то типа:

 

# матчим свич

if suffix(option agent.remote-id,6) = 0:1:2:47:7c:0 {

# первый порт с2950

if match if suffix( option agent.circuit-id, 1 ) = 0 {

fixed-address 192.168.12.2;

}

# второй порт с2950

if match if suffix( option agent.circuit-id, 1 ) = 1 {

fixed-address 10.23.44.8;

}

}

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - вот именно так у меня не получилось даже с одним портом.

 

Вообще любые варианты упрощения конфига интересуют, не обязательно с классами или eval.

 

Про dhcpd+patch+radius+pgsql я читал на этом форуме, но IMHO это что-то монстрообразное. Если бы там примеры для mysql были, то я может быть и посмотрел бы :-), но не капенгаген в pgsql :-). А для mysql есть хотябы dialupadmin, кривой он но жить можно. Остаётся ещё просто freeradius, но они сами не рекомендуют пользовать их dhcp в продакшене.

 

Share this post


Link to post
Share on other sites

А зачем вам вообще мак свича?

зачем анализировать это поле?

Вот живой пример

 

class "2543"
{
match if concat(binary-to-ascii(10, 8, ".", packet(24, 4)), ":", binary-to-ascii(10, 8, "", substring(option agent.circuit-id, 5, 1))) = "10.40.5.79:6";
}

 

соответственно 10.40.5.79 -IP свича

6-порт

 

Edited by Negator

Share this post


Link to post
Share on other sites

проблемы две, точнее два неудобства:

 

1. На каждого абонента придётся создавать класс, в котром указывать идентификатор свича (remote-id=MAC). Т.е. если в свиче 20 юзеров, то в конфигепридётся 20 раз указать МАС свича. Неужели нет способа указывать МАС один раз ? зачем такая избыточность ? :-).

 

2. Приходится использовать именно MAC, т.к. не все свичи умеют отдавать ip в качестве remote-id. Например, с2950 не умеет ничего кроме МАС адреса и это не повод выбрасывать, номральный свич. Сменил свич - вперёд менять конфиг и искать там 20 раз этот МАС. Там и мак-то ещё в странной форме записи - без нулей. с2960 тоже не умеет ip отдавать, там можно чё-то наконфигурять, даже слово какое-то может отдавать (написать в это слово ойпи свича можно :-)), но не ойпи в чистом виде. В общем. в сети оборудование разное, поэтому для унификации нужно юзать МАС.

 

Инсталляция не большая, городить огород с dhcpd+patch + радиус и СУБД слишком сложно. Просто хочу нормальные конфиги :-).Видимо, действительно придётся писать скрипт, который генерит конфиг ...

Share this post


Link to post
Share on other sites

>Видимо, действительно придётся писать скрипт, который генерит конфиг

 

Нормальная практика, полезную информацию хранить в базе и редактировать через web, да через тот же phpPgAdmin. И сделать отдельную страничку с кнопочкой "сгенирить конфиг и зарелодить dhcpd". Релод через веб-сервер рекомендую делать через sudo, весьма удобно

Share this post


Link to post
Share on other sites

[root@dhcp1 ~]# cat /usr/local/sbin/sync.sh
#!/bin/bash

/usr/bin/rsync -az --password-file=/etc/rsync.password rsync://executor@10.0.0.1/dhcp/dhcpd.conf /etc/dhcpd.conf

# проверка на перезапуск служб из за измененных конфигов

# dhcp
/usr/bin/md5sum --check --status /var/lib/sync/dhcp
RETVAL=$?
if [ $RETVAL != 0 ]; then
/etc/init.d/dhcpd restart
/usr/bin/md5sum /etc/dhcpd.conf > /var/lib/sync/dhcp
fi

 

и раз в 5 минут дергаем скрипт... Ничего релоадить не надо, оно само ;)

Share this post


Link to post
Share on other sites

проблемы две, точнее два неудобства:

 

1. На каждого абонента придётся создавать класс, в котром указывать идентификатор свича (remote-id=MAC). Т.е. если в свиче 20 юзеров, то в конфигепридётся 20 раз указать МАС свича. Неужели нет способа указывать МАС один раз ? зачем такая избыточность ? :-).

 

2. Приходится использовать именно MAC, т.к. не все свичи умеют отдавать ip в качестве remote-id. Например, с2950 не умеет ничего кроме МАС адреса и это не повод выбрасывать, номральный свич. Сменил свич - вперёд менять конфиг и искать там 20 раз этот МАС. Там и мак-то ещё в странной форме записи - без нулей. с2960 тоже не умеет ip отдавать, там можно чё-то наконфигурять, даже слово какое-то может отдавать (написать в это слово ойпи свича можно :-)), но не ойпи в чистом виде. В общем. в сети оборудование разное, поэтому для унификации нужно юзать МАС.

 

Инсталляция не большая, городить огород с dhcpd+patch + радиус и СУБД слишком сложно. Просто хочу нормальные конфиги :-).Видимо, действительно придётся писать скрипт, который генерит конфиг ...

Еще раз. Мы не анализируем remote-id, мы смотрим с какого IP пришел этот запрос. Нам вообще remote-id не нужно

 

Share this post


Link to post
Share on other sites

проблемы две, точнее два неудобства:

 

1. На каждого абонента придётся создавать класс, в котром указывать идентификатор свича (remote-id=MAC). Т.е. если в свиче 20 юзеров, то в конфигепридётся 20 раз указать МАС свича. Неужели нет способа указывать МАС один раз ? зачем такая избыточность ? :-).

 

2. Приходится использовать именно MAC, т.к. не все свичи умеют отдавать ip в качестве remote-id. Например, с2950 не умеет ничего кроме МАС адреса и это не повод выбрасывать, номральный свич. Сменил свич - вперёд менять конфиг и искать там 20 раз этот МАС. Там и мак-то ещё в странной форме записи - без нулей. с2960 тоже не умеет ip отдавать, там можно чё-то наконфигурять, даже слово какое-то может отдавать (написать в это слово ойпи свича можно :-)), но не ойпи в чистом виде. В общем. в сети оборудование разное, поэтому для унификации нужно юзать МАС.

 

Инсталляция не большая, городить огород с dhcpd+patch + радиус и СУБД слишком сложно. Просто хочу нормальные конфиги :-).Видимо, действительно придётся писать скрипт, который генерит конфиг ...

Еще раз. Мы не анализируем remote-id, мы смотрим с какого IP пришел этот запрос. Нам вообще remote-id не нужно

Вам не нужно, нам нужно :-). Если вы не смотрите на remote-id, значит вы используете dhcp-relay. dhcp-snooping в чистом виде (а именно толкько в чистом виде он нормально работает на имеющемся у нас оборудовании) не передаёт ip-адрес, только вставляет remote-id и circuit-id. Вот, имея только эти два id, и нужно выдавать ойпи - такая задачка.

 

Share this post


Link to post
Share on other sites

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.