Перейти к содержимому
Калькуляторы

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?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Я не понял:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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  полноценный.

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

55 минут назад, foxroot сказал:

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

Можно.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

#
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
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.