Jump to content
Local
Baneff

FreeBSD, isc-dhcp44-relay + isc-dhcp44-server на одном компе

Recommended Posts

Доброго всем дня.

Стояла себе сетка з раздачей адресов по DHCP c FreeBSD  сервака через isc-dhcp44-server и всё работало. Захотелось раздавать адреса не в соответствии с МАС адресами клиентов, а в соответствии с сетевым интерфейсом, через который клиент подключен независимо от его MAC адреса. Для этого понадобилось установить isc-dhcp44-relay, который умеет снимать имена интерфейсов с входных запросов и передавать их DHCP серверу. И тут вылезла проблема. Если isc-dhcp44-relay и isc-dhcp44-server находятся на физически разных компах, то всё работает без проблем. Однако, держать отдельно специальный комп только под isc-dhcp44-server как-то не хочется, хотелось бы всё это впихнуть на один комп и вот тут - никак. Эти два продукта одной фирмы садятся в сетевой стек очень глубоко, на уровне BPF и пытаются одновременно занять одни и те-же ресурсы. Попытка поместить isc-dhcp44-server в Jail и даже в виртуальную машину тоже успеха не принесла. Попытки заменить на продукты других разработчиков пока не дали работоспособной конфигурации тоже. Кто-то сталкивался с такой задачей? Есть хоть какая-то возможность совместить оба продукта ISC на одном FreeBSD компе? Или, возможно, есть другое рабочее решение для раздачи IP адресов клиентам не по MAC-ам, а по интерфейсам подключения с помощью одного FreeBSD компа?

Спасибо.

Share this post


Link to post
Share on other sites
1 час назад, Baneff сказал:

Доброго всем дня.

Стояла себе сетка з раздачей адресов по DHCP c FreeBSD  сервака через isc-dhcp44-server и всё работало. Захотелось раздавать адреса не в соответствии с МАС адресами клиентов, а в соответствии с сетевым интерфейсом, через который клиент подключен независимо от его MAC адреса. Для этого понадобилось установить isc-dhcp44-relay, который умеет снимать имена интерфейсов с входных запросов и передавать их DHCP серверу. И тут вылезла проблема. Если isc-dhcp44-relay и isc-dhcp44-server находятся на физически разных компах, то всё работает без проблем. Однако, держать отдельно специальный комп только под isc-dhcp44-server как-то не хочется, хотелось бы всё это впихнуть на один комп и вот тут - никак. Эти два продукта одной фирмы садятся в сетевой стек очень глубоко, на уровне BPF и пытаются одновременно занять одни и те-же ресурсы. Попытка поместить isc-dhcp44-server в Jail и даже в виртуальную машину тоже успеха не принесла. Попытки заменить на продукты других разработчиков пока не дали работоспособной конфигурации тоже. Кто-то сталкивался с такой задачей? Есть хоть какая-то возможность совместить оба продукта ISC на одном FreeBSD компе? Или, возможно, есть другое рабочее решение для раздачи IP адресов клиентам не по MAC-ам, а по интерфейсам подключения с помощью одного FreeBSD компа?

Спасибо.

 

разнести их по разным интерфейсам же

хз, можно ли дхцп сервер вынести в lo0, но если прокатит - вас ждет успех

либо на пустой бридж посадить

Share this post


Link to post
Share on other sites
5 минут назад, l1ght сказал:

разнести их по разным интерфейсам же

хз, можно ли дхцп сервер вынести в lo0, но если прокатит - вас ждет успех

либо на пустой бридж посадить

Они оба по интерфейсам не разводятся и чисто на lo0 не садятся, а сразу тупо пытаются сесть на 0.0.0.0/0:67 вне зависимости от настроек. Естественно, сразу у обоих это не получается. Можно посадить сервер на порт, отличный от 67, тогда запускаются оба. Но тогда непонятно, как заставить релей передавать запросы юзеров на нестандартный порт сервера. Ещё идеи есть?

Share this post


Link to post
Share on other sites
8 минут назад, Baneff сказал:

Они оба по интерфейсам не разводятся и чисто на lo0 не садятся, а сразу тупо пытаются сесть на 0.0.0.0/0:67 вне зависимости от настроек. Естественно, сразу у обоих это не получается. Можно посадить сервер на порт, отличный от 67, тогда запускаются оба. Но тогда непонятно, как заставить релей передавать запросы юзеров на нестандартный порт сервера. Ещё идеи есть?

Запросы передавать на другой порт с помощью фаервола

Share this post


Link to post
Share on other sites
15 минут назад, joker85 сказал:

Запросы передавать на другой порт с помощью фаервола

Интересная мысль, спасибо, попробую с помощью ipfw fwd перенаправить запросы на нестандартный порт.

Share this post


Link to post
Share on other sites
1 час назад, Baneff сказал:

Интересная мысль, спасибо, попробую с помощью ipfw fwd перенаправить запросы на нестандартный порт.

ipfw_or_pf

Share this post


Link to post
Share on other sites
1 минуту назад, joker85 сказал:

ipfw_or_pf

Да, но на этом компе только ipfw используется в даннй момент, не хочется плодить сущности. Как раз сейчас проверяю, о результатах доложусь.

Share this post


Link to post
Share on other sites

Пишите, инстересно узнать

Share this post


Link to post
Share on other sites
3 часа назад, Baneff сказал:

Они оба по интерфейсам не разводятся и чисто на lo0 не садятся, а сразу тупо пытаются сесть на 0.0.0.0/0:67 вне зависимости от настроек. Естественно, сразу у обоих это не получается. Можно посадить сервер на порт, отличный от 67, тогда запускаются оба. Но тогда непонятно, как заставить релей передавать запросы юзеров на нестандартный порт сервера. Ещё идеи есть?

Да херня же, не должно так быть.

Вот правда isc-dhcp4 я в глаза не видел. Но тройка то точно умела на нужный интерфейс падать.

Share this post


Link to post
Share on other sites
8 минут назад, l1ght сказал:

Да херня же, не должно так быть.

Вот правда isc-dhcp4 я в глаза не видел. Но тройка то точно умела на нужный интерфейс падать.

Полностью согласен - херня и так не должно быть. Однако факт налицо:

> sockstat -l
USER     COMMAND    PID     FD PROTO  LOCAL ADDRESS    FOREIGN ADDRESS

dhcpd    dhcpd            60531 8    udp4      *:67                           *:*

Share this post


Link to post
Share on other sites
2 часа назад, joker85 сказал:

Пишите, инстересно узнать

Не, не получается. Пытался завернуть запросы на нестандарный порт по всякому, но дхцп сервер не отвечает на такие попытки.

Share this post


Link to post
Share on other sites
5 минут назад, fet4 сказал:

accel-ppp вам в помощь

Ага, щаз. Под фрёй оно не живёт.

Share this post


Link to post
Share on other sites

Поверьте это лучшее что я видел для ipoe из open source.

Edited by fet4

Share this post


Link to post
Share on other sites
Только что, fet4 сказал:

Поверьте это лучшее что я видел для ipoe.

Верю, но смена оси не обсуждается, не от меня зависит.

Share this post


Link to post
Share on other sites
2 часа назад, Baneff сказал:

Полностью согласен - херня и так не должно быть. Однако факт налицо:

> sockstat -l
USER     COMMAND    PID     FD PROTO  LOCAL ADDRESS    FOREIGN ADDRESS

dhcpd    dhcpd            60531 8    udp4      *:67                           *:*

А конфиг под него как выглядит?

Раньше опция была dhcpd_ifaces

Share this post


Link to post
Share on other sites
34 минуты назад, l1ght сказал:

А конфиг под него как выглядит?

Раньше опция была dhcpd_ifaces

Опция есть, говорит на каких интерфейсах слушать. Но тулза всё равно садится на *:67 без разговоров и это не отключается. В код лезть как-то лениво, видно придётся таки доставить второй комп, может заодно ещё для чего пригодится. Больше идей пока нет.

Share this post


Link to post
Share on other sites

понизьте версию по, или стороннее установите с нага возьмете

Share this post


Link to post
Share on other sites

Чем плох релей на коммутаторе? В крайнем случае, микротик?

2 поеделки ISC одновременно на одной машине работать не будут.

Share this post


Link to post
Share on other sites

Если уж очень хочется запустить всё на одной системе, то пользовать релей от ISC на radius или на Perl

Честно говоря, у меня подобная проблема, и я, к сожалению, ещё не решил её оптимальным, кмк, образом.

Share this post


Link to post
Share on other sites
2 часа назад, joker85 сказал:

понизьте версию по, или стороннее установите с нага возьмете

Пробовал 3-ю версию - аналогично, да и безопасность пострадает, там дыры.С нага и прочее стороннее брал и пробовал, но проблема в том, что всё это потустороннее - это всё DHCP сервера, а рабочий DHCP релей с нужным функционалом по сути наличествует только один, вот этот самый ISC DHCP Relay. Это очень странно, но правильно работать с виланами, а не только с МАС-ами клиентов почему-то может только вот эта поделка. Значит, если мы ставим перед собой задачу все это запустить на одно компе, то первая половина задачи не обсуждается - сначала ставим ISC DHCP Relay. На а дальше всё, тупик. Как я уже говорил этот релей хоть и обеспечивает необходимый функционал, но при запуске сразу и без вариантов биндится на *:67, а после этого уже невозможно на этот комп поставить никакой DHCP сервер, поскольку ему тоже нужно биндиться на 67 порт хотя-бы на один IP адрес, но всё уже тупо занято релеем. Попытки привязать DHCP сервер к другому порту и потом мапить/перенаправлять порты к успеху не привели, возможно я что-то не так делал. Вывод я для себя сделал такой - не хочешь использовать релеи на свичах - ставь второйкомп и разноси физически релей и сервер, всё работает без проблем. Не хочешь ставить второй комп - только схема с релеями на свичах и сервером на компе, тоже работает. А вот первоначальная задача - обойтись одним компом без использования релеев свичей похоже решения не имеет, что обидно конечно.

Share this post


Link to post
Share on other sites
1 час назад, andryas сказал:

Чем плох релей на коммутаторе? В крайнем случае, микротик?

2 поеделки ISC одновременно на одной машине работать не будут.

Похоже, что так, тоже пришёл к такому выводу. Хотелось простоты и однообразия, а релеи на свичах как бы лишние сущности если удалось бы запустит требуемую связку. Свичи разные, с разными системами команд, сегодня одни, а завтра другие и всё это напрягает. Кроме того свич с релеем предполагает определённую ценовую категорию, на дешёвые свичи релеи не ставят, нет функционала. Но делать нечего - не получилось по простому - пойдём по сложному пути. Опять же, если у кого и так есть второй комп под контролем и не нужно доставлять ещё один, то всё прекрасно решается без релеев на свичах. И, если уж на то пошло, таки можно и доставить второй комп, может заодно ещё для чего пригодится.

Share this post


Link to post
Share on other sites
1 час назад, andryas сказал:

Если уж очень хочется запустить всё на одной системе, то пользовать релей от ISC на radius или на Perl

Честно говоря, у меня подобная проблема, и я, к сожалению, ещё не решил её оптимальным, кмк, образом.

Увы, связка на одном компе не выходит никак. После установки релея уже ничто в пару к нему не становится ибо 67 порт занят полностью релеем. По крайней мере у меня так. У кого есть в системе второй физический комп, то проблем нет, разносим и работаем. В моём случае там нет второго физического компа, а значит либо доставляем его специально под эту задачу либо используем релеи свичей, ничего другого я не вижу. Как по мне, доставить второй комп проще. Если решите, то, плиз, дайте знать, интересно всё таки.

Share this post


Link to post
Share on other sites

Кстати, попробовал сейчас такую связку: релей на локальном компе, а сервер на виртуальном серваке, арендованом где-то в облаках за 3.5 евры в мес. Работает. Это, конечно, экстрим, на как вариант на крайняк... Между релеем и сервером идёт простой юникастовый обмен по udp с порта 67 на порт 67 и обратно, никакой магии. Попутно выяснилось, что продукты ISC действительно работают с клиентами через BPF на очень глубоком уровне стека, еще перед всякими файерволами и тому подобным. Запретить там что-то или перенаправить куда-то правилами файервола невозможно, обмен происходит ниже. Говорят так исторически сложилось, слишком древний и слмшком многоплатформенный продукт, получилось как смогли. Но вот с нелокальными ресурсами эта байда работает стандартно, потому физическое разнесение и помогает. Где-то так.

Share this post


Link to post
Share on other sites
7 минут назад, Baneff сказал:

Говорят так исторически сложилось, слишком древний и слмшком многоплатформенный продукт, получилось как смогли. Но вот с нелокальными ресурсами эта байда работает стандартно

 

Иначе на BSD системах никак не принять широковещалку, насколько я понимаю предмет.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Karfax
      Собственно вопрос в заголовке. Искал что-то типа dhcp filter, dhcp snooping, Но ничего не нашел.
      Кто-то может что-то подсказать?
    • By holtdoor
      Добрый день.
      Есть пара вопросов по поводу настройки option82.
      Для примера приведу кусок из офф.мануала:
      option domain-name "ourisp"; option domain-name-servers 172.16.0.1; default-lease-time 3600; max-lease-time 43200; authoritative; ddns-update-style none; log-facility local7; one-lease-per-client true; deny duplicates; shared-network ourisp { {SUBNETS} subnet 192.168.94.0 netmask 255.255.255.0 { } subnet 172.32.0.0 netmask 255.255.240.0 { default-lease-time 3600; option domain-name "isp"; option subnet-mask 255.255.240.0; option domain-name-servers 172.32.0.1; option routers 172.32.0.1; pool { range 172.32.0.100 172.32.0.254; {DENYMEMBERS} } log(info, "=="); if exists agent.remote-id { set clip = binary-to-ascii(10,8,".",leased-address); set clremote = binary-to-ascii(16,8,"",option agent.remote-id); set clcircuit = binary-to-ascii(10,8,"",option agent.circuit-id); log( info,concat("*Leased IP: ",clip, " SWITCH: ",clremote," PORT: ",clcircuit ," (with opt82)") ); } else { set clhw = concat ( suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,1,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,2,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,3,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,4,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,5,1))),2), ":", suffix (concat ("0", binary-to-ascii (16, 8, "", substring(hardware,6,1))),2) ); log( info,concat("*Leased IP: ",binary-to-ascii(10,8,".",leased-address), " MAC: ", clhw," (without opt82)") ); } log(info, "=="); } } Собственно правильно ли я понимаю, что новый не прописаный абонент будет по началу получать ip из пула 172.32.0.100 - 172.32.0.254 а после того как он будет прописан уже в самом биллинге и в разделе "Черная маги" > Dhcp option 82 ему будет прописана нужная пара remote-id/circuit-id, он будет получать ip из конкретной абонентской сети из {SUBNETS} ?
      И еще маленький вопрос, для чего определен subnet 192.168.94.0 в этом примере?
      Спасибо.
    • By ilcergio
      Following these steps I was able to configure a mikrotik router on an manageable switch. My question is how can I configure mikrotik to work with ubulling?
       
       
       
       
      https://wiki.mikrotik.com/wiki/Manual:Basic_VLAN_switching
    • By ixdll
      Продам свой HP ProLiant MicroServer G7 N40L.

      Сервер без винчестеров и оперативки (поддерживает до 16 Гб недорогой DDR3 ECC).
      Цена: 2000 грн




    • By Kto To
      Сегодня вечером словил странный глюк на следующей связке.
      FreeBSD 11.2-RELEASE-p9
      MPD version: 5.8
      Клиенты подключаются по PPPOE.
      Онлайна на машине в районе 1600 абонентов
       
      Стали звонить под вечер клиенты с проблемой на неработающий интернет. Причем некоторые.
      Стали разбираться
      В результате выяснился странный глюк
       
      [] show sessions ip 10.10.0.9 ng1865 10.10.0.9 C-1866 7956732-C-1866 vlan60-1137 1137 7956732-vlan60-1137 vova 54:e6:fc:fe:5d:53 ng2233 10.10.0.9 C-2234 7959914-C-2234 vlan60-2290 2290 7959914-vlan60-2290 vova 54:e6:fc:fe:5d:53 ng2151 10.10.0.9 C-2152 7960268-C-2152 vlan60-2298 2298 7960268-vlan60-2298 vova 54:e6:fc:fe:5d:53 ng2112 10.10.0.9 C-2113 7960073-C-2113 vlan60-2299 2299 7960073-vlan60-2299 vova 54:e6:fc:fe:5d:53 [] show sessions ip 10.10.51.184 ng1710 10.10.51.184 C-1711 7933915-C-1711 vlan63-468 468 7933915-vlan63-468 051184 00:30:67:f9:8b:87 ng608 10.10.51.184 C-609 7879576-C-609 vlan63-727 727 7879576-vlan63-727 051184 00:30:67:f9:8b:87 ng883 10.10.51.184 C-884 7933023-C-884 vlan63-1028 1028 7933023-vlan63-1028 051184 00:30:67:f9:8b:87 ng1071 10.10.51.184 C-1072 7932679-C-1072 vlan63-1177 1177 7932679-vlan63-1177 051184 00:30:67:f9:8b:87 ng1643 10.10.51.184 C-1644 7933515-C-1644 vlan63-1714 1714 7933515-vlan63-1714 051184 00:30:67:f9:8b:87 ng1671 10.10.51.184 C-1672 7928866-C-1672 vlan63-1751 1751 7928866-vlan63-1751 051184 00:30:67:f9:8b:87 ng1701 10.10.51.184 C-1702 7931011-C-1702 vlan63-1769 1769 7931011-vlan63-1769 051184 00:30:67:f9:8b:87 ng1709 10.10.51.184 C-1710 7932364-C-1710 vlan63-1777 1777 7932364-vlan63-1777 051184 00:30:67:f9:8b:87 ng2269 10.10.51.184 C-2270 7961076-C-2270 vlan63-2050 2050 7961076-vlan63-2050 051184 00:30:67:f9:8b:87 ng2229 10.10.51.184 C-2230 7960448-C-2230 vlan63-2273 2273 7960448-vlan63-2273 051184 00:30:67:f9:8b:87 ng1425 10.10.51.184 C-1426 7959795-C-1426 vlan63-2280 2280 7959795-vlan63-2280 051184 00:30:67:f9:8b:87 ng2216 10.10.51.184 C-2217 7960721-C-2217 vlan63-2287 2287 7960721-vlan63-2287 051184 00:30:67:f9:8b:87 ng2252 10.10.51.184 C-2253 7960944-C-2253 vlan63-2301 2301 7960944-vlan63-2301 051184 00:30:67:f9:8b:87 ng2236 10.10.51.184 C-2237 7960217-C-2237 vlan63-2302 2302 7960217-vlan63-2302 051184 00:30:67:f9:8b:87 ng2270 10.10.51.184 C-2271 7961240-C-2271 vlan63-2313 2313 7961240-vlan63-2313 051184 00:30:67:f9:8b:87 ng2248 10.10.51.184 C-2249 7960285-C-2249 vlan63-2318 2318 7960285-vlan63-2318 051184 00:30:67:f9:8b:87 ng1899 10.10.51.184 C-1900 7962171-C-1900 vlan63-2347 2347 7962171-vlan63-2347 051184 00:30:67:f9:8b:87 ng2299 10.10.51.184 C-2300 7962389-C-2300 vlan63-2363 2363 7962389-vlan63-2363 051184 00:30:67:f9:8b:87 ng194 10.10.51.184 C-195 7962428-C-195 vlan63-2373 2373 7962428-vlan63-2373 051184 00:30:67:f9:8b:87 ng2260 10.10.51.184 C-2261 7960890-C-2261 vlan63-2378 2378 7960890-vlan63-2378 051184 00:30:67:f9:8b:87 и так далее Почему-то перестали удаляться старые неактивные сессии клиентов. Руками удаляю все сессии - клиент подключается и работает но я так думаю это до следующего реконнекта.
       
      Вот конфиг мпд (может там что-то довписать надо, хотя конфиг переносится от сервака к серваку уже долгие годы)
      pppoe_server: create bundle template C set bundle disable encryption set bundle disable compression set ccp disable mppc set ipcp dns 8.8.8.8 1.1.1.1 set ipcp range a.b.c.d/32 0.0.0.0/0 set iface enable tcpmssfix create link template oe pppoe set link action bundle C set link disable chap pap eap set link enable pap chap set link enable peer-as-calling load radius create link template vlan2 oe set link max-children 1000 set pppoe iface vlan2 set pppoe service "*" set link enable incoming ...... Почему мпд создает ng интерфейс с тем же ип если уже такой существует? Ну и почему не удаляются старые сессии?
       
      Подскажите может сталкивался кто и как побороть.
×