dhclient unicast DHCPREQUEST зайві журнали


4

Я використовую centos 7 з dhclient 4.2.5:

$ uname -a
Linux hostname 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

$ dhclient -V
Internet Systems Consortium DHCP Client 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.

Нещодавно я помітив, що журнали містять багато таких записів:

Dec 14 10:12:32 hostname dhclient[4186]: DHCPREQUEST on enp5s0f0 to 10.23.0.4 port 67 (xid=0xe1a88f7)
Dec 14 10:12:49 hostname dhclient[4186]: DHCPREQUEST on enp5s0f0 to 10.23.0.4 port 67 (xid=0xe1a88f7)
Dec 14 10:13:09 hostname dhclient[4186]: DHCPREQUEST on enp5s0f0 to 10.23.0.4 port 67 (xid=0xe1a88f7)
Dec 14 10:13:23 hostname dhclient[4186]: DHCPREQUEST on enp5s0f0 to 10.23.0.4 port 67 (xid=0xe1a88f7)
Dec 14 10:13:41 hostname dhclient[4186]: DHCPREQUEST on enp5s0f0 to 10.23.0.4 port 67 (xid=0xe1a88f7)

Здається, це пов’язано з сервером DHCP, який ігнорує одноадресні запити. Є й інші люди з такою проблемою: https://forum.pfsense.org/index.php?topic=51701.0

Я намагався змінити ip призначення пакета на 255.255.255.255 за допомогою iptables:

sudo iptables -t nat -I OUTPUT 1 -d 10.23.0.4 -p udp --dport 67 -j DNAT --to-destination 255.255.255.255

Але чомусь правило - це не узгодження пакетів з dhclient. Однак це відповідні пакети від nc:echo 123 | nc -u 10.23.0.4 67

Я знайшов це посилання, де сказано, що dhclient працює по-іншому, який не обробляється iptables:

For most operations, DHCP software interfaces to the Linux IP stack at
a level below Netfilter. Hence, Netfilter (and therefore Shorewall)
cannot be used effectively to police DHCP. The “dhcp� interface option
described in this article allows for Netfilter to stay out of DHCP's
way for those operations that can be controlled by Netfilter and
prevents unwanted logging of DHCP-related traffic by
Shorewall-generated Netfilter logging rules.

Тож у мене є кілька питань:

  • чи правильно, що dhclient використовує API нижчого рівня, який не обробляється iptables?
  • чи є якийсь спосіб зменшити кількість журналів з dhclient для невідповіданих одноадресних запитів?

Відповіді:


4
  • чи правильно, що dhclient використовує API нижчого рівня, який не обробляється iptables?

Коротка версія: так, для деяких серверів DHCP (isc-dhcp та ранні версії dnsmasq), ні для деяких інших серверів (пізніші версії dnsmasq).

Більш дрібна версія: походження речовини - це raw socket. Сокети , згідно Вікіпедії,

... Інтернет-розетка, яка дозволяє безпосередньо надсилати та приймати пакети Інтернет-протоколів без форматування транспортного шару.

На цій сторінці ISC Wiki (консорціум Internet Systems є автором найпоширенішої програми DHCP) зазначено:

Протокол DHCP має деякі специфічні вимоги до справжньої роботи - зокрема, можливість передавати та приймати пакети, що надсилаються на всі обмежені широкомовні адреси (255.255.255.255), і можливість відправляти одноадресну передачу без ARP. Це неможливо зробити через сокети BSD / UDP, хоча dhcpd також відкриває BSD / UDP-сокет (званий "запасний інтерфейс"), який ви побачите в netstat.

Це цікаво, тому що це пояснює, чому ви часто знаходите за допомогою Googling людей, які намагаються контролювати запити DHCP iptablesчерез порти 67 та 68 UDP. Звичайно, це не те, що ці порти не відкриваються, це лише те, що це не єдиний канал, через який відбувається зв’язок між сервером та клієнтом.

Однак це не може бути успішним: деякі хлопці до кінця вимкнули свою машину повністю (iptables скидає все!), Але вони не змогли закрити себе до DHCP через необроблені пакети).

Іншим цікавим експериментом є використання ще раз iptablesвідключити ПК, а потім використовувати необроблений сокет для DNS або для TCP-з'єднання: незважаючи на iptables, ці спроби спілкування успішні.

Дуже авторитетний коментар щодо цього можна знайти на сайті Netfilter , де зазначено:

Сирі розетки обходять стек TCP / IP. Гачки Netfilter, а отже, iptables, сидять всередині IP-стеку.

І те ж саме стосується і пакетного сніферу.

Тут вони також пояснюють, як обійти проблему: обережно, це жарт, констатує Шааф

Це не проект на вихідні.

Нарешті, я також хотів би зазначити, що для dnsmasq ситуація відрізняється : на сторінці Debian Wiki , автор dnsmasq Саймон Келлі заявляє:

Dnsmasq відкриває необроблений сокет, але він ніколи не читає дані з сокета: замість цього він використовується для розмови з клієнтами DHCP, які ще не повністю налаштовані і не можуть робити ARP. Це не проблема безпеки. Пізніші версії dnsmasq використовують іншу техніку і більше не мають відкритої розетки.

Редагувати :

чи є якийсь спосіб зменшити кількість журналів з dhclient для невідповіданих одноадресних запитів?

Це не тривіально, оскільки опція CLI зменшити вихід з dhclient, -q , може бути викликаний з командного рядка, але не з dhclient.conf . Крім того, dhclientвикликається безпосередньо не вашим Менеджером мережі в цілому, а виконавчим файлом ifup:

# strings `(which ifup)` | grep dhclient
/sbin/dhclient
/sbin/dhclient3
dhclient -v -r -pf /run/dhclient.%iface%.pid -lf    /var/lib/dhcp/dhclient.%iface%.leases %iface%
dhclient3 -r -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp3/dhclient.%iface%.leases %iface%
dhclient -1 -v -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp/dhclient.%iface%.leases %iface%  [[-e IF_METRIC=%metric%]]
dhclient3 -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp3/dhclient.%iface%.leases %iface%      [[-e IF_METRIC=%metric%]]
dhclient -6 -r -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases %iface%
dhclient -1 -6 -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases %iface%
dhclient -1 -6 -S -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases %iface%

Як бачите, ifupвиклик за dhclientдопомогою параметра -v(= багатослівний!), Протилежний бажаному.

Які ваші варіанти ?.

  • Завантажте вихідний код, змініть виклик вище та перекомпілюйте його для свого ядра. Це повинен бути синч.

  • Ви можете використовувати двійковий редактор для перетворення -vв -q.

  • Ви можете змінити сценарій файл, /etc/init.d/networkingшляхом заміни виклику ifupз

    ifup .... > /dev/null 2>&1
    

    Перезавантаження або перезапуск networkingпослуги завершить цю модифікацію. Це менш ніж ідеально, оскільки він викидає у сміття як марні попередження, так і серйозні повідомлення про помилки.

  • Нарешті, ви можете здійснити наступний хак: перейдіть /sbin/dhclientдо /sbin/dhclient-true, а потім створити виконуваний файл, названий /sbin/dhclientіз таким вмістом:

     #!/bin/bash
     ARGS=$(echo "$@" | sed 's/ -v / /g')
     exec /sbin/dhclient-true "-q" "$ARGS"
    

додана інформація про версію, це centos 7 з dhclient 4.2.5
misha nesterenko

О, це Windows Server 2012, але я, на жаль, не маю доступу до його налаштування
misha nesterenko

0

DHCP - це те, як клієнт отримує IP в першу чергу, так що, якщо він використовує IP, це буде курка і яйце. Таким чином, він працює на рівні нижче L2, використовуючи MAC-адреси. Таким чином IP-маршрутизація не звертає уваги на своє існування.

На даний момент я не використовую PFSense, тому я не можу конкретно вказати на ваш, але має бути налаштування багатослівності журналу, якщо ви встановите його нижче, ви повинні бачити лише попередження.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.