получение адреса по DHCP и работа с dhclient

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"]

[/codesyntax]

Полу­чить адрес:

[codesyntax lang="php"]

[/codesyntax]

Файл спис­ка базы дан­ных адресов:

[codesyntax lang="php"]

[/codesyntax]

Ука­зать дру­гой файл:

# dhclient -v eth0 -lf /tmp/dhcp.file

[codesyntax lang="php"]

[/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"]

[/codesyntax]

Тут:

timeout — timeout для полу­че­ния отве­та; в слу­чае ошиб­ки — будет повтор­ная попыт­ка после retry секунд;
retry — вре­мя до повтор­ной попыт­ки запро­са, если преды­ду­щая не про­шла по timeout;
reboot — после пере­за­пус­ка dhclient сна­ча­ла попы­та­ет­ся исполь­зо­вать тот же адрес, кото­рый у него был ранее; если это не полу­чит­ся — он отпра­вит новый запрос после reboot секунд;
reject — откло­нять запро­сы от DHCP-сер­ве­ра с ука­зан­ным IP;
interface — ука­за­ние, для како­го интер­фей­са при­ме­нять дан­ные правила;
send — опе­ра­тор, ука­зы­а­е­ю­щий спи­сок пара­мет­ров, кото­рые кли­ент будет пере­да­вать серверу;
require — опе­ра­тор, ука­зы­ва­ю­щий спи­сок тре­бу­е­мых кли­ен­ту опций;

Пол­ный спи­сок досту­пен в:

1 # man dhcp-options.