baseciq.org

DHCP

Dynamic Host Configuraton Protocol (dynamiczny protokół konfiguracji hostów) jest protokołem umożliwiającym zdalną konfiguracje protokołu TCP/IP. Praktycznie każdy system operacyjny posiadający obsługę TCP/IP oferuje możliwość pobrania konfiguracji TCP/IP poprzez DHCP, czyli ustalenia: adresu IP, maski podsieci, domyślnej bramy w sieci, serwerów DNS, domeny w jakiej hosty pracują, oraz wielu innych parametrów. W tym tekście opiszę jak skonfigurować prosty serwer DHCP, dzięki któremu będziemy mogli automatycznie przydzielać adresy IP w sieci lokalnej.

W praktyce DHCP jest przydatne chociażby do tego, iż M$ Windows po zainstalowaniu karty sieciowej automatycznie sobie pobieże parametry konfiguracji, albo będzie można sobie ustalać która osoba jaki adres IP ma posiadać w naszym lanie.

Zacznijmy konfigurować. Wbrew pozorom konfiguracja dhcp jest bardzo prosta. Plik konfiguracyjny (/etc/dhcpd.conf) nie jest skomplikowany.

Na początek zdefiniujmy podsieć na w której ma działać serwer DHCP - parametry te muszą się zgadzać z parametrami karty sieciowej na której ma pracować serwer. Jeżeli nasza sieć lokalna to 192.168.1.0/255.255.255.0 (adresy od 192.168.1.0 do 192.168.1.255) definujemy ją w taki sposób:

subnet 192.168.1.0 netmask 255.255.255.0 {
#
# Tutaj wstawiamy opcje tej podsieci, ale to zaraz ;-)
#
}

Tutaj mała uwaga - znakiem # poprzedzamy wszelakie komentarze. Oki teraz opcje tej podsieci:

range <adres ip startowy> <adres ip koncowy> - komendą range definujemy początkowy i końcowy adres ip jaki może przydzielić DHCP. Np. range 192.168.1.100 192.168.1.200 - spowoduje że serwer DHCP będzie przydzielał adresy od 192.168.1.100 do 192.168.1.200.

default-lease-time <czas w sekundach> - okres ważności dzierżawy adresu IP liczony w sekundach. Poinformuje to komputer który skorzysta z DHCP o tym ile czasu spokojnie może ten adres IP używać. Przykładowo dzierżawa na jeden dzień to: default-lease-time 86400.

option domain-name "domena" - ta opcja informuje o tym w jakiej domenie pracują komputery w naszej sieci. Przykładowy wygląd tej opcji to: option domain-name "wiosenna.com".

option domain-name-servers <adres ip> [, adres ip] - tutaj definiujemy adres ip serwerów DNS jakie mają używać komputery w naszej sieci lokalnej. Np. option domain-name-servers 192.168.1.1, lub option domain-name-servers 194.204.159.1, 194.204.152.34.

option subnet-mask <maska podsieci> - maska podsieci jaką ma ustawić sobie komputer kliencki. Np. option subnet-mask 255.255.255.0.

option broadcast-address <adres rozgłoszeniowy sieci> - adres rozgłoszeniowy sieci (broadcast). Np. dla sieci 192.168.1.0/255.255.255.0 wygląda to tak: option broadcast-address 192.168.1.255.

option routers <domyślna brama> - adres domyślnej bramy w podsieci (gateway'a). Np. u mnie jest to 192.168.1.1, więc wpisuje: option routers 192.168.1.1.

Jak widać są to bardzo podstawowe parametry które przydadzą się w normalnych nieskomplikowanych sieciach. Konfiguracja DHCP może być bardzo rozbudowana. Jeżeli szukacie bardziej wyszukanych opcji polecam poczytać dokumentacje od DHCP. Oki, teraz stwórzmy przykładowy plik konfiguracyjny który możemy napisać na podstawie powyższych parametrów (po każdej opcji podajemy średnik):

# sieć 192.168.1.0/255.255.255.0
subnet 192.168.1.0 netmask 255.255.255.0 {
    # domyślnie przydzielamy adresy 192.168.1.100-199:
    range 192.168.1.100 192.168.1.199;
    # na jeden dzień
    default-lease-time 86400;
    # poinformujmy że hosty będą korzystać z domeny ultra.net.pl
    option domain-name "ultra.net.pl";
    # niech używają naszego routera jako serwera DNS:
    option domain-name-servers 192.168.1.1;
    option routers 192.168.1.1;
    # i dodatkowe info:
    option subnet-mask 255.255.255.0;
    option broadcast-address 192.168.1.255;
}

Więc mamy już skonfigurowaną sieć. Ale jak stworzyć wpisy dla konkretnych kart sieciowych? Tworzymy w definicji podsieci definicje hosta:

subnet 192.168.1.0 netmask 255.255.255.0 {
    #
    # Tutaj opcje globalne jakie wpisaliśmy już
    #
    
    host ranger {
        hardware ethernet 52:54:05:E1:EE:97;
        fixed-address 192.168.1.6;
    }
}

hardware ethernet - tutaj wpisujemy adres sprzętowy karty - w Windowsie możemy go odczytać po uruchomieniu komendy winipcfg (Menu Start/Uruchom), w Linuxie komendą ifconfig (karty w komputerze) lub z root'a komenda arp (wyświetli wszystkie karty które "słyszy" w sieci nasz komputer). W opcji fixed-address podajemy adres ip dla danego komputera. Oczywiście w definicji hosta możemy także użyć którejś z opcji globalnych, np. możemy podać konkretnemu komputerowi żeby używał innego routera w sieci albo innego serwera DNS:

subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.100 192.168.1.199;
    default-lease-time 86400;
    option domain-name "ultra.net.pl";
    option domain-name-servers 194.204.159.1, 194.204.152.34;
    option routers 192.168.1.1;
    option subnet-mask 255.255.255.0;
    option broadcast-address 192.168.1.255;
    host ranger {
        hardware ethernet 52:54:05:E1:EE:97;
        fixed-address 192.168.1.6;
        option domain-name-servers 192.168.1.1;
        option routers 192.168.1.2;
    }
}

Uf. A co jeżeli mamy dwie karty sieciowe? Otóż wystarczy stworzyć poprostu drugą definicje podsieci.

Uruchamianie (w Slackware) DHCP polega na wpisaniu z root'a komendy 'dhcpd', 'killall -9 dhcpd' aby go zatrzymać. Jeżeli np. mamy w serwerze dwie karty sieciowe i tylko na jednej sieci chcemy uruchomić DHCP, to poprostu wpisujemy 'dhcpd eth0' czy też 'dhcpd eth1'. Aby serwer DHCP się uruchamiał automagicznie podczas startu systemu wpisujemy do /etc/rc.d/rc.local:
/usr/sbin/dhcpd (tutaj ewentualnie parametry)
W RedHatach i jemu podobnych:

chkconfig --level 345 on; chkconfig --level 0126 off

A! W RH uruchamiamy DHCP w taki sposób:

/etc/rc.d/init.d/dhcpd (start|stop|restart)

W sumie to chyba wszystko tak na początek. Jeżeli chcesz więcej się nauczyć i rozumiesz do czego służy DHCP polecam komendę 'man dhcpd.conf' ;).