DHCP-сервер в сети: если неохота бегать от компьютера к компьютеру ;)

  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:fd3625dd474639d3638476ad4796354c' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtejustify\">&nbsp;DHCP (англ. Dynamic Host Configuration Protocol &mdash; протокол динамической конфигурации узла) &mdash; это сетевой протокол, позволяющий компьютерам автоматически получать IP-адрес и другие параметры, необходимые для работы в сети TCP/IP. Данный протокол работает по модели &laquo;клиент-сервер&raquo;. Для автоматической конфигурации компьютер-клиент на этапе конфигурации сетевого устройства обращается к т. н. серверу DHCP, и получает от него нужные параметры. Сетевой администратор может задать диапазон адресов, распределяемых сервером среди компьютеров. Это позволяет избежать ручной настройки компьютеров сети и уменьшает количество ошибок.</p>\n<p class=\"rtejustify\">Это вступлении к <a href=\"http://ru.wikipedia.org/wiki/DHCP-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80\">статьи о DHCP в Википедии</a>. Рекомендую прочитать,&nbsp;возможно узнаете что-либо новенькое. Ну а я приступаю к описанию установки и настройки DHCP-сервера.</p>\n<p class=\"rtejustify\">Устанавливать будем из портов (надеюсь они у вас в актуальном состоянии<img alt=\"\" src=\"http://muff.kiev.ua/modules/fckeditor/fckeditor/editor/images/smiley/msn/wink_smile.gif\" />). Перед компиляцией порта сервера DHCP надо убедиться, встроено ли устройство bpf в&nbsp;ядро. Если нет - пересоберите ядро с поддержкой bpf.</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p><strong># cd /usr/ports/net/isc-dhcp31-server&nbsp;&amp;&amp; make install clean</strong></p>\n<p class=\"rtecenter\">&nbsp;</p>\n<p class=\"rtecenter\"><strong>Options for isc-dhcp31-server 3.1.3</strong></p>\n<pre>\n[X] DHCP_PARANOIA add -user, -group and -chroot options\n[X] DHCP_JAIL add -chroot and -jail options\n[ ] DHCP_SOCKETS use sockets instead of /dev/bpf (jail-only)\n[X] OPENSSL_BASE use the base system OpenSSL (required by TLS)\n[ ] OPENSSL_PORT use OpenSSL from ports (required by TLS)</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Опции оставляю по дефолту.</p>\n<p class=\"rtejustify\">По завершению установки порт уведомляет нас о создании пользователя и группы dhcp, а также выводит на экран информацию,&nbsp;которая по мнению разработчиков может пригодится при настройке.</p>\n<p class=\"rtejustify\">После установки есть пример файла конфигурации: /usr/local/etc/dhcpd.conf.sample. Однако мы не ищем легких путей и будем &quot;ваять&quot; свой <img alt=\"\" src=\"http://muff.kiev.ua/modules/fckeditor/fckeditor/editor/images/smiley/msn/wink_smile.gif\" /></p>\n<p class=\"rtejustify\">Создадим конфигурационный файл:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td># <strong>touch /usr/local/etc/dhcpd.conf</strong></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Потом наполняем этот файл необходимыми параметрами, в зависимости от поставленых задач. В моем случае конфигурационный файл получился такой:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p>\n #&nbsp; ***&nbsp;&nbsp; Глобальные параметры&nbsp;&nbsp; ***&nbsp;&nbsp; #</p>\n<p>\n # Какое доменное имя будем присваивать хостам<br />\n <strong>option domain-name &quot;<span style=\"color: #ff0000\">domain.com</span>&quot;;</strong></p>\n<p># Описываем сроки аренды адреса<br />\n <strong>default-lease-time 304400;<br />\n max-lease-time 604800;</strong></p>\n<p># Делаем наш сервер &quot;авторитетным&quot; для обслуживаемых сетей<br />\n <strong>authoritative;</strong></p>\n<p># Указываем, что мы не используем динамически обновляемые ДНС<br />\n <strong>ddns-update-style none;</strong></p>\n<p># Указываем, как поступать серверу с неизвестными клиентами. В моем случае им будет<br />\n # отказано в обслуживании<br />\n <strong>deny unknown-clients;</strong></p>\n<p>\n &nbsp;#&nbsp; ***&nbsp;&nbsp; Описываем подсети&nbsp;&nbsp; ***&nbsp;&nbsp; #</p>\n<p>\n # Задаем подсеть<br />\n <strong>subnet 10.16.32.0 netmask 255.255.255.0 {</strong></p>\n<p># Описываем диапазон, из которого будем выдавать IP<br />\n <strong>range 10.16.32.2 10.16.32.254;</strong></p>\n<p># Указываем ДНС-сервера<br />\n <strong>option domain-name-servers <span style=\"color: #ff0000\">ns1.domain.com</span>, <span style=\"color: #ff0000\">ns2.domain.com</span>;</strong></p>\n<p># Указываем шлюз для сети<br />\n <strong>option routers 10.16.32.1;</strong></p>\n<p><strong>}</strong></p>\n<p># Вторая подсеть. Опции аналогичны первой</p>\n<p><strong>subnet 10.16.33.0 netmask 255.255.255.0 {<br />\n range 10.16.33.2 10.16.33.254;</strong><br />\n <strong>option domain-name-servers <span style=\"color: #ff0000\">ns1.domain.com</span>, <span style=\"color: #ff0000\">ns2.domain.com</span>;<br />\n option routers 10.16.33.1;</strong><br />\n <strong>}</strong></p>\n<p># Описываем отдельные хосты<br />\n <strong>host User32-1 { hardware ethernet 00:0e:2e:a6:9f:ef; fixed-address 10.16.32.2; }<br />\n host User32-2 { hardware ethernet 00:1f:c6:d9:a3:e3; fixed-address 10.16.32.3; }<br />\n host User33-1 { hardware ethernet 00:1f:c6:24:95:9d; fixed-address 10.16.33.2; }</strong></p>\n<p>&nbsp;</p>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Вот такой вот коротенький конфигурационный файл. Тем не менее - конфиг полностью рабочий. Более детально ознакомиться с возможностями можно на <a href=\"http://muff.kiev.ua/node/71\">странице руководства&nbsp;dhcpd.conf</a>.</p>\n<p class=\"rtejustify\">Далее добавляем в rc.conf опции запуска dhcp-сервера. Их целый блок <img alt=\"\" src=\"http://muff.kiev.ua/modules/fckeditor/fckeditor/editor/images/smiley/msn/teeth_smile.gif\" /></p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td><strong># cat /etc/rc.conf | grep dhcp</strong><br />\n dhcpd_enable=&quot;YES&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # dhcpd включен?<br />\n dhcpd_flags=&quot;-q&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# исполняемые опции<br />\n dhcpd_conf=&quot;/usr/local/etc/dhcpd.conf&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;Полный путь к конфигурационному файлу<br />\n dhcpd_ifaces=&quot;vlan32 vlan33&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# На каких интерфейсах &quot;слушать&quot; запросы<br />\n dhcpd_withumask=&quot;022&quot;<br />\n dhcpd_chuser_enable=&quot;YES&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Запуск без привилегий?<br />\n dhcpd_withuser=&quot;dhcpd&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;# От имени какого пользователя стартовать сервер<br />\n dhcpd_withgroup=&quot;dhcpd&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;От имени какой групы стартовать сервер<br />\n dhcpd_chroot_enable=&quot;YES&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Запускать chroot?<br />\n dhcpd_devfs_enable=&quot;YES&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;Использовать devfs&nbsp;если доступно?<br />\n dhcpd_rootdir=&quot;/var/db/dhcpd&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Директория для запуска<br />\n dhcpd_flags=&quot;-early_chroot&quot;&nbsp;</td>\n</tr>\n</tbody>\n</table>\n<p>&nbsp;Запускаем DHCP-сервер.</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td><strong># sh /usr/local/etc/rc.d/isc-dhcpd start</strong><br />\n Starting dhcpd.<br />\n Internet Systems Consortium DHCP Server V3.1.3<br />\n Copyright 2004-2009 Internet Systems Consortium.<br />\n All rights reserved.<br />\n For info, please visit <a href=\"https://www.isc.org/software/dhcp/\" title=\"https://www.isc.org/software/dhcp/\">https://www.isc.org/software/dhcp/</a><br />\n Wrote 0 leases to leases file.<br />\n Listening on BPF/vlan33/00:14:5e:22:11:2a/10.16.33/24<br />\n Sending on BPF/vlan33/00:14:5e:22:11:2a/10.16.33/24<br />\n Listening on BPF/vlan32/00:14:5e:22:11:2a/10.16.32/24<br />\n Sending on BPF/vlan32/00:14:5e:22:11:2a/10.16.32/24<br />\n Sending on Socket/fallback/fallback-net</td>\n</tr>\n</tbody>\n</table>\n<p>Вуаля... Все получилось. Чего и вам желаю <img alt=\"\" src=\"http://muff.kiev.ua/modules/fckeditor/fckeditor/editor/images/smiley/msn/wink_smile.gif\" /></p>\n', created = 1767368413, expire = 1767454813, headers = '', serialized = 0 WHERE cid = '2:fd3625dd474639d3638476ad4796354c' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:76625959daa0c2647e1643a0ee252ef3' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Вопрос возник. Если в сети появится второй DHCP сервер, который будет выдавать, скажем, ip&nbsp; адреса из другой подсети. Как клиент будет устанавливать параметры сети, от кого первым получит ip тот и установит?</p>\n', created = 1767368413, expire = 1767454813, headers = '', serialized = 0 WHERE cid = '2:76625959daa0c2647e1643a0ee252ef3' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:25c4859370a57bd985d46ad381190ff7' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtejustify\">Протокол&nbsp;<strong>DHCP</strong>&nbsp;построен так, что клиент может обращаться с запросом сразу к нескольким серверам.</p>\n<p class=\"rtejustify\">Клиент <strong>DHCP</strong>, нуждающийся в адресе, посылает широковещательный пакет <strong>DHCPDISCOVER </strong>в поисках сервера. Пакет содержит аппаратный адрес запрашивающего клиента. Затем один или несколько серверов <strong>DHCP</strong> рассматривают запрос и посылают в ответ пакет <strong>DHCPOFFER</strong>, содержащий предлагаемый IP-адрес и &quot;время аренды&quot;.</p>\n<p class=\"rtejustify\">Клиент выбирает адрес из полученных пакетов <strong>DHCPOFFER</strong>. Выбор клиента зависит от его назначения - например, он может выбрать адрес с наибольшим временем аренды. Вслед за тем клиент посылает пакет <strong>DHCPREQUEST</strong> с адресом выбранного сервера.</p>\n<p class=\"rtejustify\">Выбранный сервер посылает подтверждение (<strong>DHCPACK</strong>), и процесс согласования завершается. Пакет <strong>DHCPACK </strong>содержит оговоренные адрес и время аренды. Сервер помечает выделенный адрес как занятый - до окончания срока аренды этот адрес не может быть присвоен другому клиенту. Клиенту осталось только сконфигурировать себя в соответствии с назначенным адресом и можно приступать к работе в сети.</p>\n<p class=\"rtejustify\">Итак,&nbsp;на запрос <strong>DHCPDISCOVER</strong> может ответить несколько серверов. Клиент должен выбрать одно из предложений и послать в ответ пакет <strong>DHCPREQUEST</strong> с идентификатором выбранного сервера. Другие серверы просматривают пакет <strong>DHCPREQUEST</strong> и заключают на основе идентификатора сервера, что их предложение было отвергнуто. Таким образом, они знают, что предложенные ими IP-адреса свободны для назначения другим клиентам.</p>\n<p class=\"rtejustify\">Как упоминалось выше, выбранный сервер завершает согласование отсылкой пакета <strong>DHCPACK</strong>. В случае если сервер не может принять конфигурацию, он посылает пакет <strong>DHCPNAK</strong> (отказ в подтверждении), что вынуждает клиента начать процесс согласования заново.</p>\n<p class=\"rtejustify\">Исходя из этого, если в сети два DHCP-сервера с разными конфигурациями,&nbsp;нету никакой гарантии,&nbsp;что клиент выберет именно ваш сервер.</p>\n', created = 1767368413, expire = 1767454813, headers = '', serialized = 0 WHERE cid = '2:25c4859370a57bd985d46ad381190ff7' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>&nbsp;</p>\n<p>&nbsp;</p>\n', created = 1767368413, expire = 1767454813, headers = '', serialized = 0 WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:3d31fcaf7ea2cf2a78f1d58f1e9f4770' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>В конфиге ошибка<br />\n # *** Глобальные параметры *** #</p>\n<p># Какое доменное имя будем присваивать хостам<br />\noption domain-name \"domain.com\";</p>\n<p># Описываем сроки аренды адреса<br />\ndefault-lease-time 304400;<br />\nmax-lease-time 604800;</p>\n<p># Делаем наш сервер \"авторитетным\" для обслуживаемых сетей<br />\nauthoritative;</p>\n<p># Указываем, что мы не используем динамически обновляемые ДНС<br />\nddns-update-style none;</p>\n<p># Указываем, как поступать серверу с неизвестными клиентами. В моем случае им будет<br />\n# отказано в обслуживании<br />\ndeny unknown-clients;</p>\n<p> # *** Описываем подсети *** #</p>\n<p># Задаем подсеть<br />\nsubnet 10.16.32.0 netmask 255.255.255.0 {</p>\n<p># Описываем диапазон, из которого будем выдавать IP<br />\nrange 10.16.32.2 10.16.32.254;</p>\n<p># Указываем ДНС-сервера<br />\noption domain-name-servers ns1.domain.com, ns2.domain.com;</p>\n<p># Указываем шлюз для сети<br />\noption routers 10.16.32.1;</p>\n<p># Описываем отдельные хосты<br />\nhost User32-1 { hardware ethernet 00:0e:2e:a6:9f:ef; fixed-address 10.16.32.2; }<br />\nhost User32-2 { hardware ethernet 00:1f:c6:d9:a3:e3; fixed-address 10.16.32.3; }<br />\n}<br />\nСкобка должна закрываться перед описанием хостов<br />\nВ версии 4.2</p>\n', created = 1767368413, expire = 1767454813, headers = '', serialized = 0 WHERE cid = '2:3d31fcaf7ea2cf2a78f1d58f1e9f4770' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:6558775f0ecf7c211d44c26cf44fbeb4' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>Исправил.</p>\n<p class=\"rtejustify\">Сам&nbsp;уже давно&nbsp;использую пулы, которые как раз и вписываются в секцию subnet. А&nbsp;этот конфиг &quot;перекочевал&quot; еще с 3 ветки,&nbsp;где все работало в такой конфигурации.</p>\n', created = 1767368413, expire = 1767454813, headers = '', serialized = 0 WHERE cid = '2:6558775f0ecf7c211d44c26cf44fbeb4' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p>&nbsp;</p>\n<p>&nbsp;</p>\n', created = 1767368413, expire = 1767454813, headers = '', serialized = 0 WHERE cid = '2:b1f58154e0889ad9e13f315115f79cf2' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/wake_up_ua.png\"><img alt=\"Вставай, Україно!\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/wake_up_ua.png\" style=\"height:200px; width:150px\" /></a></p>\n', created = 1767368413, expire = 1767454813, headers = '', serialized = 0 WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:cc913d232116f0426090404133377d88' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a href=\"http://muff.kiev.ua/rss.xml\"><img alt=\"RSS\" width=\"160\" height=\"60\" src=\"http://muff.kiev.ua/files/muf-rss.png\" /></a></p>\n', created = 1767368413, expire = 1767454813, headers = '', serialized = 0 WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:39649256b636e3d5ded656bc52bd8c01' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
Версия для печатиОтправить другуPDF version

 DHCP (англ. Dynamic Host Configuration Protocol — протокол динамической конфигурации узла) — это сетевой протокол, позволяющий компьютерам автоматически получать IP-адрес и другие параметры, необходимые для работы в сети TCP/IP. Данный протокол работает по модели «клиент-сервер». Для автоматической конфигурации компьютер-клиент на этапе конфигурации сетевого устройства обращается к т. н. серверу DHCP, и получает от него нужные параметры. Сетевой администратор может задать диапазон адресов, распределяемых сервером среди компьютеров. Это позволяет избежать ручной настройки компьютеров сети и уменьшает количество ошибок.

Это вступлении к статьи о DHCP в Википедии. Рекомендую прочитать, возможно узнаете что-либо новенькое. Ну а я приступаю к описанию установки и настройки DHCP-сервера.

Устанавливать будем из портов (надеюсь они у вас в актуальном состоянии). Перед компиляцией порта сервера DHCP надо убедиться, встроено ли устройство bpf в ядро. Если нет - пересоберите ядро с поддержкой bpf.

# cd /usr/ports/net/isc-dhcp31-server && make install clean

 

Options for isc-dhcp31-server 3.1.3

[X] DHCP_PARANOIA add -user, -group and -chroot options
[X] DHCP_JAIL add -chroot and -jail options
[ ] DHCP_SOCKETS use sockets instead of /dev/bpf (jail-only)
[X] OPENSSL_BASE use the base system OpenSSL (required by TLS)
[ ] OPENSSL_PORT use OpenSSL from ports (required by TLS)

Опции оставляю по дефолту.

По завершению установки порт уведомляет нас о создании пользователя и группы dhcp, а также выводит на экран информацию, которая по мнению разработчиков может пригодится при настройке.

После установки есть пример файла конфигурации: /usr/local/etc/dhcpd.conf.sample. Однако мы не ищем легких путей и будем "ваять" свой

Создадим конфигурационный файл:

# touch /usr/local/etc/dhcpd.conf

Потом наполняем этот файл необходимыми параметрами, в зависимости от поставленых задач. В моем случае конфигурационный файл получился такой:

#  ***   Глобальные параметры   ***   #

# Какое доменное имя будем присваивать хостам
option domain-name "domain.com";

# Описываем сроки аренды адреса
default-lease-time 304400;
max-lease-time 604800;

# Делаем наш сервер "авторитетным" для обслуживаемых сетей
authoritative;

# Указываем, что мы не используем динамически обновляемые ДНС
ddns-update-style none;

# Указываем, как поступать серверу с неизвестными клиентами. В моем случае им будет
# отказано в обслуживании
deny unknown-clients;

 #  ***   Описываем подсети   ***   #

# Задаем подсеть
subnet 10.16.32.0 netmask 255.255.255.0 {

# Описываем диапазон, из которого будем выдавать IP
range 10.16.32.2 10.16.32.254;

# Указываем ДНС-сервера
option domain-name-servers ns1.domain.com, ns2.domain.com;

# Указываем шлюз для сети
option routers 10.16.32.1;

}

# Вторая подсеть. Опции аналогичны первой

subnet 10.16.33.0 netmask 255.255.255.0 {
range 10.16.33.2 10.16.33.254;

option domain-name-servers ns1.domain.com, ns2.domain.com;
option routers 10.16.33.1;

}

# Описываем отдельные хосты
host User32-1 { hardware ethernet 00:0e:2e:a6:9f:ef; fixed-address 10.16.32.2; }
host User32-2 { hardware ethernet 00:1f:c6:d9:a3:e3; fixed-address 10.16.32.3; }
host User33-1 { hardware ethernet 00:1f:c6:24:95:9d; fixed-address 10.16.33.2; }

 

Вот такой вот коротенький конфигурационный файл. Тем не менее - конфиг полностью рабочий. Более детально ознакомиться с возможностями можно на странице руководства dhcpd.conf.

Далее добавляем в rc.conf опции запуска dhcp-сервера. Их целый блок

# cat /etc/rc.conf | grep dhcp
dhcpd_enable="YES"                                   # dhcpd включен?
dhcpd_flags="-q"                                        # исполняемые опции
dhcpd_conf="/usr/local/etc/dhcpd.conf"      # Полный путь к конфигурационному файлу
dhcpd_ifaces="vlan32 vlan33"                    # На каких интерфейсах "слушать" запросы
dhcpd_withumask="022"
dhcpd_chuser_enable="YES"                      # Запуск без привилегий?
dhcpd_withuser="dhcpd"                            # От имени какого пользователя стартовать сервер
dhcpd_withgroup="dhcpd"                          # От имени какой групы стартовать сервер
dhcpd_chroot_enable="YES"                       # Запускать chroot?
dhcpd_devfs_enable="YES"                        # Использовать devfs если доступно?
dhcpd_rootdir="/var/db/dhcpd"                  # Директория для запуска
dhcpd_flags="-early_chroot" 

 Запускаем DHCP-сервер.

# sh /usr/local/etc/rc.d/isc-dhcpd start
Starting dhcpd.
Internet Systems Consortium DHCP Server V3.1.3
Copyright 2004-2009 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Wrote 0 leases to leases file.
Listening on BPF/vlan33/00:14:5e:22:11:2a/10.16.33/24
Sending on BPF/vlan33/00:14:5e:22:11:2a/10.16.33/24
Listening on BPF/vlan32/00:14:5e:22:11:2a/10.16.32/24
Sending on BPF/vlan32/00:14:5e:22:11:2a/10.16.32/24
Sending on Socket/fallback/fallback-net

Вуаля... Все получилось. Чего и вам желаю

Ваша оценка: Нет Средняя: 5 (2 голоса)

Вопрос возник. Если в сети

Вопрос возник. Если в сети появится второй DHCP сервер, который будет выдавать, скажем, ip  адреса из другой подсети. Как клиент будет устанавливать параметры сети, от кого первым получит ip тот и установит?

Протокол DHCP построен так,

Протокол DHCP построен так, что клиент может обращаться с запросом сразу к нескольким серверам.

Клиент DHCP, нуждающийся в адресе, посылает широковещательный пакет DHCPDISCOVER в поисках сервера. Пакет содержит аппаратный адрес запрашивающего клиента. Затем один или несколько серверов DHCP рассматривают запрос и посылают в ответ пакет DHCPOFFER, содержащий предлагаемый IP-адрес и "время аренды".

Клиент выбирает адрес из полученных пакетов DHCPOFFER. Выбор клиента зависит от его назначения - например, он может выбрать адрес с наибольшим временем аренды. Вслед за тем клиент посылает пакет DHCPREQUEST с адресом выбранного сервера.

Выбранный сервер посылает подтверждение (DHCPACK), и процесс согласования завершается. Пакет DHCPACK содержит оговоренные адрес и время аренды. Сервер помечает выделенный адрес как занятый - до окончания срока аренды этот адрес не может быть присвоен другому клиенту. Клиенту осталось только сконфигурировать себя в соответствии с назначенным адресом и можно приступать к работе в сети.

Итак, на запрос DHCPDISCOVER может ответить несколько серверов. Клиент должен выбрать одно из предложений и послать в ответ пакет DHCPREQUEST с идентификатором выбранного сервера. Другие серверы просматривают пакет DHCPREQUEST и заключают на основе идентификатора сервера, что их предложение было отвергнуто. Таким образом, они знают, что предложенные ими IP-адреса свободны для назначения другим клиентам.

Как упоминалось выше, выбранный сервер завершает согласование отсылкой пакета DHCPACK. В случае если сервер не может принять конфигурацию, он посылает пакет DHCPNAK (отказ в подтверждении), что вынуждает клиента начать процесс согласования заново.

Исходя из этого, если в сети два DHCP-сервера с разными конфигурациями, нету никакой гарантии, что клиент выберет именно ваш сервер.

Re: DHCP-сервер в сети: если неохота бегать от компьютера к ...

В конфиге ошибка
# *** Глобальные параметры *** #

# Какое доменное имя будем присваивать хостам
option domain-name "domain.com";

# Описываем сроки аренды адреса
default-lease-time 304400;
max-lease-time 604800;

# Делаем наш сервер "авторитетным" для обслуживаемых сетей
authoritative;

# Указываем, что мы не используем динамически обновляемые ДНС
ddns-update-style none;

# Указываем, как поступать серверу с неизвестными клиентами. В моем случае им будет
# отказано в обслуживании
deny unknown-clients;

# *** Описываем подсети *** #

# Задаем подсеть
subnet 10.16.32.0 netmask 255.255.255.0 {

# Описываем диапазон, из которого будем выдавать IP
range 10.16.32.2 10.16.32.254;

# Указываем ДНС-сервера
option domain-name-servers ns1.domain.com, ns2.domain.com;

# Указываем шлюз для сети
option routers 10.16.32.1;

# Описываем отдельные хосты
host User32-1 { hardware ethernet 00:0e:2e:a6:9f:ef; fixed-address 10.16.32.2; }
host User32-2 { hardware ethernet 00:1f:c6:d9:a3:e3; fixed-address 10.16.32.3; }
}
Скобка должна закрываться перед описанием хостов
В версии 4.2

Re: DHCP-сервер в сети: если неохота бегать от компьютера к ...

Исправил.

Сам уже давно использую пулы, которые как раз и вписываются в секцию subnet. А этот конфиг "перекочевал" еще с 3 ветки, где все работало в такой конфигурации.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература

Выражение Вашего Админа "мечтаю пересесть на Мак" не означает, что Ваш Админ наркоман!