Установка клиента
В настоящий момент существует три различных DHCP-клиента под
Linux: dhcpcd, pump и dhclient. Этот мини-HOWTO описывает работу с dhcpcd.
Где найти клиент (dhcpcd)
Вы можете скачать DHCP-клиент, предназначенный для вашего дистрибутива.
Если вы хотите собрать его из исходных текстов, то вам нужен пакет
dhcpcd 1.3.18. Его разработал Sergei Viznyuk
<sergei@phystech.com>, и в данный момент он идет
в готовом виде в большинстве из дистрибутивов.
Исходные тексты dhcpcd могут быть скачаны с
Затем следуйте нижеуказанным инструкциям.
Slackware
Вы можете скачать последнюю версию DHCPcd с любого сервера Metalab:
Скачайте последнюю версию 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.x и Mandrake 6.x
Под 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 <alexander.stevenson@home.com>
дополнительно отметил:
У меня не получилось с 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.x
Под 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.
RedHat 4.x и Caldera OpenLinux 1.1/1.2
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.
Следующую информацию мне предоставил
<nothing@cc.gatech.edu>.
Из файла /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.
Сохранил файл. И перезапустил компьютер.
Когда закончите, переходите к заключительному шагу.
Debian
Готовый 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
<heiko@os.inf.tu-dresden.de> | |
Содержимое каталогов /etc/rc?.d/ запускается во время загрузки.
Если после инсталляции вы не перезапускались,
то вы можете запустить dhcpd вручную:
/etc/init.d/dhcpcd start.
Когда закончите, переходите к
заключительному шагу.
LinuxPPC и MkLinux
Следующий раздел написан 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
Если это не сработает, попробуйте следующее (исправление предложил
<nothing@cc.gatech.edu>
с маленькой поправкой от 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 becker@cesdis.gsfc.nasa.gov |
Если похожее сообщение отсутствует, Linux не может определить тип вашей карты.
Если у вас обычная Ethernet карта (клон NE2000), вы должны настроить карту при
помощи утилит под DOS, находящимися на диске с драйверами. Попробуйте менять IRQ
(9,10,12) до тех пор, пока Linux не определит карту.
DHCP-сервер поддерживает RFC 1541 / DHCP-сервер под Windows NT
Попробуйте запустить dhcpcd, набрав команду dhcpcd -r.
Проверьте настройку сетевого интерфейса через ifconfig (подождите несколько
секунд, пока закончится процесс конфигурации, сначала Inet.addr может быть
равен 0.0.0.0)
Если проблема разрешилась, добавьте ключ "-r" в скрипт загрузки.
Например на RedHat отредактируйте скрипт /etc/sysconfig/network-scripts/ifup,
изменив следующее:
IFNAME=$[ {DEVICE} \
"/sbin/dhcpcd -r -c /etc/"- и т.д. и т.п. |
Во время загрузки появляется сообщение "Using DHCP for eth0 ... failed" (Использование DHCP для eth0 :
не работает), однако система работает нормально
Скорее всего вы работаете в RedHat, и не очень внимательно следовали инструкциям :-).
Вы пропустили восклицательный знак в одном из условных операторов.
Перейдите сюда и сделайте соответствующие
исправления.
Сеть работает несколько минут, а затем перестает отвечать
По некоторым сообщениям, gated (сервер шлюзов) нарушает
маршрутизацию на Linux машинах, что приводит к вышеуказанной проблеме.
Проверьте, запущен ли gated: ps -auxww | grep gate.
Если это так, снимите его, деинсталлировав RPM или убрав файл из /etc/rc.d/.
Сетевая карта определяется во время загрузки, но в журнале только сообщения "NO DHCPOFFER" (у меня PCMCIA карта)
Вам нужно убедиться, что на вашей сетевой карте активирован порт 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 becker@cesdis.gsfc.nasa.gov |
Я получаю сообщения от пользователей портативных компьютеров, у которых появляется
такая проблема из-за утилит PCMCIA, устанавливающих тип разъема на 10Base2
(тонкий Ethernet). Вы должны убедиться, что используете для
соединения 10BaseT. Если нет, настройте сетевую карту и перезагрузитесь.
DHCP-клиент делает запросы, но никто не отвечает (Проблему решил Peter Amstutz)
На некоторых системах в DHCP-запрос нужно включать имя машины.
В случае с dhcpcd, это делается ключем -h foohost.
В качестве параметра, скорее всего ожидается учетное имя пользователя в сети.
Я выполнил все инструкции, но машина все еще не в сети
Кабельный модем обычно запоминает Ethernet-адрес вашей сетевой карты,
так что, если вы подключили новый компьютер или заменили сетевую карту,
вам нужно как-нибудь заставить кабельный модем распознать новый компьютер/карту.
Обычно для этого достаточно выключить модем и снова включить его при
включенном компьютере, или позвонить в службу технической поддержки и сказать им,
что вы сменили карту в вашем компьютере.
Если у вас установлен Firewall (правила ipfwadm), проверьте разрешен ли
трафик к портам 67/68, которые использует DHCP.
У меня установлен сервис MediaOne Express, и я по-прежнему не могу подключиться к сети
Оказывается, в 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/.
Альтернативный DHCP-клиент (ISC dhclient)
Если вам не удалось добиться успеха с dhcpcd, вы можете попробовать
ISC dhclient. Он идет вместе с дистрибутивом ISC DHCP, который
включает и DHCP-клиент и DHCP-сервер. Инструкции, как собрать
дистрибутив ISC DHCP, могут быть найдены здесь.
Когда закончите, вернитесь в этот раздел для настройки клиента.
| Следующую информацию предоставил Ted Lemon <<mellon@isc.org>>,
один из авторов 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.