Управление и настройка dhclient в сети Linux.

Введение.

Поведение рабочих станций в корпоративной сети во многом зависит от правильной работы сетевых служб. Пользователь, включая свой ПК, запускает процессы тестирования и загрузка основных программ и протоколов. После чего ПК присваивается индивидуальный адрес, в виде IP номера, по нему его узнают и позволяют производить доступ к сетевым ресурсам предприятия. IP -адреса могу быть статичными и динамическими, в зависимости от применяемого устройства. В статье рассматриваются вопросы особенности работы динамического IP адреса, получаемого рабочей станцией от сервера DHCP установленного в организации.

Подготовка.

  • Стенд:
  • ALT Linux сервер, имя lin-dhcp; ip-10.0.2.18
  • Альт Рабочая станция, имя: lin-kw, IP=10.0.2.10
  • Сетевая карта ПК eth0

Особых подготовительных действий не требуется, на рабочей станции dhclient установлен по умолчанию, проверяем.

# dhclient --version
isc-dhclient-x.x.x

Как работает клиент.

Работа программы dhclient строится по принципу клиент-сервер. При включении ПК, на этапе загрузки сетевых служб /etc/init/ifaces, система определяет тип IP соединения — статический или динамический. Если параметр BOOTPROTO = dhcp в файле options каталога /etc/init/ifaces/eth0/, то дальнейшие действия, после чтения /etc/dhcp/dhclient.conf, переносятся в файл базы данных аренды /var/lib/dhcp/dhclient/state/dhclient.leases. Здесь система хранит историю аренды последних IP адресов вашего ПК. Обновление файла dhclient.conf происходи автоматически, по мере получения аренды адреса, обычно администраторы устанавливают срок аренды ~ две недели.

Топология клиента

Каталог сетевых настроек /etc/init/ifaces/eth0/ содержит файлы:

  • ipv4address — содержит адрес IP, при статическом типе
  • ipv4route — содержит IP адрес шлюза, при статическом типе
  • options — хранит общею информацию о сетевых параметрах
  • resolv.conf — информация о DNS настройках

Приведённый список включает полный перечь файлов настроек сетевой карты. В нашем случае мы имеем только файл options т.к работает dhclient, остальные сетевые параметры берёт на себя сервер DHCP. Если в каталоге /etc/init/ifaces/eth0/ имеется еще какой нибудь файл, то как правило с пустыми полями, осуществляя резервную поддержку в особых случаях.

Ключи команды dhclient.

Всего ключей около 20, но основными рабочими являются несколько опции:

  • — nw стать демоном без ожидания аренды
  • — v подробные сообщения журнала и обращение к серверу за арендой
  • — r убивает процессы dhclient
  • — x убивает процессы dhclient ожидая новой команды
  • -w начинать работать без сервера DHCP
  • — vesion показывает версию клиента

Примеры работы dhclient.

В галереи снимков показаны рабочие моменты команды dhclient.

1.Начальные условия работы сетевой карты eth0

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:ff:65:15 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.10/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:feff:6515/64 scope link 
       valid_lft forever preferred_lft forever

2.Запрос на аренду IP адреса.

# dhclient -v
...
Listening on LPF/eth0/08:00:27:ff:65:15
Sending on   LPF/eth0/08:00:27:ff:65:15
Sending on   Socket/fallback
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7
DHCPOFFER of 10.0.2.10 from 10.0.2.2
DHCPREQUEST for 10.0.2.10 on eth0 to 255.255.255.255 port 67
DHCPACK of 10.0.2.10 from 10.0.2.2
bound to 10.0.2.10 -- renewal in 7208758 seconds

3.Смотрим информацию в файле dhclient.leases

# cat /var/lib/dhcp/dhclient/state/dhclient.leases
lease {
  interface "eth0";
  fixed-address 10.0.2.10;
  option subnet-mask 255.255.255.0;
  option routers 10.0.2.2;
  option dhcp-lease-time 18748800;
  option dhcp-message-type 5;
  option domain-name-servers 10.0.2.2;
  option dhcp-server-identifier 10.0.2.2;
  option ntp-servers 10.0.2.2;
  option domain-name "lin-dhcp";
  renew 4 2022/09/22 17:43:57;
  rebind 5 2022/12/30 15:50:41;
  expire 4 2023/01/26 18:50:41;
}
lease {
  interface "eth0";
  fixed-address 10.0.2.10;
  option subnet-mask 255.255.255.0;
  option routers 10.0.2.2;
  option dhcp-lease-time 18748636;
  option dhcp-message-type 5;
  option domain-name-servers 10.0.2.2;
  option dhcp-server-identifier 10.0.2.2;
  option ntp-servers 10.0.2.2;
  option domain-name "lin-dhcp";
  renew 2 2022/10/04 03:49:54;
  rebind 5 2022/12/30 15:51:00;
  expire 4 2023/01/26 18:50:40;
}

4.Останавливаем (убить ) процессы dhclient.

# dhclient -r
Killed old client process

5.Смотрим информацию на сетевой карте.

# ip a
1: lo:
... 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:ff:65:15 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::a00:27ff:feff:6515/64 scope link 
       valid_lft forever preferred_lft forever

6.Запрос аренды IP адреса.

# dhclient -v
...
Listening on LPF/eth0/08:00:27:ff:65:15
Sending on   LPF/eth0/08:00:27:ff:65:15
Sending on   Socket/fallback
DHCPREQUEST for 10.0.2.10 on eth0 to 255.255.255.255 port 67
DHCPACK of 10.0.2.10 from 10.0.2.2
bound to 10.0.2.10 -- renewal in 8328451 seconds.

7. Останавливаем (убить ) процессы dhclient.

# dhclient -r
Killed old client process

8. Стать демоном без ожидания аренды.

# dhclient -nw
# ip a
1: lo: 
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:ff:65:15 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.10/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:feff:6515/64 scope link 
       valid_lft forever preferred_lft forever

9. Останавливаем (убить ) процессы dhclient.

# dhclient -r
Killed old client process

10.Начинать работать без сервера DHCP.

# dhclient -w
# ip a
1: lo: 
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:ff:65:15 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.10/24 brd 10.0.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:feff:6515/64 scope link 
       valid_lft forever preferred_lft forever

Пояснения.

В рассмотреных выше примере 1 была показана исходная настройка сетевой карты ПК, eth0. Пример 2 смотрим информацию аренды для карты eth0. Пример 3 показывает, какая запись находится в файле настроек аренды для карты eth0. В дальнейших примерах рассматриваются различные варианты работы dhclient и использования ключей, когда сервер DHCP находится в аварийном состоянии.

Закдючение.

Работа dhclient становится не заметной, когда всё функционирует и сетевые службы доступны. Ситуация меняется в корне, если ПК не может подключится к коммуникационным сервисам организации, после сбоя сетевого оборудования или длительного простоя ПК. Очень частой причиной становится конфликт IP адресов, когда несколько машин имеют одну и тужу аренду IP номера. В этом случае, перебрав все возмодные варианты, приходится в ручную править файл аренды, что бы «отцепить» ПК от старого адреса, после чего запросить новую аренду, тем самым решить конфликт.