Настройка клиента

Настройка клиента

На данный момент есть три различных клиентских DHCP программы для Linux, dhcpcd, pump и dhclient. Этот mini-HOWTO рассматривает главным образом dhcpcd.

Получение клиентского демона (dhcpcd)

В зависимости от вашего дистрибутива, возможно, вам придется загрузить клиентский DHCP демон. Если вы хотите скомпилировать его из исходных кодов, необходимый вам пакет называется dhcpcd, его текущая версия 1.3.18. Он поддерживается Sergei Viznyuk и, на сегодняшний день, поставляется в большинстве дистрибутивов в виде бинарного пакета.

Исходный код dhcpcd может быть загружен со следующих мест

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

Slackware

Вы можете загрузить последнюю версию DHCPcd с любого зеркала Metalab или отсюда:

Загрузите последнюю версию dhcpcd.tar.gz.

  • Распакуйте его

    tar -zxvf dhcpcd-1.3.18pl1.tar.gz

  • войдите в каталог и выполните make dhcpcd

    cd dhcpcd-1.3.18pl1

    make

  • Установите его (вам следует выполнить от root следующую команду)

    make install

Будет создан каталог /etc/dhcpc, где DHCPcd будет размещать DHCP информацию, а также будет скопирован в /usr/sbin файл dhcpcd.

Для инициализации системы во время загрузки с помощью DHCP наберите:

cd /etc/rc.d

mv rc.inet1 rc.inet1.OLD

Старый скрипт инициализации сети будет перемещен в rc.inet1.OLD. Вам следует создать новый скрипт rc.inet1, в котором следует поместить следующий код:

#!/bin/sh
#
# rc.inet1      Этот shell скрипт загружает базовую INET систему.

HOSTNAME=`cat /etc/HOSTNAME` #Возможно это не требуется, но я это оставлю 
                             # ак или иначе

# Подключаем устройство loopback.
/sbin/ifconfig lo 127.0.0.1
/sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo

# ЕСЛИ У ВАС ЕСТЬ ETHERNET СОЕДИНЕНИЕ, для настройки интерфейса eth0 
# используйте ниже приведенные строки. Если вы используете только 
# loopback или SLIP, не включайте оставшиеся далее строки в этот файл.

/usr/sbin/dhcpcd

Сохраните его и перезагрузите компьютер.

Когда закончите, переходите к следующему шагу.

RedHat 6.x и Mandrake 6.x

Настройка DHCPcd под RedHat 6.0+ достаточно проста. Все что от вас требуется — запустить панель управления, набрав control-panel.

Заметьте, что в RedHat 6.x, вместо вышеупомянутого dhcpcd, Redhat по умолчанию включила DHCP клиент называемый pump. Установочный CD-ROM также содержит и dhcpcd RPM, так что если вы не удовлетворены pump, попробуйте вместо него dhcpcd. После установки dhcpcd (т.е. rpm -i dhcpcd-1.3.17pl2-1.i386.rpm) вам следует сделать несколько изменений.

Дополнительные заметки от Alexander Stevenson :

Я не доволен 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 ...

Другой, более элегантный путь добавления поля hostname предоставлен Aad van der Klaauw:

Сейчас дома я настраиваю шлюзовую систему, требуется установить MAC адрес и использовать '-h hostname'. Поэтому я решил *не* изменять скрипт, а использовать конфигурационный файл. В моем /etc/sysconfig/network-scripts/ifcfg-eth0 я добавил следующее

DEVICE="eth0"
MACADDR="00:11:22:33:44:55"
DHCP_HOSTNAME="trigger_for_terayon"

Эти строки пережили обновления системы, и, по моему мнению, это "более правильный" способ.

Перезагрузите вашу машину или наберите в командной строке /sbin/ifup eth0.

RedHat 4.x и Caldera OpenLinux 1.1/1.2

DHCPcd включен в дистрибутив RedHat в виде RPM, и вы можете его найти на CD-ROM в каталоге 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 .

Я удалил мой статический ip и имя из /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.

Сохраняем файл. Перезагружаем ваш компьютер.

Если вы закончили, переходите к следующему шагу.

LinuxPPC и MkLinux

Следующая секция была написана R. Shapiro

С выпуска "1999" (R5) release, Linuxppc почти полностью совместим с Redhat 6, с одной оговоркой (смотрите ниже). В общем, инструкции точно такие же, как и для текущего выпуска RedHat 6.x и Mandrake 6.x.

Остается та проблема, что Redhat 6 по умолчанию использует 'pump' клиент для dhcp, а 'pump' не надежно работает на Linuxppc. Чтобы это обойти, вам следует установить последнюю версию dhcpcd от Sergei Viznyuk, и отредактировать /sbin/ifup для использования dhcpcd вместо 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 cd; немного позже 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 получит IP адрес. Если через несколько минут, вы все равно видите 0.0.0.0, то загляните в Поиск неисправностей. DHCPcd ‐ демон, и должен быть запущен все время, пока работает ваша машина. Каждые три часа он связывается с DHCP сервером и пытается продлить аренду используемого IP адреса. Он регистрирует все сообщения в syslog (в Slackware /var/adm/syslog, в RedHat/OpenLinux /var/log/syslog).

Еще одно заключение. Вам следует указать ваш сервер имен. Есть два способа это сделать, вы можете либо попросить вашего провайдера дать вам адреса ваших серверов имен и затем поместить их в /etc/resolv.conf, либо DHCPcd будет получать список с DHCP сервера и будет создавать файл resolv.conf в /etc/dhcpc.

Я решаю использовать DHCPcd resolv.conf и выполняю следующее:

Сохраните ваш старый /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

Если это не помогает, попробуйте это (решение предоставлено с небольшими поправками от 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 ];

Теперь откиньтесь на спинку и наслаждайтесь :-).

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

Если вы следовали вышеприведенным шагам и не можете получить доступ к вашей сети, этому есть еще несколько возможных объяснений:

Альтернативный DHCP клиент (ISC dhclient)

Если у вас не получилось успешно запустить dhcpcd на вашей Linux системе, попробуйте ISC dhclient. dhclient поставляется с DHCP дистрибутивом от ISC, который включает как DHCP клиента, так и DHCP сервер. Инструкции по получению и установке дистрибутива DHCP могут быть найдены здесь. Когда вы закончите, пожалуйста, вернитесь к этой секции для настройки клиента.

Замечание: Следующая информация была предоставлена одним из авторов dhclient — Ted Lemon .

В текущей версии 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;
}

Тут мы полагаем, что ethernet интерфейс — eth0. Если это не так, измените его. Также измените xx:xx:xx:xx:xx на ваш ethernet адрес. Этот dhclient.conf заставляет клиента выглядеть как Win95 клиент.



Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости