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

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


dhcp

Различия

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

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

dhcp [2018/12/24 14:32] (текущий)
Строка 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 =====
 +
 +Homepage: [[https://​www.isc.org/​wp-content/​uploads/​2014/​08/​DHCP-4.3.1-Distribution-Documentation-Aug-4-14.pdf|ISC DHCP Server]]
 +
 +Окружение:​ 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 · Последние изменения: 2018/12/24 14:32 (внешнее изменение)