Автор не несет никакой ответственности за содержание этого документа. Используйте понятия, примеры и др. на ваш страх и риск. Это новое издание документа - оно может содержать ошибки и погрешности, которые, конечно же, могут повредить вашу систему. И, хотя это маловероятно, все-таки действуйте с осторожностью. Я не несу никакой ответственности за это.
Учтите также, что это НЕ официальная информация. Документ содержит много предположений, основанных на опыте работы людей. Используйте данную информацию на свой страх и риск.
Новые версии доступны по адресу
http://www.oswg.org/oswg-nightly/DHCP.html
Имеются следующие переводы DHCP mini-HOWTO:
Китайский - http://www.linux.org.tw/CLDP/mini/DHCP.html
Японский - http://www.linux.or.jp/JF/JFdocs/DHCP.html
Испанский - ftp://cuates.pue.upaep.mx/pub/linux/LuCAS/DHCP-mini-Como/
Автор дает разрешение перевести этот документ на другой язык. Я должен только попросить вас указать ссылку на оригинал и послать мне URL, чтобы я мог указать его в этом документе.
Ваши замечания только приветствуются. Без вашего участия этого документа и не существовало бы. Так что шлите ваши дополнения, комментарии и критику по адресу <[email protected]>.
Этот документ модифицирован из исходной версии Павла Макеева.
Следующие люди содействовали написанию этого mini-HOWTO.
Heiko Schlittermann
Jonathan Smith
Dan Khabaza
Hal Sadofsky
Henrik Stoerner
Paul Rossington
и многие другие
This document is copyrighted (c) 1998 Vladimir Vuksan and distributed under the terms of the OpenContent License (OPL). Full text of the license can be found at
http://www.opencontent.org/opl.shtml
Авторские права на русский перевод этого текста принадлежат (c) 2000 SWSoft Pte Ltd. Все права зарезервированы.
Этот документ является частью проекта Linux HOWTO.
Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но так или иначе автор текста и автор перевода желали бы знать о таких дистрибутивах.
Все переводы и производные работы, выполненные по документам Linux HOWTO должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO с которым можно связаться по адресу приведенному ниже.
Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: <[email protected]>, или к координатору русского перевода Linux HOWTO компании SWSoft Pte Ltd. по адресу <[email protected]>
DHCP - это Dynamic Host Configuration Protocol (протокол динамической конфигурации машин). Он используется для настройки часто изменяемых сетевых параметров машин (клиентов) с помощью сервера. DHCP полностью совместим с BOOTP. Для дополнительной информации см. RFC 2131 (RFC 1541) и др. (см. раздел "Ресурсы Internet" в конце этого документа). Можете также почитать http://web.syr.edu/~jmwobus/comfaqs/dhcp.faq.html.
Этот мини-HOWTO описывает использование как DHCP-СЕРВЕРА, так и DHCP-КЛИЕНТА. Большинству людей нужен DHCP-клиент, который необходим на рабочих станциях для получения информации c сервера. DHCP-сервер необходим администраторам сети для передачи информации DHCP-клиентам. Так что, если вы обычный пользователь, то вам нужен DHCP-клиент.
В настоящий момент существует три различных DHCP-клиента под Linux: dhcpcd, pump и dhclient. Этот мини-HOWTO описывает работу с dhcpcd.
Вы можете скачать DHCP-клиент, предназначенный для вашего дистрибутива. Если вы хотите собрать его из исходных текстов, то вам нужен пакет dhcpcd 1.3.18. Его разработал Sergei Viznyuk <[email protected]>, и в данный момент он идет в готовом виде в большинстве из дистрибутивов.
Исходные тексты dhcpcd могут быть скачаны с
ftp://ftp.phystech.com/pub/ (Основной сайт)
http://www.cps.msu.edu/~dunham/out/
Затем следуйте нижеуказанным инструкциям.
Вы можете скачать последнюю версию DHCPcd с любого сервера Metalab:
ftp://metalab.unc.edu/pub/Linux/system/network/daemons
ftp://ftp.phystech.com/pub/ (Основной сайт)
Скачайте последнюю версию dhcpcd.tar.gz.
Разархивируйте ее
tar -zxvf dhcpcd-1.3.18pl1.tar.gz
войдите в каталог и соберите dhcpcd
cd dhcpcd-1.3.18pl1
make
Инсталлируйте (вы должны выполнить следующую команду, будучи root-ом)
make install
Она создаст каталог /etc/dhcpc, в котором DHCPcd хранит информацию, а файл dhcpcd будет скопирован в /usr/sbin.
Если вы хотите инициализировать систему, используя DHCP во время загрузки, наберите:
cd /etc/rc.d
mv rc.inet1 rc.inet1.OLD
Это переименует старый файл инициализации сети в rc.inet1.OLD. Вам нужно создать новый скрипт rc.inet1. Следующий код - то, что вам нужно:
#!/bin/sh # # rc.inet1 Скрипт, запускающий сетевую поддержку. HOSTNAME=`cat /etc/HOSTNAME` # Возможно это и не нужно, # но я все равно оставил # Инициализируем интерфейс обратной петли. /sbin/ifconfig lo 127.0.0.1 /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo # ЕСЛИ У ВАС ЕСТЬ СЕТЬ, следующая строка настраивает интерфейс eth0. # Если у вас только обратная петля или SLIP-интерфейс, то закомментируйте # следующую строку. /usr/sbin/dhcpcd
Запишите файл и перезагрузите систему.
Когда закончите, переходите к заключительному шагу.
Под RedHat 6.0+ настроить DHCPcd очень просто. Все что вам нужно, это запустить Панель Управления, набрав control-panel.
Выберите "Network Configuration" (Конфигурация Сети)
Нажмите на "Interfaces" (Интерфейсы)
Нажмите "Add" (Добавить)
Выберите Ethernet
В "Edit Ethernet/Bus Interface" выберите "Activate interface at boot time" (Активировать интерфейс во время загрузки) и выберите "DHCP" в качестве "Interface configuration protocol" (Протокол конфигурации интерфейса).
Заметим, что в RedHat 6.x вместо dhcpcd по умолчанию устанавливается DHCP-клиент pump. CD-ROM включает RPM-пакет dhcpcd, так что если вам не удалось настроить pump, вы можете попробовать установить dhcpcd (напр. через rpm -i dhcpcd-1.3.17pl2-1.i386.rpm) и внести некоторые изменения.
Alexander Stevenson <[email protected]> дополнительно отметил:
У меня не получилось с DHCPcd. То, что в конце концов заработало, был "pump", который поставляется вместе с Linux Mandrake 6.0 (я думаю, что с RedHat тоже). Я использовал команду:
pump -i eth0 -h hostname
Где "hostname" не имеет значения, однако без него сервер не отвечает.
Затем я соответственно изменил строчку в скрипте /sbin/ifup, т.к. она не содержала опцию -h и тоже не работала.
Обычно, если вы используете linuxconf, и настраиваете адаптер на "DHCP", это тоже не работает. Попробуйте добавить -h hostname к строке с pump в скрипте /sbin/ifup. Теперь мой скрипт содержит:
... if [ -n "$PUMP" ]; then echo -n "Determining IP information for $DEVICE..." if /sbin/pump -i $DEVICE -h hostname; then echo " done." else echo " failed." exit 1 fi else ...
Это все. Перезапустите машину и наберите /sbin/ifup eth0 в командной строке.
Под RedHat 5.0+ настроить DHCPcd очень просто. Все что вам нужно, это запустить Панель Управления, набрав control-panel.
Выберите "Network Configuration" (Конфигурация Сети)
Нажмите на "Interfaces" (Интерфейсы)
Нажмите "Add" (Добавить)
Выберите Ethernet
В "Edit Ethernet/Bus Interface" выберите "Activate interface at boot time" (Активировать интерфейс во время загрузки) и выберите "DHCP" в качестве "Interface configuration protocol" (Протокол конфигурации интерфейса).
When you are finished go the last step.
DHCPcd включается в стандартный дистрибутив RedHat как RPM-пакет, так что вы можете найти в вашем дистрибутиве в каталоге RPMS или по адресу:
ftp://ftp.redhat.com/pub/redhat/redhat-4.2/i386/RedHat/RPMS/dhcpcd-0.6-2.i386.rpm
Установите его командой - rpm -i dhcpcd-0.6-2.i386.rpm.
Кроме того, вы можете сами скомпилировать его, следуя шагам, описанным в Slackware.
Следующую информацию мне предоставил <[email protected]>.
Из файла /etc/resolv.conf я убрал мой статический адрес и имя машины. Однако, оставил строку с "search" и обе строки с "nameserver" (по какой то причине dhcpcd не создает файл /etc/dhcpc/resolv.conf, так что я использую постоянный файл /etc/resolv.conf).
В /etc/sysconfig/network я удалил настройку HOSTNAME и GATEWAY, а другие оставил как есть (NETWORKING, DOMAINNAME, GATEWAYDEV).
В /etc/sysconfig/network-scripts/ifcfg-eth0 я убрал IPADDR, NETMASK, NETWORK, и BROADCAST, а DEVICE и ONBOOT оставил как есть. Строку с BOOTPROTO изменил на BOOTPROTO=dhcp.
Сохранил файл. И перезапустил компьютер.
Когда закончите, переходите к заключительному шагу.
Готовый deb-пакет DHCPcd находится по адресу:
http://ftp.debian.org/debian/dists/slink/main/binary-i386/net/
Или, можете следовать инструкциям из Slackware.
Чтобы поставить пакет наберите dpkg -i /where/ever/your/debian/packages/are/dhcpcd*deb.
Оказывается, что больше ничего настраивать не надо, т.к.:
Пакет dhcpcd устанавливает скрипт загрузки в /etc/init.d/dhcpcd, который ссылается на различные каталоги /etc/rc?.d/. | ||
--От: Heiko Schlittermann <[email protected]> |
Содержимое каталогов /etc/rc?.d/ запускается во время загрузки.
Если после инсталляции вы не перезапускались, то вы можете запустить dhcpd вручную: /etc/init.d/dhcpcd start.
Когда закончите, переходите к заключительному шагу.
Следующий раздел написан R. Shapiro
По данным реализации "1999" (R5), Linuxppc теперь почти полностью совместим с Redhat, только с одним замечанием (см. ниже). В общих чертах, инструкции выглядят точно также, как и в RedHat 6.x и Mandrake 6.x.
Исключение составляет тот факт, что RedHat 6 использует 'pump' в качестве клиента, а 'pump' не очень хорошо работает под Linuxppc. Чтобы обойти это, вы должны поставить последнюю версию dhcpcd (Sergei Viznyuk) и отредактировать /sbin/ifup на использование dhcpd вместо pump.
Измените
if [ "$BOOTPROTO" = bootp -o "$BOOTPROTO" = dhcp ]; then PUMP=true fi if [ -n "$PUMP" ]; then
на
if [ "$BOOTPROTO" = bootp ]; then echo " done." else echo " failed." exit 1 fi elif [ "$BOOTPROTO" = dhcp ]; then echo -n "Determining IP information for $DEVICE..." if /sbin/dhcpcd -d $DEVICE ; then if [ -f /etc/dhcpc/dhcpcd-${DEVICE}.exe ]; then /etc/dhcpc/dhcpcd-${DEVICE}.exe fi
и соответственно измените ifdown. Измените
if [ "$BOOTPROTO" = bootp -o "$BOOTPROTO" = dhcp ]; then .... fi
на
if [ "$BOOTPROTO" = bootp ]; then fi if [ "$BOOTPROTO" = dhcp ]; then if [ -f /var/run/dhcpcd-${DEVICE}.pid ]; then kill `cat /var/run/dhcpcd-${DEVICE}.pid` rm -f /var/run/dhcpcd-${DEVICE}.pid fi fi
Рабочий ppc rpm для dhcpcd включен в дистрибутив Linuxppc 1999; немного более поздние rpm доступны в каталоге contrib на ftp://ftp.linuxppc.org/. Исходные тексты, компилируемые под Linuxppc 1999, находятся на ftp://ftp.phystech.com/pub/dhcpcd-1.3.17-pl9.tar.gz.
После того как вы перезапустили машину, вам нужно настроить сетевой интерфейс. Наберите: ifconfig.
Вы получите приблизительно следующее:
lo Link encap:Local Loopback inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0 UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1 RX packets:302 errors:0 dropped:0 overruns:0 frame:0 TX packets:302 errors:0 dropped:0 overruns:0 carrier:0 coll:0 eth0 Link encap:Ethernet HWaddr 00:20:AF:EE:05:45 inet addr:24.128.53.102 Bcast:24.128.53.255 Mask:255.255.254.0 ^^^^^^^^^^^^^^^^^^^^^^^ UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1 RX packets:24783 errors:1 dropped:1 overruns:0 frame:1 TX packets:11598 errors:0 dropped:0 overruns:0 carrier:0 coll:96 Interrupt:10 Base address:0x300
Если у вас установлен нормальный адрес inet addr, все прошло нормально. Если вы видите 0.0.0.0, не отчаивайтесь - это временное значение, задаваемое dhcpcd, перед тем, как он получит правильный адрес. Если в течении нескольких минут вы по-прежнему видите 0.0.0.0, см. раздел Основные проблемы и их решения. DHCPcd остается запущенным, пока включена машина. Каждые три часа он соединяется с DHCP-сервером и пытается продлить использование выделенного адреса. При этом он записывает все сообщения в журнал syslog (на Slackware /var/adm/syslog, RedHat/OpenLinux /var/log/syslog).
И наконец. Вам нужно указать DNS-сервер. Возможны два варианта: вы можете узнать адрес DNS-сервера у вашего провайдера и поместить его в /etc/resolv.conf; или же DHCPcd сам получит список из DHCP-сервера и положит файл resolv.conf в каталог /etc/dhcpc.
Я решил использовать resolv.conf, создаваемый DHCPcd, сделав следующее:
Сохраняем старый /etc/resolv.conf: mv /etc/resolv.conf /etc/resolv.conf.OLD
Если каталог /etc/dhcpc не существует, создаем его: mkdir /etc/dhcpc
Делам ссылку из /etc/dhcpc/resolv.conf в /etc/resolv.conf: ln -s /etc/dhcpc/resolv.conf /etc/resolv.conf
Если это не сработает, попробуйте следующее (исправление предложил <[email protected]> с маленькой поправкой от Henrik Stoerner):
Этот шаг я должен сделать только в том случае, если dhcpcd не создает файл /etc/dhcpc/resolv.conf. В скрипте /etc/sysconfig/network-scripts/ifup я сделал следующие изменения (очень криво, но работает):
elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then echo -n "Using DHCP for ${DEVICE}... " /sbin/dhcpcd -c /etc/sysconfig/network-scripts/ifdhcpc-done ${DEVICE} echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh if [ -f /var/run/dhcp-wait-${DEVICE}.pid ]; then ^^^^ echo "failed." exit 1
Я изменил на:
elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then echo -n "Using DHCP for ${DEVICE}... " /sbin/dhcpcd echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ]; then ^^^^^^ echo "failed." exit 1
Обратите внимание на ! (восклицательный знак) в выражении if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ]; |
Теперь можете откинуться на спинку стула и наслаждаться :-).
Следующий шаг(и) можно пропустить, но он может понадобиться только некоторым:
Если вы хотите иметь временный доступ к сети, запустите dhcpcd из командной строки (для этого нужно быть root): /usr/sbin/dhcpcd.
Для отключения от сети, наберите /usr/sbin/dhcpcd -k.
Если вы выполнили вышеуказанные шаги, а доступ к сети так и не заработал, то далее приводятся различные объяснения этому:
Во время процесса загрузки Linux пытается определить тип вашей карты и выводит что-то вроде этого:
eth0: 3c509 at 0x300 tag 1, 10baseT port, address 00 20 af ee 11 11, IRQ 10. 3c509.c:1.07 6/15/95 [email protected]
Если похожее сообщение отсутствует, Linux не может определить тип вашей карты. Если у вас обычная Ethernet карта (клон NE2000), вы должны настроить карту при помощи утилит под DOS, находящимися на диске с драйверами. Попробуйте менять IRQ (9,10,12) до тех пор, пока Linux не определит карту.
Попробуйте запустить dhcpcd, набрав команду dhcpcd -r.
Проверьте настройку сетевого интерфейса через ifconfig (подождите несколько секунд, пока закончится процесс конфигурации, сначала Inet.addr может быть равен 0.0.0.0)
Если проблема разрешилась, добавьте ключ "-r" в скрипт загрузки.
Например на RedHat отредактируйте скрипт /etc/sysconfig/network-scripts/ifup, изменив следующее:
IFNAME=$[ {DEVICE} \ "/sbin/dhcpcd -r -c /etc/"- и т.д. и т.п.
Скорее всего вы работаете в RedHat, и не очень внимательно следовали инструкциям :-). Вы пропустили восклицательный знак в одном из условных операторов. Перейдите сюда и сделайте соответствующие исправления.
По некоторым сообщениям, gated (сервер шлюзов) нарушает маршрутизацию на Linux машинах, что приводит к вышеуказанной проблеме. Проверьте, запущен ли gated: ps -auxww | grep gate.
Если это так, снимите его, деинсталлировав RPM или убрав файл из /etc/rc.d/.
Вам нужно убедиться, что на вашей сетевой карте активирован порт 10BaseT ("телефонный" разьем). Лучше всего проверить на какой порт настроена ваша сетевая карта во время загрузки:
eth0: 3c509 at 0x300 tag 1, 10baseT port, address 00 20 af ee 11 11, IRQ 10. ^^^^^^^^^^^^ 3c509.c:1.07 6/15/95 [email protected]
Я получаю сообщения от пользователей портативных компьютеров, у которых появляется такая проблема из-за утилит PCMCIA, устанавливающих тип разъема на 10Base2 (тонкий Ethernet). Вы должны убедиться, что используете для соединения 10BaseT. Если нет, настройте сетевую карту и перезагрузитесь.
На некоторых системах в DHCP-запрос нужно включать имя машины. В случае с dhcpcd, это делается ключем -h foohost. В качестве параметра, скорее всего ожидается учетное имя пользователя в сети.
Кабельный модем обычно запоминает Ethernet-адрес вашей сетевой карты, так что, если вы подключили новый компьютер или заменили сетевую карту, вам нужно как-нибудь заставить кабельный модем распознать новый компьютер/карту. Обычно для этого достаточно выключить модем и снова включить его при включенном компьютере, или позвонить в службу технической поддержки и сказать им, что вы сменили карту в вашем компьютере.
Если у вас установлен Firewall (правила ipfwadm), проверьте разрешен ли трафик к портам 67/68, которые использует DHCP.
Оказывается, в DHCP MediaOne использует некоторые вещи, которых там не должно быть. Вообще то они не должны вызывать проблем, но вы можете их проверить. Если вы (не)счастливый обладатель Windows NT, можете запустить Event Viewer на предмет примерно таких предупреждений:
DHCP received an unknown option 067 of length 005. The raw option data is given below. 0000: 62 61 73 69 63 basic
Если это вызывает проблему, скачайте исходные тексты или готовую программу c ftp://vanbuer.ddns.org/pub/.
Если вам не удалось добиться успеха с dhcpcd, вы можете попробовать ISC dhclient. Он идет вместе с дистрибутивом ISC DHCP, который включает и DHCP-клиент и DHCP-сервер. Инструкции, как собрать дистрибутив ISC DHCP, могут быть найдены здесь. Когда закончите, вернитесь в этот раздел для настройки клиента.
Следующую информацию предоставил Ted Lemon <<[email protected]>>, один из авторов dhclient. |
В текущей версии DHCP-клиента вам на самом деле не нужен файл dhclient.conf. Все, что вам нужно сделать, это просто запустить dhclient: /sbin/dhclient.
При этом настроятся все возможные интерфейсы. Если этого не произошло или вы хотите настроить только один интерфейс, создайте /etc/dhclient.conf с примерно такой конфигурацией:
interface "eth0" { send dhcp-client-identifier 1:xx:xx:xx:xx:xx:xx; send dhcp-lease-time 86400; }
Здесь определяется интерфейс eth0 (если вам нужен другой, то соответственно измените eth0). Замените xx:xx:xx:xx:xx на Ethernet-адрес карты. Это делает dhclient скорее похожим на клиент Win95.
Существует несколько различных DHCP-серверов под Unix и коммерческих, и бесплатных. Наиболее популярным считается Paul Vixie/ISC DHCPd. Последнюю версию 2.0 (для большинства пользователей) или бета-версию 3.0 вы можете взять по адресу
ftp://ftp.isc.org/isc/dhcp/
Некоторые дистрибутивы предоставляют готовый пакет dhcpd, так что вы можете пропустить этот раздел, если он у вас есть.
Скачайте и разархивируйте его. После этого перейдите в каталог с исходными текстами и наберите: ./configure
После того, как закончится настройка на вашу систему, наберите: make и make install.
После окончания инсталяции наберите ifconfig -a. Вы увидите примерно следующее:
eth0 Link encap:10Mbps Ethernet HWaddr 00:C0:4F:D3:C4:62 inet addr:183.217.19.43 Bcast:183.217.19.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2875542 errors:0 dropped:0 overruns:0 TX packets:218647 errors:0 dropped:0 overruns:0 Interrupt:11 Base address:0x210
Если в сообщении не будет слова MULITICAST, вы должны пересобрать ядро с поддержкой мультикастинга. На большинстве систем это уже включено.
Следующим шагом нужно установить маршрутизацию на 255.255.255.255. Цитата из DHCPd README:
"Чтобы dhcpd работал с разборчивыми DHCP-клиентами (напр. Windows 95), он должен иметь возможность посылать пакеты по IP-адресу 255.255.255.255. К сожалению, Linux использует 255.255.255.255 в качестве адреса рассылки по всей локальной сети (у нас это 192.5.5.223). Это приводит к ошибкам в протоколе DHCP, на которые многие DHCP-клиенты не обращают внимания, хотя некоторые (например все DHCP-клиеты Microsoft) все же обращают. Клиенты, имеющие эту проблему, не видят сообщения сервера DHCPOFFER."
Наберите: route add -host 255.255.255.255 dev eth0
Если появится сообщение "255.255.255.255: Unknown host", вам нужно добавить следующую запись в файл /etc/hosts file:
255.255.255.255 all-ones
Затем попробовать:
route add -host all-ones dev eth0
или
route add 255.255.255.0 dev eth0
где eth0 - это, конечно же, имя вашей сетевой платы.
Теперь вам надо настроить DHCPd. Чтобы это сделать, вам нужно создать или отредактировать файл /etc/dhcpd.conf. Существует также графический интерфейс kcmdhcpd для dhcpd под KDE ( http://www.kde.org/ ), который аналогичен конфигуратору DHCP под Windows NT. Когда выйдет KDE 2.0, оно должно идти вместе с kcmdhcpd, или вы можете качать его непосредственно с:
ftp://ftp.us.kde.org/pub/kde/unstable/apps/network/
Если вы хотите настроить его вручную, следуйте нижеуказанным инструкциям.
В большинстве случаев вам нужно назначать случайные IP адреса. Это может быть сделано при помощи следующих установок:
# Пример /etc/dhcpd.conf # (добавьте свои комментарии здесь) default-lease-time 600; max-lease-time 7200; option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option routers 192.168.1.254; option domain-name-servers 192.168.1.1, 192.168.1.2; option domain-name "mydomain.org"; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.100; range 192.168.1.150 192.168.1.200; }
В результате этого DHCP-сервер выдает клиентам IP-адреса из диапазона 192.168.1.10-192.168.1.100 или 192.168.1.150-192.168.1.200. Если клиент не запрашивает временных рамок, сервер выдает адрес на 600 секунд. В противном случае, максимально возможное время будет установлено в 7200 секунд. Сервер будет также "советовать" клиенту использовать 255.255.255.0 в качестве маски подсети, 192.168.1.255 для широкого вещания (broadcast), 192.168.1.254 в качестве маршрутизатора/шлюза и 192.168.1.1 и 192.168.1.2 для DNS-сервера.
Если вы хотите указать WINS-сервер для клиентов с Windows, вам нужно добавить опцию:
option netbios-name-servers 192.168.1.1;
Вы можете также указать IP-адрес, основываясь на адресе сетевой карты:
host haagen { hardware ethernet 08:00:2b:4c:59:23; fixed-address 192.168.1.222; }
При этом сетевой карте с адресом 08:00:2b:4c:59:23 будет назначаться IP-адрес 192.168.1.222.
Вы можете также смешивать и сочетать настройки. Например, вы можете выдать определенным клиентам (например серверам) "статический" IP-адрес, а другим динамический адрес (например пользователям с портативными компьютерами). Кроме того существует множество других настроек, таких как адрес NIS-сервера, сервера точного времени и т.д. Если вам нужны такие настройки, прочитайте руководство по dhcpd.conf.
Перед запуском сервера вам нужно сделать только одну вещь. В большинстве случаев при инсталляции не создается файл dhcpd.leases. Он нужен DHCPd для хранения информации о текущих выделенных адресах и представляет из себя обычный текстовый файл, который можно посмотреть во время работы DHCPd. Чтобы создать его наберите:
touch /var/state/dhcp/dhcpd.leases
Создастся пустой файл (нулевого размера). Некоторые старые (<2.0) версии dhcpd хранят этот файл в /etc/dhcpd.leases. Вам не нужно изменять файл dhcpd.leases - это делает сам dhcpd. Если при его создании появилась ошибка, что он уже существует, просто игнорируйте ее и переходите к следующему шагу.
Теперь вы можете запустить DHCP-сервер. Просто наберите (или вставьте в скрипт загрузки)
/usr/sbin/dhcpd
При это dhcpd запустится на устройство eth0. Если вы хотите запустить его на другой сетевой плате, просто укажите
/usr/sbin/dhcpd eth1
Чтобы проверить, что все работает нормально, вы должны включить режим отладки:
/usr/sbin/dhcpd -d -f
После загрузки одного из ваших клиентов, на консоль выведутся различные отладочные сообщения. Если все работает нормально, то на этом вы можете закончить :-). Выйдите из dhcpd и запустите его без аргументов -d -f. Если вы хотите запускать dhcpd во время загрузки сервера, добавьте dhcpd например в скрипт
/etc/rc.d/rc.local
В апрельском Linux Magazine есть хорошая статья, которая называется Network Nirvana: How to make Network Configuration as easy as DHCP, которая описывает установку DHCP.