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

filter DHCP BOOTSTRAP

 Добрый день! Имеется сервер DHCP  на Centos 6.6

 в процессе эксплуатации возникли проблемы с сервером (перестает выдавать IP)

Произведен анализ ситуации было установлено что на сервер идет куча паразитного трафика с запросами на получение Ip. Но сервер им их не дает так как  в    dhcp.conf  указан class  по выдаче IP  только указанным Mac-address-ам

  Проанализировав трафик  с помощью  wireshark  было выявлено что DHCP/bootstrap идет  от source mac-address  роутера (куда подключен клиент) до destination   mac address роутера   куда подключен  DHCP  сервер. Так как пакеты DHCP  ходят по relay

  Атрибут клиентского mac-address-a передается как option 60 (client mac-address) ( это видно при разборке пакетов на уровня 5)

Поэтому отфильтровать паразитным трафик  на коммутаторах сети и маршрутизаторах сети  не возможно так как они фильтруют и разбирают пакет только на L2 и L3  уровнях соответственно. т.е. коммутатор видит только source и destination   mac роутера и не может  блокировать пакеты мусорного трафика, для него все пакеты будут идти с одинаковым mac-address

 возможно ли как то на транзите поставить linux  сервер и отфильтровать мусор  путем разбора пакетов и форвордить только нужные?

если да то каким способом писать фильтр? iptables or eatables?

 

Share this post


Link to post
Share on other sites

На коммутаторах фильтровать можно, ACL как правило пофик, оно матчит по оффсетам.

Я не понял:

- по какому признаку ты хочешь фильтровать?

- почему дхцп сервер помирает, ему ресурсов на ответы не хватает?

Share this post


Link to post
Share on other sites

ACL не может отфильтровать тем более на коммутаторах. Коммутаторы изучают L2 уровень он видит только source и  destination   mac-address. А данные параметры у всех пакетов одинаковые  как у мусора так и у полезных пакетов. работает все  по следующей схеме

 

[DHCP Server]- switch-router1 --==-- сеть--==-  router2- switch- клиент 

 

  на роутере настроен DHCP  relay, так как сеть не плоская, а маршрутизация.   когда настроен relay,  то пакеты которые приходят в сервер DHCP, будут выглядеть как (Sourse mc-address router2)   destination mac-address router1 для всех пакетов, что правильных что не правильных  и поэтому на коммутаторе ты не зафильтруешь.   атрибуты фильтра  (mac-address) одинаковые  для всех. все пакеты пришли с одного и того же роутера

среди этих пакетов есть правильные  (  от клиентов с определенным набором mac-address)  на сервере написал  class  чтобы  раздавать  ip  только нужным клиентам. Но пакеты то, все равно все доходят до сервера и долбят его.  Файл  лога более 4G  /var/log/ messedge за сутки.

 Отфильтровывать нужно разбирая пакет до 5 уровня а не до 2 и 3 как коммутатор и маршрутизатор.  хотел поставить другой сервер перед DHCP   в  bridge и написать какие нибудь фильтры если можно?  суть вопроса именно в этом

 фильтровать нужно по class 60  а именно чтобы программное обеспечение могло разобрать пакет посмотреть поле client mac  и если оно не совпадает просто drop packet 

 

почему помирает DHCP  сказать не могу  предположение - паразитный трафик. серверное железо HP 385G7  полноценный.

 

 

 

 

Share this post


Link to post
Share on other sites

Хотелка "странная", насколько я понял, ты хочешь прикрутить костыль который будет фильтровать по опции все маки, кроме тех, которые должен обслужить дхцп сервер?

Так лучше сразу дхцп сервер полечить, хотя бы тюнингом.

Потом, мой перловый дхцп сервер легко держал 1к запросов/сек, можно и больше, всё зависит от проца и откуда брать лизы.

 

Чтобы сервер не долбили - можно выдать всем адреса из ненужного диапазона с безвредными для твоей сети настройками, клиенты хотя бы заткнутся и поток трафика к дхцп серверу многократно уменьшится.

Share this post


Link to post
Share on other sites

 а что за perl  DHСP  сервер? как его инсталить и чем он лучше?

Share this post


Link to post
Share on other sites

Речь про самописный сервер Ивана)

У нам тут вообще выступление в клуб начинается с написания своего dhcp, я на сях писал....

Share this post


Link to post
Share on other sites

 где можно качнуть как инсталить? есть инфа

Share this post


Link to post
Share on other sites

А почему бы дхцп не унести на роутер2?

 

или через gre какой-нибудь запустить?

Share this post


Link to post
Share on other sites

А почему бы не разбирать поток на этом же сервере? зачем делать отдельный, если тоже самое можно сделать на этом ;)

Share this post


Link to post
Share on other sites

 если делать на этом то каким способом? eatables  или каким софтом

Share this post


Link to post
Share on other sites

 а что если я не хочу использовать в perl DHCP  базу данных.  Можно просто  конфигурированиям подкинуть?

Share this post


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

 а что если я не хочу использовать в perl DHCP  базу данных.  Можно просто  конфигурированиям подкинуть?

Можно.

Просто реализуешь нужную логику и всё.

Share this post


Link to post
Share on other sites

у кого нибудь есть пример с конфигами посмотреть  так как с PERL  я не силен

Share this post


Link to post
Share on other sites

Так и я не силён, до сих пор этот сервер единственное что я написал на перле :)

Думаю что нужно переписать начиная с sub db_get_requested_data()

#my $dbh = $_[0]; - можно заюзать как массив где у тебя будет хранится то что прочитано из конфига с лизами/маками. Соответственно там на старте вместо коннекта к бд нужно читать в этот массив из файла.

Share this post


Link to post
Share on other sites

есть следующий конфиг

 

#
subnet 10.244.1.0 netmask 255.255.255.0 {
option routers 10.244.1.1;
option ntp-servers 172.16.200.100;
pool
{
range 10.244.1.2 10.244.1.254;
allow members of "allow";
}
}
#
subnet 10.244.2.0 netmask 255.255.255.0 {
option routers 10.244.2.1;
option ntp-servers 172.16.200.100;
pool
{
range 10.244.2.2 10.244.2.254;
allow members of "allow";
}
}

.......

таких блокох больше 250 шт

 

class "allow"
{
match if (binary-to-ascii (16,8,":",substring(hardware, 0, 4)) = "1:0:26:aa")
or (binary-to-ascii (16,8,":",substring(hardware, 0, 4)) = "1:0:16:e8")
or (binary-to-ascii (16,8,":",substring(hardware, 0, 4)) = "1:0:2:2")
or (binary-to-ascii (16,8,":",substring(hardware, 0, 4)) = "1:14:c0:89")
or (binary-to-ascii (16,8,":",substring(hardware, 0, 4)) = "1:ac:db:da");
}

 

как прописать чтобы всем другим (которые не попали в class) раздавались другие IP ?  Например один большой SCOPE

можно ли его написать как class ?

class "ALL"
{
randge 10.245.0.0 10.245.255.254
}

 

Share this post


Link to post
Share on other sites

Имхо, ограничение доступа только на основе DHCP - плохое решение. Как дополнительная мера - да, но не основная

Share this post


Link to post
Share on other sites

все таки как раздать  всем оатсльным другие адреса?

Share this post


Link to post
Share on other sites

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

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