Thank you for reading this post, don't forget to subscribe!
Для управления адресом интерфейса по протоколу DHCP (Dynamic Host Configuration Protocol — протокол динамической настройки узла) используется утилита dhclient
.
Полезные опции dhclient
-q
— не выводить данные в консоли и в лог, кроме ошибок;
-1
— отправить запрос только один раз; в случае ошибки будет exit 2
;
-r
— освободить текущий адрес;
-lf <lease-file>
— файл базы данных аренды; если не указан будет использован файл по-умолчанию /var/lib/dhclient/dhclient.leases
;
-pf <pid-file>
— PID-файл процесса; если не указан — будет использован /var/run/dhclient.pid
;
-cf <config-file>
— файл конфигурации dhcp
-клиента; если не указан — будет использоваться /etc/dhcp/dhclient.conf
(в CentOS его всё-же надо создавать вручную);
-s <server> — указать сервер DHCP для отправки запроса; если не указан — запрос отправляет по всей сети 255.255.255.255
;
-I <dhcp-client-identifier>
— указание dhcp
-идентификатора клиента;
-H <host-name>
— указание опции host-name в запросе к DHCP-серверу; строка host-name
должна содержать только префикс имени хсота клиента, к которому сервер добавит ddns
или dns
имя для полчения полного FQDN-имени; нельзя использовать с опцией -F
;
-F <fqdn.fqdn>
— указать опцию fqdn.fqdn
для отправки серверу; нельзя использовать с опцией -H
; опция fqdn.fqdn
определяет полное имя хоста клиента, которое сервер будет использовать для оновления DDNS;
-R <option>[,<option>...]
— указать список опций, которые клиент хочет получить от сервера; список по умолчанию содержит такие опции:
subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, host-name, nis-domain, nis-servers, ntp-servers, interface-mtu
опция -R
не добавляет список запросов к запросу по-умолчанию, а перезаписывает его;
-timeout <timeout>
— указать timeout запроса вручную;
-v
— подробный режим;
Примеры работы с dhclient
Сбросить текущий адрес:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 |
# dhclient -r eth0 ... Jun 30 11:13:23 main-home dhclient[24157]: Internet Systems Consortium DHCP Client 4.1.1-P1 Jun 30 11:13:23 main-home dhclient[24157]: Copyright 2004-2010 Internet Systems Consortium. Jun 30 11:13:23 main-home dhclient[24157]: All rights reserved. Jun 30 11:13:23 main-home dhclient[24157]: For info, please visit https://www.isc.org/software/dhcp/ Jun 30 11:13:23 main-home dhclient[24157]: Jun 30 11:13:23 main-home dhclient[24157]: Listening on LPF/eth0/08:00:27:38:f0:04 Jun 30 11:13:23 main-home dhclient[24157]: Sending on LPF/eth0/08:00:27:38:f0:04 Jun 30 11:13:23 main-home dhclient[24157]: Sending on Socket/fallback Jun 30 11:13:23 main-home dhclient[24157]: DHCPRELEASE on eth0 to 192.168.1.1 port 67 (xid=0x41155573) |
[/codesyntax]
Получить адрес:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# dhclient -v eth0 ... Jun 30 11:14:08 main-home dhclient[24173]: Internet Systems Consortium DHCP Client 4.1.1-P1 Jun 30 11:14:08 main-home dhclient[24173]: Copyright 2004-2010 Internet Systems Consortium. Jun 30 11:14:08 main-home dhclient[24173]: All rights reserved. Jun 30 11:14:08 main-home dhclient[24173]: For info, please visit https://www.isc.org/software/dhcp/ Jun 30 11:14:08 main-home dhclient[24173]: Jun 30 11:14:08 main-home dhclient[24173]: Listening on LPF/eth0/08:00:27:38:f0:04 Jun 30 11:14:08 main-home dhclient[24173]: Sending on LPF/eth0/08:00:27:38:f0:04 Jun 30 11:14:08 main-home dhclient[24173]: Sending on Socket/fallback Jun 30 11:14:11 main-home dhclient[24173]: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 8 (xid=0x1462dcbf) Jun 30 11:14:11 main-home dhclient[24173]: DHCPOFFER from 192.168.1.1 Jun 30 11:14:11 main-home dhclient[24173]: DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0x1462dcbf) Jun 30 11:14:11 main-home dhclient[24173]: DHCPACK from 192.168.1.1 (xid=0x1462dcbf) Jun 30 11:14:13 main-home NET[24218]: /sbin/dhclient-script : updated /etc/resolv.conf Jun 30 11:14:13 main-home dhclient[24173]: bound to 192.168.1.104 -- renewal in 38008 seconds. |
[/codesyntax]
Файл списка базы данных адресов:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
tail: /var/lib/dhclient/dhclient.leases: file truncated lease { interface "eth0"; fixed-address 192.168.1.104; option subnet-mask 255.255.255.0; option routers 192.168.1.1; option dhcp-lease-time 86400; option dhcp-message-type 5; option domain-name-servers 10.0.10.3,8.8.8.8,193.41.60.8; option dhcp-server-identifier 192.168.1.1; renew 1 2014/06/30 08:16:15; rebind 1 2014/06/30 08:16:15; expire 1 2014/06/30 08:16:15; } lease { interface "eth0"; fixed-address 192.168.1.104; option subnet-mask 255.255.255.0; option routers 192.168.1.1; option dhcp-lease-time 86400; option dhcp-message-type 5; option domain-name-servers 10.0.10.3,8.8.8.8,193.41.60.8; option dhcp-server-identifier 192.168.1.1; renew 1 2014/06/30 18:50:07; rebind 2 2014/07/01 05:16:28; expire 2 2014/07/01 08:16:28; } |
[/codesyntax]
Указать другой файл:
# dhclient -v eth0 -lf /tmp/dhcp.file
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# cat /tmp/dhcp.file lease { interface "eth0"; fixed-address 192.168.1.104; option subnet-mask 255.255.255.0; option routers 192.168.1.1; option dhcp-lease-time 86400; option dhcp-message-type 5; option domain-name-servers 10.0.10.3,8.8.8.8,193.41.60.8; option dhcp-server-identifier 192.168.1.1; renew 1 2014/06/30 19:30:40; rebind 2 2014/07/01 05:17:50; expire 2 2014/07/01 08:17:50; } |
[/codesyntax]
Указать имя клиента:
1 |
# dhclient -v eth0 -H testbox |
После чего в логе DHCP-сервера:
testbox | LAN | 192.168.1.104 | 08:00:27:38:F0:04 |
Без указания опции -H
— клиент вообще не отправляет своё имя, и идентифицировать его можно только по MAC-адресу:
1 |
# dhclient -v eth0 |
LAN | 192.168.1.104 | 08:00:27:38:F0:04 |
Вариант номер 1 — добавить строку:
1 |
DHCP_HOSTNAME=testbox-2 |
в файл /etc/sysconfig/network-scripts/ifcfg-eth0
.
Пример файла dhclient.conf
Другой вариант — настроить конфигурацию dhcp
-клиента с помощью файла /etc/dhcp/dhclient.conf
.
Создаём файл с такой строкой:
1 |
# cat /etc/dhcp/dhclient.conf |
2 |
send host-name "testbox-3"; |
Перезапускаем dhcient
:
1 |
# dhclient -r eth0 |
1 |
# dhclient -v eth0 |
Проверяем:
testbox-3 | LAN | 192.168.1.104 | 08:00:27:38:F0:04 |
В данном случае пример выполняется на:
1 |
# cat /etc/redhat-release |
2 |
CentOS release 6.5 (Final) |
Возможны и другие места размещения файла:
1 |
/etc/dhclient-eth0.conf |
2 |
/etc/dhclient.conf |
3 |
/etc/dhcp/dhclient-eth0.conf |
Немного усложним файл:
[codesyntax lang="php"]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# cat /etc/dhcp/dhclient.conf timeout 60; retry 60; reboot 10; reject 192.33.137.209; interface "eth0" { send host-name "testbox-4"; prepend domain-name-servers 127.0.0.1; request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, host-name; require subnet-mask, domain-name-servers; } |
[/codesyntax]
timeout
— timeout
для получения ответа; в случае ошибки — будет повторная попытка после retry
секунд;
retry
— время до повторной попытки запроса, если предыдущая не прошла по timeout
;
reboot
— после перезапуска dhclient
сначала попытается использовать тот же адрес, который у него был ранее; если это не получится — он отправит новый запрос после reboot
секунд;
reject
— отклонять запросы от DHCP-сервера с указанным IP;
interface
— указание, для какого интерфейса применять данные правила;
send
— оператор, указыаеющий список параметров, которые клиент будет передавать серверу;
require
— оператор, указывающий список требуемых клиенту опций;
Полный список доступен в:
1 |
# man dhcp-options. |