Co klient DHCP uważa za „najlepszą” odpowiedź?


13

Mamy sale szkoleniowe, w których normalnie zainstalowany jest system Windows XP (przez PXE). „Normalna” infrastruktura DNS / DHCP to serwery Windows. Pokój szkoleniowy ma swoją własną sieć VLAN (inną niż serwery Windows), więc najbardziej prawdopodobne jest, że pomocnik IP dla żądań DHCP jest aktywny na routerze Cisco, do którego podłączone są wszystkie komputery z tego pokoju.

Teraz chcieliśmy przekonwertować niektóre komputery PC na system Linux. Pomysł był następujący: umieść własnego laptopa z serwerem DHCP w sieci VLAN pokoju i zastąp „normalną” odpowiedź DHCP. Pomysł polegał na tym, że powinno to działać, ponieważ bezpośrednio podłączony serwer DHCP w tej sieci VLAN powinien mieć szybszy czas odpowiedzi niż „normalny” serwer DHCP znajdujący się w pewnej odległości od tej sieci VLAN.

Okazało się, że to nie zadziałało. Aby działało, musieliśmy ręcznie zwolnić dzierżawę oryginalnego serwera DHCP.

Na laptopie widzieliśmy klienta żądającego adresu IP i „nasz” dhcp wysyłał NACK do żądania IP systemu Windows, zanim zaoferowaliśmy własną odpowiedź.

Stare pytanie: Dlaczego to nie zadziałało zgodnie z oczekiwaniami? Co sprawia, że ​​komputer odzyskuje dawną dzierżawę?

Aktualizacja 2012-08-08:

Problem odzyskiwania został wyjaśniony w DHCP-RFC. To wyjaśnia, dlaczego komputer odzyskuje dawną dzierżawę.

Teraz zwalniamy adres IP z serwera Windows-DHCP przed kolejną próbą.

Znowu - wygrywa serwer Windows-DHCP.

Podejrzewam, że istnieje jakiś algorytm dla klienta dhcp, który określa „najlepszą” odpowiedź dhcp dla klienta. Nowe pytanie brzmi:

Jak klient wybiera „najlepszą” odpowiedź?


gdzie zwalniasz adres IP? w kliencie Windows lub w agencie rozruchowym PXE?
longneck

@ Longneck musieliśmy zwolnić adres na serwerze Windows-DHCP, aby działał.
Nils,

Dziwny sposób na wstawienie nowego pytania, mam jednak nadzieję, że to rozwiążesz
Daniel Li

Odpowiedzi:


4

To, jak klient reaguje na wiele odpowiedzi DHCP, zależy od dostawcy, nawet oprogramowania układowego.

Warianty, które widziałem przez lata to:

1) Zaakceptuj pierwszy, niezależnie od tego, czy jest to ACK czy NACK.

2) Weź pierwszą ACK, całkowicie zignoruj ​​NACK.

3) Weź ostatnie otrzymane potwierdzenie ACK w ustalonym przedziale czasu (zwykle 5–10 sekund).

Przykład: kilka lat temu mieliśmy problemy z urządzeniami wielofunkcyjnymi Ricoh.
Mieliśmy 2 serwery DHCP. Jeden podał adresy, drugi tylko dodatkowe opcje DHCP. Drugi serwer zawsze odpowiedział jako pierwszy.
Używany wariant Ricoh 1), nawet jeśli pierwsza oferta zawierała tylko opcje DHCP. Ricoh zmienił go na wariant 2) z aktualizacją oprogramowania układowego po tym, jak im wyjaśniliśmy problem.


O OFFERpakietach decyduje system kliencki. ACKa NACKpakiety są wysyłane tylko w odpowiedzi na a REQUEST, które pojawia się dopiero po tym, jak klient „zdecyduje”, którą ofertę wybrać. To całkiem fajny błąd w drukarkach!
Shane Madden

@ShaneMadden To prawda, ale widziałem wiele przypadków klientów wysyłających żądanie w odpowiedzi na OBIE oferty, a następnie działających na odpowiedziach, jak opisałem. Minęło trochę czasu, odkąd przyjrzałem się temu dogłębnie. Wyraźnie pamiętam winę za to NT4, W2K i XP. Ricoh też to zrobił. Uruchomili jądro Linux i stos sieciowy.
Tonny

9

Zakładając, że router nadal działa jako przekaźnik DHCP i przekazuje żądanie do oryginalnego serwera, powodem tego jest po prostu dlatego, że serwer DHCP systemu Windows powiedział mu, aby poszedł naprzód i używał adresu IP. W tym przypadku DHCPNACK z nowego serwera jest nieistotny, ponieważ klient DHCP rozważy wszystkie odpowiedzi, a ponieważ otrzymał ofertę z Windows DHCP DHCP, jest bardzo zadowolony z jego użycia.

PC: Oh hi world, czy mogę używać 192.168.1.123?

Nowy DHCP: Mówię „nie”.

Old DHCP: Mówię tak.

PC: Ktoś powiedział tak! Słodko, użyję tego!


Po zimnym uruchomieniu komputera rozmowa zaczyna się od „mój MAC to XYZ - proszę podać adres IP”. Zatem oba serwery DHCP oferują adresy IP ... jedyną różnicą jest to, że ma aktywną dzierżawę na jednym z serwerów - ale to tylko perspektywa serwera.
Nils,

1
nie, jeśli komputer miał już adres IP. jeśli wcześniej miał adres IP przypisany przez serwer DHCP, najpierw poprosi o jego użycie, zanim poprosi o inny adres.
longneck

@ Longong, gdzie to IP będzie przechowywane na komputerze?
Nils,

z czubka mojej głowy, nie wiem. ale właściwym sposobem, aby to wyczyścić, jest użycie ipconfig / release
longneck

3
@longneck - operacja pyta w środowisku PXE, w którym zakładamy, że BIOS rozruchowy nie pamięta o poprzednich rozruchach lub adresach IP
Mark Henderson

3

Jeśli nic innego nie pomoże - RTFM (przeczytaj dokładną instrukcję). W tym przypadku pierwszy był hitem.

RFC 2131 opisuje operacje DHCP.

Sekcja 1.6 stanowi, że DHCP musi :

Zachowaj konfigurację klienta DHCP podczas ponownego uruchamiania serwera, a jeśli to możliwe, klientowi DHCP należy przypisać te same parametry konfiguracyjne pomimo ponownego uruchomienia mechanizmu DHCP,

Ciekawym pytaniem jest, w jaki sposób cel ten osiąga się u klienta, który nie ma wiedzy o swojej przeszłości. Rozdział 3.2 przedstawia:

3.2 Interakcja klient-serwer - ponowne użycie wcześniej przydzielonego adresu sieciowego

Jeśli klient pamięta i chce ponownie wykorzystać wcześniej przydzielony
adres sieciowy, może zdecydować o pominięciu niektórych kroków
opisanych w poprzedniej sekcji. Schemat osi czasu na rysunku 4
pokazuje relacje czasowe w typowej interakcji klient-serwer dla klienta wykorzystującego wcześniej przydzielony adres sieciowy.

  1. Klient rozgłasza komunikat DHCPREQUEST w swojej lokalnej podsieci. Wiadomość zawiera adres sieciowy klienta w opcji „żądany adres IP”. Ponieważ klient nie otrzymał adresu sieciowego, NIE WOLNO wypełniać pola „ciaddr”. Agenci przekazywania BOOTP przekazują komunikat do serwerów DHCP, które nie znajdują się w tej samej podsieci. Jeśli klient użył „identyfikatora klienta” w celu uzyskania swojego adresu, MUSI użyć tego samego „identyfikatora klienta” w komunikacie DHCPREQUEST.

  2. Serwery ze znajomością parametrów konfiguracyjnych klienta odpowiadają klientowi komunikatem DHCPACK. Serwery NIE WOLNO sprawdzać, czy adres sieciowy klienta jest już zajęty; w tym momencie klient może odpowiedzieć na komunikaty żądania echa ICMP.

Tak więc serwer DHCP posiadający aktywną dzierżawę uzyskuje pierwszeństwo poprzez użycie skrótu w protokole.

  1. Klient: DHCREQUEST (adres MAC, emisja, będzie transmitowany w lokalnej domenie rozgłoszeniowej - tutaj lokalna sieć VLAN i przez pomocnika IP do serwera Windows-DHCP)
  2. Laptop-DHCP-Server: DHCPOFFER
  3. Windows-DHCP-Server: Hej - Już cię znam - DHCPACK
  4. Klient: Och - dostałem dwie odpowiedzi. Taki, który już mnie zna. Fajnie, wezmę to

Odtąd Laptop-DHCP-Server jest ignorowany przez Klienta.

Tak więc rozwiązaniem w naszym przypadku będzie prawdopodobnie (zaktualizuję to, kiedy faktycznie to przetestujemy):

  1. Upewnij się, że klient jest wyłączony
  2. Wyłącz serwer DHCP na laptopie, fałszywy klient MAC na laptopie, żądanie DHCP
  3. Zwolnij adres IP
  4. Odzyskaj oryginalny adres IP i MAC, włącz serwer DHCP
  5. Włącz klienta i wykonaj rozruch PXE ...

3

Nowe pytanie powinno prawdopodobnie dotyczyć innego pytania - tytuł pytania w ogóle nie pasuje do większości treści pytania.

W każdym razie, w odniesieniu do tego, jak klient wybiera, z którą ofertą pójść, w przypadku, gdy nie ma bieżącej dzierżawy: to zależy od klienta, ale w każdej implementacji klienta DHCP, o której wiem, jest to prosty wyścig .

RFC 2131 obejmuje to:

Klienci DHCP mogą dowolnie używać dowolnej strategii przy wyborze serwera DHCP spośród tych, z których klient otrzymuje komunikat DHCPOFFER.

Istnieje szkic IETF , który wydaje się martwy, który dodałby konfigurowalność do procesu selekcji, a także wspomina o słabych implementacjach klienta (ponad dziesięć lat temu, ale niewiele się zmieniło):

W praktyce implementacja zasad przez większość dostawców jest tutaj bardzo prosta (np. Pierwsza otrzymana oferta lub pierwsza otrzymana oferta akceptowalna) i jest „zakodowana na stałe” (tzn. Nie można jej skonfigurować).

Posiadanie dwóch serwerów DHCP obsługujących tę samą sieć z inną konfiguracją powoduje tylko wyścigi, co nie jest pożądane z punktu widzenia niezawodności lub przewidywalności. Naprawdę nie ma powodu, dla którego nie można uzyskać jednego serwera DHCP zapewniającego to, czego potrzebujesz.


Myślisz, że „akceptowalna” oferta jest specyficzna dla dostawcy po stronie klienta dhcp? Ponieważ w naszym przypadku nie jest to „pierwsza” oferta, musi to być coś innego - zachowanie jest jednak dość deterministyczne, więc nadal uważam, że za tym stoi wspólny standard.
Nils

@Nils Czy jesteś absolutnie pewien, że serwer Windows nie odbiera odpowiedzi na klienta przed laptopem w tym samym pokoju? Intuicyjnie wydaje się, że laptop powinien wygrać ten wyścig, ale może tak nie być.
Shane Madden

Myślę, że będę musiał to prześledzić na poziomie sieci (za pomocą wireshark), aby zobaczyć, co się tam dzieje. Prawdopodobnie na lustrzanym porcie tego klienta ...
Nils,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.