Версія 1 (альфа)

Встановлення і налаштування в мережі серверів DHCP з балансуванням навантаження та взаємозамінністю, автоматичним поновленням серверів DNS, завантаженням станцій через мережу.

За мотивами:


Вступ

Dynamic Host Configuration Protocol (DHCP) - динамічний протокол налаштування комп'ютерів. Сервер DHCP є першим комп'ютером з яким зв'язуються при завантаженні бездискові робочі станції, що мають мережеву картку PXE. Основне завдання серверу DHCP полягає у призначенні адрес IP та іншої конфігураційної інформації стеку протоколів TCP/IP комп'ютерам, про існування котрих могло навіть не бути відомо до встановлення сеансу зв'язку. Сервер DHCP може роздавати адреси IP на підгрунті адрес MAC мережевих карт. Також сервер DHCP може вказувати бездисковим станціям звідки брати файлову систему та ядро для завантаження через мережу. Роль серверу DHCP є безцінною в мережах де кількість комп'ютерів є змінною, а їх кількість перевищує можливе для цієї мережі число адрес, наприклад для провайдерів послуг Інтернет через додзвон по комутованих лініях. Протокол DHCP розширює можливості старого BOOTP і дозволяє динамічно змінювати налаштування стеку TCP/IP на робочих станціях. Фактично він значно полегшує роботу системних адміністраторів та обслуговуючого персоналу. Прослуховує запити на порт 67.

DHCP FAQ: http://www.dhcp-handbook.com/dhcp_faq.html

Початкові налаштування

Спочатку потрібно переконатись у вірній роботі деяких речей. Перевіримо мережевий зв'язок:

# ifconfig eth0 enable multicast
# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:E0:83:16:2F:D6
         inet addr:10.0.0.101  Bcast:10.0.0.255  Mask:255.255.255.0
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:26460491 errors:0 dropped:0 overruns:2 frame:0
         TX packets:32903198 errors:0 dropped:0 overruns:0 carrier:1
         collisions:0 txqueuelen:100
         RX bytes:2483502568 (2368.4 Mb)  TX bytes:1411984950 (1346.5 Mb)
         Interrupt:18 Base address:0x1800

Дуже важливо, щоб був присутнім MULTICAST якщо ні — потрібно перезібрати ядро з його підтримкою, див. Компіляція ядра GNU/Linux.

Встановлення сервера DHCP

В мережі може бути або один сервер DHCP (з своїм діапазоном ІР адрес), або два, спеціально налаштовані, для розподілу навантаження та взаємної заміни при вимкненні одного з них. Встановимо сервер DHCP http://www.isc.org/products/DHCP, в Gentoo це робиться так:

# emerge dhcp

Налаштування сервера DHCP (/etc/dhcp/dhcpd.conf)

Щоб запустити сервер DHCP, потрібно створити його конфігураційний файл, нижче подається тільки приклад, основні ідеї, на їх основі потрібно написати свій файл під вашу конкретну мережу:

$ cat /etc/dhcp/dhcpd.conf
### dhcpd.conf
### Sample configuration file for ISC dhcpd
### dhcpd.conf file for .cluster.linux

lease-file-name "/var/lib/dhcp/dhcpd.leases";

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog-ng.conf to complete the redirection).
log-facility local7;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;

local-port 67;
local-address 10.0.0.10;
#omapi-port 00;

############## DHCP FAILOVER ######################
#failover peer name state {
#   my state partner-down;
#   peer state state at date;
#};

#failover peer "foo" {
#    primary;
#    address primarydhcp.cluster.linux;
#    port 519;
#    peer address secondarydhcp.cluster.linux;
#    peer port 520;
#    max-response-delay 60;
#    max-unacked-updates 10;
#    mclt 3600;         #may not be specified  on  the  secondary
#    split 128;         #only on prymary; hash<128 primary, hash>=128 secondary answer
#    load balance max seconds 4;
#}

################ DNS server configuration ##############################
#The  DNS  server  must be configured to allow updates for
#any zone that the DHCP server will be updating!!!
#security key for DNS
#to create in BIND9 key tipe: dnssec-keygen -a HMAC-MD5 -b 128 -n USER DNS_UPDATER
#
#EXAMPLE of DNS configuration:
#
#include "/etc/bind/dns-updater.key";
#
#zone "cluster.linux" {
#   type master;
#   file "cluster.linux.zone";
#   allow-update { key DNS-UPDATER; };
#   };
#
#zone "0.0.10.in-addr.arpa" {
#   type master;
#   file "10.0.0.zone";
#   allow-update { key DNS-UPDATER; };
#   };
#logging {
#   channel update_debug {
#       file "/var/log/update-debug.log";
#       severity  debug 3;
#       print-category yes;
#       print-severity yes;
#       print-time     yes;
#       };
#   channel security_info    {
#       file "/var/log/named-auth.info";
#       severity  info;
#       print-category yes;
#       print-severity yes;
#       print-time     yes;
#       };
#
#   category update { update_debug; };
#   category security { security_info; };
#   };
#################################################################################

################ Automatic DNS update ##############################
# The  DNS  server  must be configured to allow updates for any zone that the DHCP server will be updating!!!
# Security key for DNS. To create in BIND9 key tipe:
# dnssec-keygen -a HMAC-MD5 -b 256 -n USER DNS-UPDATER
ddns-update-style interim;
ignore client-updates;
#allow client-updates;
update-optimization false;  #DNS update for that client each  time the client  renews its lease
update-static-leases true;  #DNS updates for clients even assigned their IP address using a fixed-address  statement

#security key for DHCP - DNS update

include "/etc/dhcp/dns-updater.key";

zone cluster.linux. {
    primary 10.0.0.10;
    key DNS-UPDATER;
}

zone 0.0.10.in-addr.arpa. {
    primary 10.0.0.10;
    key DNS-UPDATER;
}

# option definitions common to all supported networks...
option domain-name "cluster.linux";
option domain-name-servers ns.cluster.linux, my-gentoo.cluster.linux;

default-lease-time 600;
max-lease-time 7200;

#option root-path "10.0.0.10:/diskless/10.0.0.104";
# Define Custom Options
option option-128       code 128 = string;
option option-129       code 129 = text;
option option-150       code 150 = text;
# Definition of PXE-specific options
# Code 1: Multicast IP address of boot file server
# Code 2: UDP port that client should monitor for MTFTP responses
# Code 3: UDP port that MTFTP servers are using to listen for MTFTP requests
# Code 4: Number of seconds a client must listen for activity before trying
#         to start a new MTFTP transfer
# Code 5: Number of seconds a client must listen before trying to restart
#         a MTFTP transfer
# 
option space PXE;
option PXE.mtftp-ip               code 1 = ip-address;
option PXE.mtftp-cport            code 2 = unsigned integer 16;
option PXE.mtftp-sport            code 3 = unsigned integer 16;
option PXE.mtftp-tmout            code 4 = unsigned integer 8;
option PXE.mtftp-delay            code 5 = unsigned integer 8;
option PXE.discovery-control      code 6 = unsigned integer 8;
option PXE.discovery-mcast-addr   code 7 = ip-address;

################### dhcpd's class ###################### 

################### PXE clients ######################
class "pxeclients" {
    match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
    option vendor-class-identifier "PXEClient";
    vendor-option-space PXE;

    # Definition of PXE-specific options
    # At least one of the vendor-specific PXE options must be set in
    # order for the client boot ROMs to realize that we are a PXE-compliant
    # server.  We set the MCAST IP address to 0.0.0.0 to tell the boot ROM
    # that we can't provide multicast TFTP (address 0.0.0.0 means no address).
    # Multicast IP address of boot file server
    option PXE.mtftp-ip       0.0.0.0;
    #option PXE.mtftp-ip          10.0.0.10;
    # UDP port that client should monitor for MTFTP responses
    option PXE.mtftp-cport            4011;
    # UDP port that MTFTP servers are using to listen for MTFTP requests
    option PXE.mtftp-sport            1759;
    # Number of seconds a client must listen for activity before trying
    # to start a new MTFTP transfer
    option PXE.mtftp-tmout            20;
    # Number of seconds a client must listen before trying to restart
    # a MTFTP transfer
    option PXE.mtftp-delay            20;

    # This is the name of the server they should get it from.
    # Use the master's IP
    next-server           10.0.0.10;

    # No Grub
    # This is the name of the file the boot ROMs should download.
    #filename "/pxelinux.0";

    # GRUB network boot stuff
    filename "/grub/pxegrub";
    option option-150 "/grub/menu_node.lst";
}

#################### etherboot clients ########################
# If you are using etherboot with a non specific image 
class "etherboot" {
    match if substring (option vendor-class-identifier, 0, 9) = "Etherboot";
    # This is the name of the server they should get it from.
    # Use the master's IP
    next-server           10.0.0.10;

    # No Grub
    #filename "/kernel/vmlinux";

    # GRUB network boot stuff
    filename "/grub/nbgrub";
    option option-150 "/grub/menu_node.lst";
}

#################### subnet 10.0.0.0/24 options ###################
subnet 10.0.0.0 netmask 255.255.255.0 {
    option subnet-mask      255.255.255.0;
    option broadcast-address    10.0.0.255;

    # --- default gateway and routers
    # Use your gateway IP, if required
    option routers          10.0.0.10;
    option ip-forwarding        false;
    option non-local-source-routing false;
    option router-discovery     false;
    option static-routes        10.0.0.10 10.0.0.254;
    option router-solicitation-address  10.0.0.10;

    option domain-name      "cluster.linux";
    # Use your DNS IP, if required
    option domain-name-servers  10.0.0.10, 10.0.0.1;

    option nis-domain       "cluster.linux";
    option nisplus-domain       "cluster.linux";
    option nis-servers      10.0.0.10;
    option nisplus-servers      10.0.0.10;
    option smtp-server      10.0.0.10;
    option pop-server       10.0.0.10;
    option nntp-server      10.0.0.10;
    option www-server       10.0.0.10;
    option finger-server        10.0.0.10;
    option irc-server       10.0.0.10;
    option ntp-servers      10.0.0.10;
    option time-servers     10.0.0.10;

    option netbios-name-servers 10.0.0.10;
    # --- Selects point-to-point node (default is hybrid).
    # 1 b-node (brodcast); 2 p-node (wins); 3 m-node (brodcast-wins); 4 h-node (wins-brodcast)
    # -- Don't change this unless you understand Netbios very well
    option netbios-dd-server    10.0.0.10;
    option netbios-node-type    2;

    option lpr-servers      10.0.0.10;

    option time-offset      7200;   # Eastern Standard Time

    default-lease-time      600;
    max-lease-time          7200;

    server-name         "primarydhcp";
    get-lease-hostnames         true;   #tell dhcpd to look up the domain name corresponding to the  IP  address
    use-host-decl-names         on; #name provided  for the host declaration will be supplied to the client as its hostname
    option option-150       "/grub/menu_node.lst";
    next-server             10.0.0.10;

    pool {
#   failover peer "secondarydhcp.cluster.linux";
    range 10.0.0.11 10.0.0.30;
    allow known clients;
    allow members of "pxeclients";
    allow members of "etherboot";
    allow unknown clients;
    # This prevents unlisted machines from getting an IP
#   deny unknown clients;
#   ignore unknown clients;

    # BOOTP options
#   allow bootp true;
#   deny bootp true;
#   ignore bootp true;
#   ping-check true;
    }

    # we want the nameserver to appear at a fixed address
    group {

    # Hosts which require special configuration options can be listed in
    # host statements.   If no address is specified, the address will be
    # allocated dynamically (if possible), but the host-specific information
    # will still come from the host declaration.
    # Fixed IP addresses can also be specified for hosts.   These addresses
    # should not also be listed as being available for dynamic assignment.
    # Hosts for which fixed IP addresses have been specified can boot using
    # BOOTP or DHCP.   Hosts for which no fixed address is specified can only
    # be booted with DHCP, unless there is an address range on the subnet
    # to which a BOOTP client is connected which has the dynamic-bootp flag
    # set.
    host ns {
        hardware ethernet 0:6:8:c:4:6;
        fixed-address 10.0.0.1;
        allow booting;
#       deny booting;
#       ignore booting;
    }
    }

    # we wont fixed IP for folowing hosts computers
    host my.cluster.linux  {
    hardware ethernet 0:4:7:9:9d:45;
    fixed-address 10.0.0.2;
    ddns-hostname my-gentoo;
    ddns-domainname "cluster.linux";
    ddns-rev-domainname "in-addr.arpa";
    allow duplicates;   #it's nesecery when one computer has more than one operating system installed
#   deny duplicates;
    } 

    # Diskless
    group {
    update-static-leases on;
    use-host-decl-names on;

    host node-11 {
    # Use your node MAC address
    hardware ethernet       00:11:09:32:E5:0E;
    # Give your slave a static IP
    fixed-address           10.0.0.11;
    option host-name        "node-11";
    option option-150       "/grub/menu-10.0.0.11.lst";
    option root-path        "/diskless/10.0.0.11";  # same as tftp from 'next server
    }

    host node-12 {
    # Use your node MAC address
    hardware ethernet       00:11:09:32:E5:0E;
    # Give your slave a static IP
    fixed-address           10.0.0.12;
    option host-name        "node-12";
    option option-150       "/grub/menu-10.0.0.12.lst";
    option root-path        "/diskless/10.0.0.12";  # same as tftp from 'next server
    }

    host node-13 {
    # Use your node MAC address
    hardware ethernet       00:11:09:32:E5:0E;
    # Give your slave a static IP
    fixed-address           10.0.0.13;
    option host-name        "node-13";
    option option-150       "/grub/menu-10.0.0.13.lst";
    option root-path        "/diskless/10.0.0.13";  # same as tftp from 'next server
    }

    host node-14 {
    # Use your node MAC address
    hardware ethernet       00:11:09:32:E5:0E;
    # Give your slave a static IP
    fixed-address           10.0.0.14;
    option host-name        "node-14";
    option option-150       "/grub/menu-10.0.0.14.lst";
    option root-path        "/diskless/10.0.0.14";  # same as tftp from 'next server
    }

    host node-15 {
    # Use your node MAC address
    hardware ethernet       00:11:09:32:E5:0E;
    # Give your slave a static IP
    fixed-address           10.0.0.15;
    option host-name        "node-15";
    option option-150       "/grub/menu-10.0.0.15.lst";
    option root-path        "/diskless/10.0.0.15";  # same as tftp from 'next server
    }

    host node-16 {
    # Use your node MAC address
    hardware ethernet       00:11:09:32:E5:0E;
    # Give your slave a static IP
    fixed-address           10.0.0.16;
    option host-name        "node-16";
    option option-150       "/grub/menu-10.0.0.16.lst";
    option root-path        "/diskless/10.0.0.16";  # same as tftp from 'next server
    }

    host node-17 {
    # Use your node MAC address
    hardware ethernet       00:11:09:32:E5:0E;
    # Give your slave a static IP
    fixed-address           10.0.0.17;
    option host-name        "node-17";
    option option-150       "/grub/menu-10.0.0.17.lst";
    option root-path        "/diskless/10.0.0.17";  # same as tftp from 'next server
    }

    host node-18 {
    # Use your node MAC address
    hardware ethernet       00:11:09:32:E5:0E;
    # Give your slave a static IP
    fixed-address           10.0.0.18;
    option host-name        "node-18";
    option option-150       "/grub/menu-10.0.0.18.lst";
    option root-path        "/diskless/10.0.0.18";  # same as tftp from 'next server
    }

    host node-19 {
    # Use your node MAC address
    hardware ethernet       00:11:09:32:E5:0E;
    # Give your slave a static IP
    fixed-address           10.0.0.19;
    option host-name        "node-19";
    option option-150       "/grub/menu-10.0.0.19.lst";
    option root-path        "/diskless/10.0.0.19";  # same as tftp from 'next server
    }

    host node-20 {
    # Use your node MAC address
    hardware ethernet       00:11:09:32:E5:0E;
    # Give your slave a static IP
    fixed-address           10.0.0.20;
    option host-name        "node-20";
    option option-150       "/grub/menu-10.0.0.20.lst";
    option root-path        "/diskless/10.0.0.20";  # same as tftp from 'next server
    }

    host node-21 {
    # Use your node MAC address
    hardware ethernet       00:11:09:32:E5:0E;
    # Give your slave a static IP
    fixed-address           10.0.0.21;
    option host-name        "node-21";
    option option-150       "/grub/menu-10.0.0.21.lst";
    option root-path        "/diskless/10.0.0.21";  # same as tftp from 'next server
    }

    host node-22 {
    # Use your node MAC address
    hardware ethernet       00:11:09:32:E5:0E;
    # Give your slave a static IP
    fixed-address           10.0.0.22;
    option host-name        "node-22";
    option option-150       "/grub/menu-10.0.0.22.lst";
    option root-path        "/diskless/10.0.0.22";  # same as tftp from 'next server
    }

    host node-23 {
    # Use your node MAC address
    hardware ethernet       00:11:09:32:E5:0E;
    # Give your slave a static IP
    fixed-address           10.0.0.23;
    option host-name        "node-23";
    option option-150       "/grub/menu-10.0.0.23.lst";
    option root-path        "/diskless/10.0.0.23";  # same as tftp from 'next server
    }

    host node-24 {
    # Use your node MAC address
    hardware ethernet       00:11:09:32:E5:0E;
    # Give your slave a static IP
    fixed-address           10.0.0.24;
    option host-name        "node-24";
    option option-150       "/grub/menu-10.0.0.24.lst";
    option root-path        "/diskless/10.0.0.24";  # same as tftp from 'next server
    }

    host node-25 {
    # Use your node MAC address
    hardware ethernet       00:11:09:32:E5:0E;
    # Give your slave a static IP
    fixed-address           10.0.0.25;
    option host-name        "node-25";
    option option-150       "/grub/menu-10.0.0.25.lst";
    option root-path        "/diskless/10.0.0.25";  # same as tftp from 'next server
    }

    host node-30 {
    # Use your node MAC address
    #hardware ethernet      00:11:09:32:E5:0E;
    # Give your slave a static IP
    fixed-address           10.0.0.30;
    option host-name        "node-30";

    option option-150       "/grub/menu_node.lst";
    option root-path        "/diskless/10.0.0.30";  # same as tftp from 'next server
    }
    }
}
    # IP phone
    group { 
    host ip-phone222.0.0.10.IN-ADDR.ARPA {
        hardware ethernet 0:7:5:78:8:d7;
        fixed-address 10.0.0.222;
    } 
    }

    # other servers
    group {
    host mail.cluster.linux  {
        hardware ethernet 0:3:48:24:4:6d;
        fixed-address 10.0.0.2;
    } 

    host gw-inet.cluster.linux  {
        hardware ethernet 0:2:18:5:5b:bd;
        fixed-address 10.0.0.254;
    }
    }

################### dhcpd's example ###################### 

# No service will be given on this subnet, but declaring it helps the 
# DHCP server to understand the network topology.
subnet 10.0.10.0 netmask 255.255.255.0 {

    # This declaration allows BOOTP clients to get dynamic addresses,
    # which we don't really recommend.
#    range dynamic-bootp 10.254.239.40 10.254.239.60; # not recomended
    option broadcast-address 10.254.239.31;
    option routers rtr-239-32-1.example.org;

}

################### shared-network ###################
# The shared-network block is optional and should be used for IPs
# you want to assign that belong to the same network topology.

############# Example shared network ######################
# You can declare a class of clients and then do address allocation
# based on that.   The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.
class "oof" {
    match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
}
shared-network 224-29 {
    subnet 10.17.224.0 netmask 255.255.255.0 {
    option routers rtr-224.example.org;
    }
    subnet 10.0.29.0 netmask 255.255.255.0 {
    option routers rtr-29.example.org;
    }

    pool {
    allow members of "oof";
    range 10.17.224.10 10.17.224.250;
    }
    pool {
    deny members of "oof";
    range 10.0.29.10 10.0.29.230;
    }
}

Бездискові станції будуть намагатись звантажити вказаний опцією filename файл з серверу, вказаного адресою IP у next-server. Це має бути сервер TFTP, зазвичай він розташований там же, де й сервер DHCP. Шлях до файлу вказується відносно директорії /diskless/boot (яка, відповідно, вказується параметром -s для серверу tftp).

В середені розділу host, параметр hardware ethernet визначає адресу MAC, а fixed-address встановлює призначену постійну адресу IP, що відповідає цій адресі MAC. Параметр host-name призначає вузлу ім’я.

Додаткові налаштування для автоматичного оновлення DNS

Щоб згенерувати ключ, для підпису, виконуємо:

# dnssec-keygen -a HMAC-MD5 -b 256 -n USER DNS-UPDATER

або інші:

   -a algorithm: RSA | RSAMD5 | DH | DSA | HMAC-MD5
   -b key size, in bits:
       RSA:            [512..4096]
       DH:             [128..4096]
       DSA:            [512..1024] and divisible by 64
       HMAC-MD5:       [1..512]
   -n nametype: ZONE | HOST | ENTITY | USER

Детальніше дивіться ?dnssec-keygen.8, ?dnssec-signzone.8, ?dnssec-makekeyset.8, ?dnssec-signkey.8.

Приклад налаштування BIND для автоматичного оновлення зон за допомогою DHCP:

$ cat /etc/bind/named.conf
//access list:
//any, localhost, localnets, none
acl mynet {
           10.0.0.0/24;
       };

options {
       version         "9.2.2";
       directory       "/var/bind";
       //notify        yes;
       also-notify   10.0.0.2;
       recursion       yes;
       allow-recursion {
           mynet;
           };
       transfer-format many-answers;
       transfers-in            10;
       transfers-out           10;
       transfers-per-ns        2;
       //transfers-source      10.0.0.1;       //local interface

       // uncomment the following lines to turn on DNS forwarding,
       // and change the forwarding ip address(es) :
//      forward                 first;  //only;
//      forwarders {
//              1.0.0.1;
//       };

       // to allow only specific hosts to use the DNS server:
       allow-query {
               10.0.0.0/24;
       };
       allow-transfer {
               10.0.0.2;
       };
       blackhole {
               10.0.0.100;
       };

       //listen-on-v6 { none; };
       listen-on port 53 {
           10.0.0.1;
           };

       // if you have problems and are behind a firewall:
       // query-source address * port 53;
       pid-file "/var/run/named/named.pid";
};

/*
security key for DNS
to create in BIND9 key tipe:
# dnssec-keygen -a HMAC-MD5 -b 256 -n USER DNS-UPDATER
*/

include "/etc/bind/dns-updater.key";

include "/etc/bind/rndc.key";

zone "." IN {
       type hint;
       file "named.ca";
};

zone "localhost" IN {
       type master;
       file "pri/localhost.zone";
       allow-update { none; };
       notify no;
};

zone "linux.kindom" IN {
       type master;
       file "pri/linux.kindom.zone";
       allow-update { key DNS-UPDATER; };
       notify yes;
};

zone "0.0.127.in-addr.arpa" IN {
       type master;
       file "pri/0.0.127.zone";
       allow-update { none; };
       notify no;
};

zone "0.0.10.in-addr.arpa" IN {
       type master;
       file "pri/0.0.10.zone";
       allow-update { key DNS-UPDATER; };
       notify yes;
};

logging {
       channel update_debug {
               file "/var/log/bind/update-debug.log";
               severity  debug 3;
               print-category yes;
               print-severity yes;
               print-time     yes;
               };
       channel security_info    {
               file "/var/log/bind/named-auth.info";
               severity  info;
               print-category yes;
               print-severity yes;
               print-time     yes;
               };

       category update { update_debug; };
       category security { security_info; };
};

Детально: ?Налаштовуємо DNS.

Запуск серверу

Якщо у вас Gentoo, то перед завантаженням DHCP можна відредагувати конфігурацію самого сервісу в файлі /etc/conf.d/dhcp, для запуску його в ізольованому місці:

$ cat /etc/conf.d/dhcp
# Configure which interface or interfaces to for dhcp to listen on
# list all interfaces space separated.
IFACE="eth0"

# Insert any other options needed
DHCPD_OPTS="-q"

# If you wish to run dhcp in a chroot, run:
# ebuild /var/db/pkg/net-misc/<dhcp version>/<dhcp-version>.ebuild config
# and un-comment the following line.
# You can specify a different chroot directory but MAKE SURE it's empty.
CHROOT="/chroot/dhcp"

# If you need name resolution under a chroot, uncomment the following:
export LD_PRELOAD="/usr/lib/libresolv.so /usr/lib/libnss_dns.so"

та виконати:

ebuild /var/db/pkg/net-misc/dhcp-3.0.1-r1/dhcp-3.0.1-r1.ebuild config

Увага, потрібно вказати версію саме того DHCP, що встановлений!

Тепер нарешті настав час запуску DHCP.

# /etc/init.d/dhcp start

Для автоматичного завантаження сервера при старті, виконуємо:

# rc-update add dhcp default

Коли ви змінюєте конфігурацію, сервер потрібно перевантажити:

# /etc/init.d/dhcpd restart

Налаштування клієнтських комп'ютерів на конфігурацію з допомогою DHCP

Дуже важливо, щоб була ввімкнена динамічна конфігурація ядра, інакше потрібно перезібрати ядро з його підтримкою див: Компіляція ядра GNU/Linux. Додатково додайте:

Networking  --->
   [*] Networking support
        Networking options  --->
           ..............
           [*]   IP: kernel level autoconfiguration
           [*]     IP: DHCP support
           [*]     IP: BOOTP support
           [*]     IP: RARP support
           .............
File systems  --->
   .........
   Network File Systems  --->
      <*> NFS file system support
      [*]   Provide NFSv3 client support
      [*]     Provide client support for the NFSv3 ACL protocol extension
      [ ]   Provide NFSv4 client support (EXPERIMENTAL)
      [ ]   Allow direct I/O on NFS files (EXPERIMENTAL)
      ..........
      [*] Root file system on NFS 

Детальніше можна прочитати у Встановлення бездискових робочих станцій (вузлів)

Можливі помилки та шляхи їх вирішення

Якщо отримуєте помилку:

no free leases on subnet LOCAL-NET

значить сервер відповідає вірно, але погано налаштований.

Читаємо логи, аналізуємо і виправляємо :-)

Література

  • RFC 2131 R. Droms, "Dynamic Host Configuration Protocol", 3/97.
    Supersedes RFC 1541 and RFC 1531.
    Note that some of the references in this FAQ are to RFC 1541: I'll update them when I get a chance.
    -- Author
  • RFC 1534 R. Droms, "Interoperation Between DHCP and BOOTP", 10/08/1993.
  • RFC 2132 S. Alexander, R. Droms, "DHCP Options and BOOTP Vendor Extensions", 3/97. Supersedes RFC 1533.
  • RFC 2136, RFC 2137, RFC 2300

--Svyat 23:32, 27 серп 2005 (EEST)