Инструменты пользователя

Инструменты сайта


dhcp

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

dhcp [2020/06/13 13:45] (текущий)
Строка 1: Строка 1:
 +====== DHCP ======
  
 +~~Title: Настройка DHCP сервера Linux, FreeBSD ~~
 +{{htmlmetatags>
 +metatag-keywords=(dhcp в linux, сервер ISC)
 +metatag-description=(Настройка сервера DHCP ISC на FreeBSD, Debian. Возможности сервера DHCP, в каких случаях применять. Анализ DHCP пакетов.)
 +}}
 +
 +
 +  * [[Контроль доступа к серверу по MAC‐адресам]]
 +  * [[dhcpdump]] - [[сниффер]] утилита для анализа DHCP пакетов
 +DHCP (Dynamic Host Configuration Protocol - протокол динамической конфигурации узла) — это сетевой протокол, позволяющий компьютерам автоматически получать IP- адрес и другие параметры, необходимые для работы в сети TCP/IP. Данный протокол работает по модели «клиент-сервер». Для автоматической конфигурации компьютер-клиент на этапе конфигурации сетевого устройства обращается к серверу DHCP, и получает от него нужные параметры. Сетевой администратор может задать диапазон адресов, распределяемых сервером среди компьютеров. Это позволяет избежать ручной настройки компьютеров сети и уменьшает количество ошибок.
 +
 +{{ ::dhcp-soobshheniya.jpg?nolink |}}
 +
 +Протокол DHCP является клиент-серверным, то есть в его работе участвуют клиент DHCP и сервер DHCP. Передача данных производится при помощи протокола [[UDP]], при этом сервер принимает сообщения от клиентов на порт 67 и отправляет сообщения клиентам на порт 68.
 +
 +  * **Прохождение DHCP запросов через iptables**. Правила для [[iptables]]:<file>
 +$IPT -A INPUT -i $LAN195 -p udp -m multiport --port 67:68 -j ACCEPT
 +$IPT -A INPUT -p udp -m multiport --port 67:68 -j DROP
 +</file>
 +===== Возможности сервера DHCP =====
 +Но самый главный плюс DHCP вовсе не в том, что с его помощью можно автоматически раздавать IP-адреса. На этом функционал протокола не заканчивается. Основная его ценность в другом: с его помощью вы можете назначать хостам и другие, не менее важные настройки. Например:
 +
 +    * Шлюзы по умолчанию. Если в вашей сети имеется несколько Интернет-каналов (для обеспечения бесперебойной работы), вы можете назначить хостам несколько шлюзов и порядок их предпочтения. В случае выхода одного из каналов из строя, переключение на резервный канал произойдет автоматически, без вашего вмешательства. Это же дает возможность организовать простейшую балансировку нагрузки между каналами, назначив по DHCP одной группе хостов один маршрутизатор в качестве шлюза, а другой группе – второй.
 +    * Статические маршруты. Если в вашей сети есть несколько подсетей, соединенных маршрутизаторами, то при помощи DHCP можно автоматически оповещать хосты о наличии маршрутов в другие подсети. Причем это, по желанию, можно сделать только для избранных – например, используя привязку к MAC. Эта же опция полезна при организации [[VPN]]-доступа к корпоративной сети – VPN-клиентам можно сообщить маршруты лишь к нужным им подсетям, оставив другие подсети недоступными для подключающихся по VPN пользователей.
 +    * Смещение времени. Если ваши пользователи часто бывают в различных временных поясах (например, мотаются из Питера во Владивосток и обратно), то можно заставить системные часы их ноутбука адаптироваться к вашему местному времени при помощи DHCP.
 +    * Сервер синхронизации времени. Поскольку часы компьютеров славятся своей неточностью, их желательно синхронизировать с какими-то эталонными часами. Для этого используется служба NTP. Информацию о сервере [[NTP]] можно раздавать хостам при помощи DHCP.
 +    * [[DNS]]-серверы. С помощью этой опции вы можете назначать вашим клиентам DNS-серверы как внутри сети, так и за ее пределами. Причем, в отличие ручной настройки интерфейса, вы можете передать хосту обширный список доступных DNS-серверов.
 +    * Настройки сервера загрузки – настройки протокола TFTP/BOOTP, необходимые для бездисковой загрузки хостов. Эта возможность востребована при наличии в сети бездисковых терминалов, загружающихся по сети, и при организации дистанционной автоматической установки ОС на компьютеры пользователей (об этом поговорим отдельно)
 +    * Списки доступных [[SMTP]] и POP серверов.
 +    * Настройки [[WINS]] и Netbios
 +    * Размер [[MTU]], время жизни кэша [[ARP]], размер [[TTL]] и др.
 +
 +Если у вас сеть разбита на несколько подсетей, разделенных маршрутизаторами, то одним DHCP-сервером вам ограничиться не получится. DHCP-запросы и ответы не маршрутизируются между подсетями и распространяются в пределах лишь одного сегмента. Это связано в первую очередь с тем, что протокол DHCP не использует для передачи данных IP- адресацию, а работают на более низком уровне. Следовательно, в каждом из сегментов сети, имеющем свой диапазон IP-адресов вам потребуется отдельная DHCP- служба.
 +
 +Когда клиент загружается, начальные параметры определяются в соответствующем клиенту объявлении host, затем проверяется секция group (если она существует) которая содержит в себе host, далее проверяется секция subnet соответствующая подсети в которой находится клиент, после этого проверяется указаны ли какие-нибудь параметры в секции shared-network(если есть), содержащей нашу подсеть, ну и наконец проверяются глобальные параметры, которые могут быть указаны перед всеми объявлениями. 
 +
 +Когда dhcpd ищет секцию host для соответствующего клиента, он следует следующим правилам: сперва ищется объявление host где указан параметр fixed-address и секция subnet или shared network совпадает с подсетью в которой находится клиент. Если нет соответствующих записей, dhcpd ищет объявление host без параметра fixed-address. Если подходящих записей не найдено, то dhcpd считает что нет записей для этого клиента, даже если они есть для этого клиента в другой подсети.
 +
 +===== Установка и настройка сервера DHCP на FreeBSD =====
 +Homepage:[[http://www.isc.org/products/DHCP/|WWW: isc-dhcp-server]]
 +
 +Дополнительная информация в man
 +<code>
 +> man dhcp-options
 +# описаны выражения допустимые в конфигурационном файле
 +> man dhcp-eval</code>
 +<code>
 +> uname -a
 +FreeBSD ns.com.ua 7.2-RELEASE-p2 FreeBSD 7.2-RELEASE-p2 #0: Wed Jun 24 00:57:44 UTC 2009
 +root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  i386
 +</code>
 +<code>
 +> cd /usr/ports/net/isc-dhcp31-server
 +> make install clean
 +> cp /usr/local/etc/dhcpd.conf.sample /usr/local/etc/dhcpd.conf
 +</code>
 +<code>
 +> ee dhcpd.conf
 +# dhcpd.conf
 +#
 +# Sample configuration file for ISC dhcpd
 +#
 +
 +# Общие опции для всех поддерживаемых сетей...
 +option domain-name "example.org"; # домен по умолчанию
 +</code># (см. [[Список бесплатных публичных DNS серверов]])
 +<code>
 +option domain-name-servers 4.2.2.2, 208.67.222.222; #сервера DNS
 +
 +default-lease-time 1200; # время аренды (по умолчанию 600)
 +max-lease-time 7200; # максимальное время аренды
 +
 +# Use this to enble / disable dynamic dns updates globally.
 +#ddns-update-style none;
 +</code># Параметр [[authoritative]]
 +<code>
 +# Является ли сервер авторитативным - ответственным DHCP сервером.
 +authoritative;
 +
 +# ad-hoc DNS update scheme - set to "none" to disable dynamic DNS updates.
 +# Способ динамического обновления DNS. Выключаем если используется статический DNS - в большинстве
 +# сетей так и есть. Иначе нужно конфигурировать сервер DNS (например bind)
 +ddns-update-style none;
 +</code>
 +Для работы параметра log-facility нужно настроить syslog.conf и ротацию лога в newsyslog.conf.
 +<code>
 +# Источник сообщений для записи логов через syslogd
 +log-facility local7;
 +
 +# No service will be given on this subnet, but declaring it helps the
 +# DHCP server to understand the network topology.
 +
 +subnet 10.152.187.0 netmask 255.255.255.0 {
 +}
 +
 +# This is a very basic subnet declaration.
 +
 +subnet 10.26.95.0 netmask 255.255.255.0 { # подсеть из которой будут выдаваться адреса
 +  range 10.26.95.1 10.26.95.240; # интервалы ip адресов на выдачу клиентам
 +  option domain-name-servers 10.26.95.253;
 +  option routers 10.26.95.253; # gateway (шлюз по умолчанию) для клиента
 +#option netbios-name-servers 192.168.1.51; # адрес сервера WINS (если есть)
 +#option domain-name-servers 192.168.1.51; # адрес DNS сервера AD
 +#option domain-name "office.mydomen.ru"; # полное имя домена AD
 +}
 +
 +# Fixed IP addresses can also be specified for hosts.   These addresses
 +# should not also be listed as being available for dynamic assignment.
 +# Hosts for which fixed IP addresses have been specified can boot using
 +# BOOTP or DHCP.   Hosts for which no fixed address is specified can only
 +# be booted with DHCP, unless there is an address range on the subnet
 +# to which a BOOTP client is connected which has the dynamic-bootp flag
 +# set.
 +
 +#привязка постоянных IP к MAC адресу сетевой карты хоста
 +host darkfire {
 +  hardware ethernet 00:15:f2:4b:ad:5c; # MAC адрес сетевой карты хоста
 +  fixed-address 10.26.95.251;# ip адрес, который нужно присвоить этому хосту
 +}
 +
 +host user1 {
 +  hardware ethernet 00:00:1c:d3:9e:40;
 +  fixed-address 10.26.95.10;
 +}
 +
 +host user2 {
 +  hardware ethernet 00:14:2a:1c:16:31;
 +  fixed-address 10.26.95.11;
 +}
 +
 +</code>
 +Прописываем в rc.conf строки
 +<code>
 +dhcpd_enable="YES"
 +dhcpd_flags="-q" # отключаем вывод копирайта и прочего при старте dhcpd
 +dhcpd_ifaces="rl0 vr0" # сетевой интерфейс на котором будет работать dhcpd. Несколько интерфейсов указываются через пробел.
 +</code>Запускаем и пользуемся
 +  > /usr/local/etc/rc.d/isc-dhcpd start
 +
 +==== Файлы ====
 +  * /usr/local/sbin/dhcpd
 +dhcpd скомпонован статически и расположен в каталоге /usr/local/sbin. Страницы справочной системы dhcpd(8), устанавливаемые портом, содержат более полную информацию о dhcpd.
 +    * /usr/local/etc/dhcpd.conf
 +dhcpd требует наличия конфигурационного файла, /usr/local/etc/dhcpd.conf, до того, как он будет запущен и начнёт предоставлять сервис клиентам. Необходимо, чтобы этот файл содержал все данные, которая будет выдаваться обслуживаемым клиентам, а также информацию о работе сервера. Этот конфигурационный файл описывается на страницах справочной системы dhcpd.conf(5), которые устанавливаются портом.
 +    * **/var/db/dhcpd.leases** или **/var/db/dhcpd/dhcpd.leases**
 +Сервер DHCP ведёт базу данных выданной информации в этом файле, который записывается в виде протокола. Страницы справочной системы dhcpd.leases(5), устанавливаемые портом, дают гораздо более подробное описание. В dhcpd.leases заносится информация только динамически выданных IP адресах, если IP статистический (привязан к МАС) - такая информация в dhcpd.leases заноситься не будет. Полный сбор статистики можно осуществлять через dhcpd-snmp: http://www.net-track.ch/opensource/dhcpd-snmp/
 +    * /usr/local/sbin/dhcrelay
 +dhcrelay используется в сложных ситуациях, когда сервер DHCP пересылает запросы от клиента другому серверу DHCP в отдельной сети. Если вам нужна такая функциональность, то установите порт net/isc-dhcp3-server. На страницах справочной системы dhcrelay(8), которые устанавливаются портом, даётся более полное описание.
 +
 +===== ALLOW and DENY =====
 +Параметры allow и deny используются для контроля над поведением демона dhcp в отношении различных видов запросов.
 +
 +  * Ключевое слово **unknown-clients**<code>
 +  allow unknown-clients;
 +  deny unknown-clients;</code>
 +
 +Параметр unknown-clients используется что бы сообщить серверу как поступать с неизвестными клиентами. По умолчанию выдача адресов неизвестным клиентам разрешена.
 +
 +  * Ключевое слово bootp<code>
 +  allow bootp;
 +  deny bootp;</code>
 +
 +Параметр bootp сообщает серверу dhcp обрабатывать или нет bootp-запросы. По умолчанию bootp-запросы разрешены.
 +
 +  * Ключевое слово booting<code>
 + allow booting;
 + deny booting;</code>
 +
 +Параметр booting сообщает серверу обрабатывать ли запрос конкретного клиента. Имеет смысл только если присутствует в описании host и действует только на соответствующий хост. По умолчанию разрешено, в противном случае хост не сможет получать свой адрес и другие параметры. 
 +===== Настройка DHCP -клиента встроенного в OС FreeBSD =====
 +
 +Ручной запуск (в примере ниже - вывод команды говорит о неудачном запуске DHCP -клиента):
 +<code>
 +# dhclient rl0
 +DHCPDISCOVER on rl0 to 255.255.255.255 port 67 interval 7
 +DHCPDISCOVER on rl0 to 255.255.255.255 port 67 interval 11
 +DHCPDISCOVER on rl0 to 255.255.255.255 port 67 interval 12
 +DHCPDISCOVER on rl0 to 255.255.255.255 port 67 interval 9
 +DHCPDISCOVER on rl0 to 255.255.255.255 port 67 interval 10
 +DHCPDISCOVER on rl0 to 255.255.255.255 port 67 interval 12
 +No DHCPOFFERS received.
 +No working leases in persistent database - sleeping.
 +</code>
 +
 +==== Настраиваем dhclient.conf ====
 +
 +По умолчанию dhclient.conf в FreeBSD пустой (в нем ссылка только на **man 5 dhclient.conf**). В обычном случае и при таком конфиге все работает. Но если возникают стоит изменить настройки по умолчанию.
 +
 +Читаем man, копируем приведенный пример в наш dhclient.conf
 +<code>
 +# cp /etc/dhclient.conf /etc/dhclient.conf.orig
 +# man 5 dhclient.conf
 +...
 +DHCLIENT.CONF(5)          FreeBSD File Formats Manual         DHCLIENT.CONF(5)
 +
 +NAME
 +     dhclient.conf -- DHCP client configuration file
 +
 +DESCRIPTION
 +     The dhclient.conf file contains configuration information for
 +     dhclient(8), the Internet Software Consortium DHCP Client.
 +...
 +EXAMPLES
 +     The following configuration file is used on a laptop which has an IP
 +     alias of 192.5.5.213, and has one interface, ep0 (a 3Com 3C589C).  Boot-
 +     ing intervals have been shortened somewhat from the default, because the
 +     client is known to spend most of its time on networks with little DHCP
 +     activity.  The laptop does roam to multiple networks.
 +
 +           timeout 60;
 +           retry 60;
 +           reboot 10;
 +           select-timeout 5;
 +           initial-interval 2;
 +           reject 192.33.137.209;
 +
 +           interface "ep0" {
 +               send host-name "andare.fugue.com";
 +               send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
 +               send dhcp-lease-time 3600;
 +               supersede domain-name "fugue.com rc.vix.com home.vix.com";
 +               prepend domain-name-servers 127.0.0.1;
 +               request subnet-mask, broadcast-address, time-offset, routers,
 +                       domain-name, domain-name-servers, host-name;
 +               require subnet-mask, domain-name-servers;
 +               script "/etc/dhclient-script";
 +               media "media 10baseT/UTP", "media 10base2/BNC";
 +           }
 +
 +           alias {
 +             interface "ep0";
 +             fixed-address 192.5.5.213;
 +             option subnet-mask 255.255.255.255;
 +           }
 +
 +     This is a very complicated dhclient.conf file - in general, yours should
 +     be much simpler.  In many cases, it is sufficient to just create an empty
 +     dhclient.conf file - the defaults are usually fine.
 +
 +SEE ALSO
 +     dhclient.leases(5), dhcpd.conf(5), dhcp-options(5), dhclient(8), dhcpd(8)
 +...
 +</code>
 +Используем [[tcpdump]] для проверки DHCP (порты 67, 68). 
 +
 +Передача данных производится при помощи протокола UDP, при этом сервер принимает сообщения от клиентов на порт 67 и отправляет сообщения клиентам на порт 68. 
 +   # tcpdump -i rl0 -n
 +
 +<file>
 +> ee /etc/dhclient.conf
 +
 +</file>
 +
 +===== Error dhcpd: Interface vr0 matches multiple shared networks =====
 +
 +Ошибка возникает если на одном интерфейсе (в данном случае vr0) прописаны алиасами несколько сетей. Для устранения ошибки нужно указать опцию shared-network {}, например так <code>
 +.... 
 +shared-network sharedname { 
 +subnet 192.168.175.32 netmask 255.255.255.248 { 
 +  range 192.168.175.33 192.168.175.38; 
 +  option routers 192.168.175.33; 
 +
 +subnet 192.168.175.48 netmask 255.255.255.240 { 
 +  range 192.168.175.50 192.168.175.62; 
 +  option routers 192.168.175.49; 
 +
 +}
 +</code>
 +
 +===== Установка сервера DHCP на Debian =====
 +
 +
 +Окружение: Debian GNU/Linux wheezy/sid. isc-dhcp-server Версия: 4.1.1-P1-17
 +<file>
 +# aptitude install isc-dhcp-server
 +</file>Этот сервер может работать с несколькими сетевыми интерфейсами одновременно.
 +Укажем явно сетевой интерфейс на котором будет слушать DHCP сервер, в этом случае для eth0:0, который является алиасом на eth0.
 +<file>
 +# nano /etc/default/isc-dhcp-server
 +...
 +# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
 +#       Separate multiple interfaces with spaces, e.g. "eth0 eth1".
 +INTERFACES="eth0:0"
 +</file>
 +==== Syslog в Debian для логов dhcpd ====
 +
 +По умолчанию демон [[DHCP]] пишет логи в /var/log/messages и на /dev/console. Нужно вынести логи в отдельный файл и заблокировать вывод логов в messages.
 +<file>
 +# nano /etc/dhcp/dhcpd.conf
 +log-facility local7;
 +</file>
 +<file>
 +# touch /var/log/dhcpd.log
 +</file>
 +В конец файла r[[syslog.conf]] добавим строку
 +<file>
 +# nano /etc/rsyslog.conf
 +...
 +!dhcpd
 +*.*     -/var/log/dhcpd.log
 +</file>
 +Для блокировки в messages и на console добавим local7.none
 +<file>
 +...
 +*.=info;*.=notice;*.=warn;\
 +        auth,authpriv.none;\
 +        cron,daemon.none;\
 +        mail,news.none;local7.none      -/var/log/messages
 +...
 +daemon.*;mail.*;\
 +        news.err;\
 +        *.=debug;*.=info;\
 +        *.=notice;*.=warn;local7.none   |/dev/xconsole
 +</file>
 +
 +====== Параметр authoritative DHCP ======
 +
 +Параметр authoritative DHCP-сервера позволяет объявить сервер авторитативным (ответственным) в обслуживаемой сети. Отличие авторитативного сервера от «обычного» заключается в том, что последний игнорирует любые запросы адресов, которые не описаны в его конфигурации, в то время как авторитативный сервер в ответ на такие запросы отсылает DHCPNAK. Благодаря такому поведению клиент, перемещённый из другой подсети, сможет бы стрее получить новый адрес (в ответ на DHCPREQUEST с адресом из прежней подсети он сразу получит DHCPNAK и приступит к получению нового адреса; в противном случае DHCPDISCOVER будет отправлен лишь по истечении тайм-аута на ожидание ответа). В то же время «случайные» DHCP-серверы (например, их тыкают сейчас везде где угодно) с меньшей вероятностью смогут помешать работе сети, поскольку, будучи неавторитативными, будут просто игнорировать «чужие» запросы DHCPREQUEST.
 +
 +
 +===== Ссылки  =====
 +
 +  * [[http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/network-dhcp.html|Руководство FreeBSD: Автоматическая настройка сети (DHCP)]]
 +  * [[http://www.opennet.ru/man.shtml?topic=dhcpd.conf&category=5&russian=0|dhcpd.conf - файл конфигурации демона dhcpd]]
 +  * [[http://www.opennet.ru/man.shtml?topic=dhcpd&category=8&russian=0|dhcpd (8) (Русские man: Команды системного администрирования)]]
 +  * [[http://xgu.ru/wiki/%D0%9E%D0%BF%D1%86%D0%B8%D1%8F_82_DHCP|Опция 82 DHCP]]
 +  * {{::dhcp.part1.zip|DHCP Урок1. Примеры cap.}}: Описание протокола DHCP на реальных примерах.
 +  * {{::dhcp.part2.zip|DHCP Урок2. Примеры cap.}}: Заголовки пакетов DHCP.
dhcp.txt · Последнее изменение: 2020/06/13 13:45 (внешнее изменение)