Введение.
Поведение рабочих станций в корпоративной сети во многом зависит от правильной работы сетевых служб. Пользователь, включая свой ПК, запускает процессы тестирования и загрузки основных программ и протоколов. После чего ПК присваивается, с помощью dhclient, индивидуальный адрес в виде IP номера, по нему его узнают и позволяют производить доступ к сетевым ресурсам предприятия. IP — адреса могу быть статичными и динамическими, в зависимости от применяемого устройства. В статье рассматриваются вопросы особенности работы динамического IP — адреса, использующего dhclient, получаемого рабочей станцией от сервера 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
Как работает клиент.
Работа программы строится по принципу клиент-сервер. При включении ПК, на этапе загрузки сетевых служб /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 происходит автоматически, по мере получения аренды адреса, обычно администраторы устанавливают срок аренды ~ две недели.
Топология dhclient.
Каталог сетевых настроек /etc/init/ifaces/eth0/ хранит файлы:
- ipv4address — содержит адрес IP, при статическом типе
- ipv4route — содержит IP адрес шлюза, при статическом типе
- options — хранит общею информацию о сетевых параметрах
- resolv.conf — информация о DNS настройках
Приведённый список включает полный перечь файлов настроек сетевой карты. В нашем случае мы имеем только файл options т.к работает dhclient, остальные сетевые параметры берёт на себя сервер DHCP. Если в каталоге /etc/init/ifaces/eth0/ имеется еще какой нибудь файл, то как правило с пустыми полями, осуществляя резервную поддержку в особых случаях.
Ключи команды dhclient.
Всего ключей около 20, но основными рабочими являются несколько:
- — nw -стать демоном без ожидания аренды
- — v -подробные сообщения журнала и обращение к серверу за арендой
- — r -убивает процессы клиента dhcp
- — x -убивает процессы dhcp ожидая новой команды
- -w -начинать работать без сервера DHCP
- — vesion -показывает версию клиента
Примеры работы 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 -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 -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 -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. В примерах 8,9.10 рассматриваются варианты работы dhclient, когда сервер DHCP может находится в аварийном состоянии или временно не доступном.
Заключение.
Работа клиента dhcp становится не заметной, когда всё функционирует и сетевые службы доступны. Ситуация меняется, если ПК не может подключится к коммуникационным службам организации, после сбоя сетевого оборудования или длительного простоя ПК. Очень частой причиной становится конфликт IP адресов, когда несколько машин имеют одинаковую аренду IP номера. В этом случае, перебрав все возможные варианты, приходится в ручную править файл аренды, что бы «отцепить» ПК от старого адреса и запросить новую аренду, тем самым решая конфликт. Понимание механизма работы программы позволит администратору, правильно выстроить диагностику при сетевых неисправностях.
Полезные ссылки.
- man dhclient
- man dhclient-conf