DHCP – serwer dla domu i dla firmy

Dzisiaj już nikt nie będzie biegał z kartką papieru, na której ma wypisane adresy IP i nazwy komputerów, któremu jaki przydzielić. Tym wszystkim ma zarządzać serwer DHCP. Podpinamy komputer do sieci, parę sekund i już posiada swój adres IP. Teoretycznie zasada działania i konfiguracji serwera DHCP jest prosta – masz tu daną pule adresów, i jak znajdziesz nowy sprzęt, masz mu przypisać kolejno wolny numer. Jednak praktyka swoje pokazuje.

W tym artykule postaram się pokazać jak skonfigurować i zarządzać serwerem DHCP opartego na systemie Debian Lenny.

Na początku sucha teoria.

Abyśmy się mogli wziąć za praktykę, trzeba liznąć trochę teorii, aby wiedzieć co z czym się je. Na początku zajmiemy się czysto plikiem konfiguracyjnym serwera DHCP, o dźwięcznej nazwie dhcpd.conf. Jego lokalizacja to /etc/dhcp3/dhcpd.conf.

Zaraz po zainstalowaniu serwera ten plik nie jest pusty. Zawiera w sobie skonfigurowany interfejs lo oraz eth0. Na sam początek pokażę, jak wygląda przykładowy, poprawnie skonfigurowany wpis:

subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.10 192.168.0.30;
option domain-name-servers 194.204.152.34 , 194.204.159.1;
option domain-name "tm.net.my";
option routers 192.168.0.1;
option broadcast-address 192.168.0.255;
default-lease-time 86400;
max-lease-time 86400;
}

Jak widzimy, trochę poleceń i literek jest. Jednak nie ma co się martwić, wszystko po kolei omówię.

  • Subnet – określa adres danej sieci
  • netmask – określa maskę podsieci danej sieci
  • range – określa zakres adresów IP, jakie będą przydzielane
  • option domain-name-servers – adresy serwerów DNS
  • option domain-name – nazwa domeny
  • option routers – określa adres routera sieciowego
  • option broadcast-address – określa adres broadcastu w naszej sieci
  • default-lease-time – domyślny czas dzierżawy adresów IP (wyrażony w sekundach)
  • max-lease-time – maksymalny czas dzierżawy adresów IP (wyrażony w sekundach)

Jednak to jest póki co tylko omówienie konfigu serwera DHCP. Teraz przyszła pora na zapoznanie się z plikiem interfaces. Ten plik odpowiada za konfigurację kart sieciowych w serwerze. Jego lokalizacja to /etc/network/interfaces. Przykładowo wpis konfigurujący kartę sieciową może wyglądać tak:

auto eth0
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
gateway 192.168.1.1
network 192.168.1.0

Jest tu mniej pisania niż w tamtym pliku, ale i też nie wiadomo co do czego. Otóż:

  • auto eth0 – podnosi dany interfejs
  • iface eth0 inet static – określa, czy adres IP ma być przypisywany statycznie czy dynamicznie (tutaj akurat ma być statycznie)
  • address – adres IP danego interfejsu sieciowego
  • netmask – maska podsieci
  • gateway – bramka
  • network – określa, do której sieci ma przynależeć dana karta sieciowa. Ta opcja będzie nam bardzo potrzebna przy konfiguracji DHCP.

Tak wygląda wpis dla karty sieciowej, której adres IP przypisywany jest statycznie. Zaś dla karty, która ma do wykorzystania DHCP, wpis będzie wyglądał tak:

auto eth3
iface eth3 inet dhcp

…i tyle wystarczy, aby system wiedział, że ma pobrać adres IP z serwera.

Konfigurujemy.

Teorii byłoby na tyle. Pora zejść na ziemię i wziąć się do roboty. Jednak nim zaczniemy konfigurować, dla celów testowych wymyślimy sobie nasze środowisko pracy.

Mamy komputer, na którym będzie stał serwer DHCP. Ok. Debian zainstalowany, wszystko piknie, karty włożone. Posiadamy 3 komputery: komputer A, komputer B oraz komputer C. I teraz:

  • komputer A ma pracować w podsieci 192.168.0.0, czas dzierżawy ma wynosić jeden dzień oraz liczba sztuk adresów IP na wynosić 10.
  • komputer B ma pracować w podsieci 192.168.2.0, czas dzierżawy ma wynosić 2 godziny oraz liczba sztuk adresów IP na wynosić 3.
  • komputer 3 ma mieć na stałe ustawione przez DHCP adres IP 192.168.5.15 i adres MAC tej karty jest 12:00:11:00:11:00.
  • Mamy wszystko, co jest nam potrzebne. Przystępujemy do instalacji i konfiguracji.
  1. W konsoli wpisujemy aptitude install dhcp3-server
  2. Po instalacji przechodzimy do edycji pliku dhcpd.conf poleceniem nano /etc/dhcp3/dhcpd.conf
  3. Kasujemy całą jego bieżącą zawartość. Na początku konfigurujemy komputer A. Piszemy:
    #komputer A
    
    subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.10 192.168.0.29;
    option domain-name-servers 194.204.152.34 , 194.204.159.1;
    option domain-name "tm.net.my";
    option routers 192.168.0.1;
    option broadcast-address 192.168.0.255;
    default-lease-time 86400;
    max-lease-time 86400;
    }

    Ok. Komputer A gotowy. Teraz pora na komputer B:

    #komputer B
    
    subnet 192.168.2.0 netmask 255.255.255.0 {
    range 192.168.2.10 192.168.2.12;
    option domain-name-servers 194.204.152.34 , 194.204.159.1;
    option domain-name "tm.net.my";
    option routers 192.168.0.1;
    option broadcast-address 192.168.0.255;
    default-lease-time 7200;
    max-lease-time 7200;
    }

    Gitara. Mamy dwa komputery z głowy. Przy trzecim będzie o wiele mniej pisania:

    
    #komputer C
    
    host komputer_c {
    hardware ethernet 12:00:11:00:11:00;
    fixed-address 192.168.5.15;
    }

Teraz wciskamy klawisz F2, następnie T i Enter. Plik został zapisany. Pora uruchomić serwer DHCP. Wpisujemy: /etc/init.d/dhcp3-server start.

Gdy serwer DHCP działa to wydajemy polecenie /etc/init.d/dhcp3-server restart.

Jeżeli wszystko wpisaliśmy poprawnie, to serwer bez problemu się uruchomi. Gdy jednak popełnimy gdzieś błąd, naszym oczom ukaże się komunikat:

Monit błędu - screen
Akurat ten monit informuje nas o tym, że zamiast subnet napisaliśmy ubnet i przez to serwer DHCP nie może zostać uruchomiony.

Konfiguracja serwerów DNS.

Jeżeli korzystamy z serwerów DNS, to musimy ich adresy wpisać do pliku resolv.conf.

  1. Klepiemy polecenie nano /etc/resolv.conf
  2. W pliku wpisujemy adresy IP naszych serwerów DNS.

UWAGA!!! Jeżeli system sam sobie uzupełnił ten plik, to pozostawiamy go w taki stanie, jakim jest.

Konfiguracja kart sieciowych.

Konfiguracja samego serwera DHCP to dopiero połowa drogi. Musimy jeszcze odpowiednio skonfigurować interfejsy kart sieciowych. Zakładamy, że eth0 będzie dla komputera A, eth1 dla B Do roboty.

Wpisujemy nano /etc/network/interfaces.

Interfejs lo zostawiamy w spokoju. Wszystkie linie, które znajdują się po deklaracji interfejsu lo usuwamy i wpisujemy:

#eth0

auto eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
gateway 192.168.1.1

#eth1

auto eth1
iface eth1 inet static
address 192.168.2.1
netmask 255.255.255.0
network 192.168.2.0
gateway 192.168.1.1

No dobra a gdzie deklaracja dla komputera C ? Nie trzeba. Obojętnie, do której karty go podłączymy, to jeżeli system wykryje podany MAC, to przypisze mu automatycznie ten adres IP.

Jednak taki konfig nie będzie działał. Nie wiem czemu, ale w takiej postaci Debian podczas restartu ustawień połączeń nie może podnieść żadnego interfejsu. U mnie w domowym serwerze też tak jest. Rozwiązałem ten problem trochę w dziwaczny sposób. Wstawiłem pomiędzy tymi interfejsami nieistniejący interfejs i ustawiłem go tak, aby adres IP pobierał z DHCP. Podczas restartu Debian nie wysypuje się na całym konfigu, ale jeżeli dojdzie do interfejsu, który nie istnieje, to po prostu wyrzuci w stosunku do niego błąd i zacznie dalej działać. Tak iż do tej konfiguracji, która mamy dopisujemy jeszcze:

auto eth2
iface eth2 inet dhcp

Całość ma wyglądać tak:

#eth0

auto eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
gateway 192.168.1.1

#eth2 – wpis wstawiony w celu zapewnienia zgodności

auto eth2
iface eth2 inet dhcp

#eth1

auto eth1
iface eth1 inet static
address 192.168.2.1
netmask 255.255.255.0
network 192.168.2.0
gateway 192.168.1.1

Zapisujemy plik i wpisujemy polecenie: /etc/init.d/networking restart.

UWAGA!!! Jeżeli zarządzamy serwerem zdalnie np. poprzez putty, to po wykonaniu tego polecenia stracimy połączenie z serwerem.

UWAGA!!! Niekiedy Debian po wydaniu tego polecenia nie odświeży ustawień interfejsów sieciowych. Tak się dzieje między innymi u mnie, aby nowe zmiany zostały wprowadzone, musimy ponownie uruchomić system.

Sprawy programowa mamy już załatwione. Teraz tylko wszystko podpiąć kablami i ma działać.

Jaki sprzęt pod to?

Powiem tak. I ten najstarszy, i ten najnowszy, jednym zdaniem każdy.

Podsumowanie.

Przedstawiłem tutaj, nie ukrywając podstawową konfigurację serwera DHCP. Zachęcam do zgłębiana technik konfiguracji tego serwera.

Komentarze (RSS)
Komentarze są prywatnymi opiniami dodających je osób. Prosimy o zachowanie kultury wypowiedzi. Komentarze obraźliwe oraz obniżające poziom serwisu będą usuwane. Więcej w regulaminie komentowania.

15 komentarzy

  1. marek 29 grudnia 2010 o godz. 5:09 #

    To co być powinno – solidne podstawy jak zrobić coś konstruktywnego. Brawo i liczę na więcej :)

  2. zyga 29 grudnia 2010 o godz. 10:40 #

    wszystko mi sie podobalo, do momentu: "aby nowe zmiany zostały wprowadzone, musimy ponownie uruchomić system" – to jest jakis windows czy co ?

    • Morfeusz888 29 grudnia 2010 o godz. 11:15 #

      To nie Windows, to Debian.

      Tak jak pisałem, niekiedy Debian po wydaniu polecenia /etc/init.d/networking restart po prostu nie odświeża interfejsów sieciowy. Mnie się to kilka razy już zdarzyło i nawet powtórne wydane tego polecenia nic nie daje. W takiej sytuacji pozostaje nam tylko reboot.

      • Michał Bielawski 29 grudnia 2010 o godz. 18:05 #

        Można jeszcze pobawić się w restart udeva i/lub przeładowanie modułów od kart sieciowych. Jeszcze mi się nie zdarzyło, żebym musiał rebootować debiana po grzebaniu w konfiguracji sieci.

      • stefanek 31 grudnia 2010 o godz. 16:09 #

        Można jeszcze użyć polecenia dhclient lub też ifdown ethx && ifup ethx (jeśli korzystamy z NetworkManagera nie zadziała to, ale wtedy możemy odświeżyć z poziomu interfejsu NM)

  3. azariel 29 grudnia 2010 o godz. 10:56 #

    Browar dla autora !

  4. tomii 29 grudnia 2010 o godz. 13:07 #

    Może się mylę ale czy taki wpis:

    "address 192.168.0.1

    netmask 255.255.255.0

    network 192.168.0.0

    gateway 192.168.1.1"

    jest poprawny chodzi o gateway z ip z innej podsieci niz address ?

  5. xeen 29 grudnia 2010 o godz. 20:42 #

    apropo tego reboot systemu. są dwie kwestie:

    1. Debian wrazliwy jest na karty sieciowe

    2. z tym zapamietaniem zmian, w jakims pliku zmienialo sie jedna opcje- tylko za cholere nie pamieam jaka, w kazdym badz razie ten plik czy katalgo z tym plikiem zawieral w sobie DEFAULTS. probowalem to wygooglac ale sie nie udalo

  6. Bastian 30 grudnia 2010 o godz. 15:48 #

    Popraw konfigurację dla Komputera #A bo w zakresie portów jest błąd.

  7. Bastian 30 grudnia 2010 o godz. 15:49 #

    Znaczy się adresów ;)

  8. rozie 31 grudnia 2010 o godz. 13:39 #

    Szczerze mówiąc nie widzę sensu stosowania w domu czy małej firmie dhcpd. Dnsmasq zrobi to samo prościej i wygodniej, a poza tym daje parę fajnych funkcji typu cache dns gratis.

  9. rozie 31 grudnia 2010 o godz. 20:37 #

    @sirmacik: W sumie nie bardzo jest co opisywać, bo wszystko sprowadza się do przejrzenia konfiga i odhashowania/uzupełnienia odpowiednich opcji. Mój aktualny konfig w domu ma 5 linii (tzn. tyle jest niezahashowanych). W tym jeden bind IP do MAC i wielkość cache DNS. Ale zobaczymy, jak czas pozwoli i czy wena natchnie…

(wymagane)
URI
Uwaga! Niektóre komentarze, m.in. te dodane przez niezalogowanych i nowych użytkowników, są ręcznie moderowane. Jeśli Twój komentarz nie ukaże się od razu, nie dodawaj go ponownie, tylko cierpliwie poczekaj na akceptację.

Literówki najlepiej zgłaszać jabberem: michuk@jakilinux.org lub kocio@jabber.org!

W komentarzach możesz używać prostych znaczników HTML. Przykłady:
  • Link: <a href="jaklinux.org">Linux dla każdego</a>,
  • Wytłuszczenie: <strong>tekst pogrubiony</strong>,
  • Kursywa: <em>tekst pochylony</em>,
  • Przekreślenie: <del>tekst przekreślony</del>,
  • Kod: <code>printf("blok kodu");</code>,
  • Cytat: <blockquote>cytat</blockquote>
Uwaga: jeśli dodasz nieznany znacznik, będzie on niewidoczny, gdyż system filtruje takie znaczniki.