Przejdź do głównej zawartości

Linux RHCSA cz.27 - Sieć - Monitoring i Analiza sieci - DNS, Rozwiązywanie problemów z klientem DNS.

Czasami pojawiają się jakieś problemy sieciowe, a informacje jakie można uzyskać z systemu są niewystarczające. Wtedy potrzebne są bardziej szczegółowe dane na temat tego, co się w sieci dzieje. W takim wypadku najlepiej zastosować narzędzie do przechwytywania pakietów, aby zobaczyć wszystkie surowe dane, jakie zostały przesłane przez interfejsy danej maszyny. Pomoże w tym narzędzie "tcpdump". 

Składnia polecenia tcpdump : # tcpdump [opcje]

Opcje polecenia tcpdump
  • -i INTERFACE         - Szczegóły dotyczące nasłuchującego interfejsu 
  • -r FILE                       - Szczegóły dotyczące przesłanych pakietów przechwycone do pliku 
  • -w FILE                      - Definicja pliku do zapisu wyjścia z konsoli 
Przykładowo chcemy sprawdzić, czy system poprawnie rozwiązuje adresy DHCP. Można monitorować połączenia z interfejsu eth0 i sprawdzić czy serwer DHCP odpowiada prawidłowo. 

Krok 1 - Uruchom polecenie tcpdump i zdefiniuj jaki interfejs ma zostać zbadany. Dane zapiszmy do pliku. 

# tcpdump –i eth0 –w pkt_capture

Krok 2 - W momencie gdy przechwytywanie pakietów jest włączone z nowej konsoli wywołajmy narzędzie dhclient wywołując nowy adres IP z serwera DHCP. 

# dhclient

Krok 3 - Po ukończeniu wywołania nowego adresu IP powróćmy do pierwszej konsoli i zatrzymajmy narzędzie tcpdump Ctrl+C. Można teraz przejrzeć informacje wywołując narzędzie tcpdump ponownie: 

# tcpdump –r pkt_capture | less


DNS KONFIGURACJA I ROZWIĄZYWANIE PROBLEMÓW 


Chociaż praca z adresami IP i przypisywanie ich do maszyn jest fajna staje się nieco niepraktyczna jeżeli musimy wykonać to na większej liczbie maszyn (serwerów i klientów). W zamian za to można zastosować nazwy hosta (nazwa systemu), które można zastosować w miejsce adresów IP. Wyszukiwanie oraz zamiana nazwy hosta na adres IP zostanie wykonane automatycznie dzięki serwerowi DNS znajdującemu się w Twojej sieci. Temat tu poruszony nie omawia całkowicie zagadnienia DNS to poruszona tu zostanie kwestia problemów po stronie klienta DNS oraz sposoby ich rozwiązywania. W systemie istnieje kilka plików odpowiedzialnych za rozpoznawanie nazw DNS i są to : 

  • /etc/sysconfig/network - zawiera nazwę hosta (host name) systemu
  • /etc/resolv.conf  - Zawiera adres IP serwera DNS
  • /etc/hosts  -  Zawiera lokalne mapowanie adresów IP z nazwami hostów
  • /etc/nsswitch.conf  - Zawiera kolejność w jakiej lokalne konta odpytują serwer DNS
Razem z tymi plikami istnieje także kilka komend jakich możemy używać po stronie klienta: 
  • hostname - Ustawia lub zwraca nazwę hosta systemu 
  • nslookup - Zapytanie o nazwę domeny w jakiej znajduję się system 
  • ping - Test połączenia pomiędzy dwoma systemami
W momencie występowania problemów z DNS zazwyczaj wiadomo z czym mamy do czynienia ponieważ informuję o tym stosowny komunikat o błędzie np.:  "Can't be resolve lub Unable to lookup". Chociaż nie zawsze dany komunikat wskazuję na rozwiązanie problemu jest już dobrą wskazówką od czego rozpocząć poszukiwania błędu i jego naprawę. 

Sprawdźmy nazwę hosta systemu na jakim się znajdujemy : 

# hostname 
RHEL01

Informacje o nazwie hosta możemy również uzyskać z pliku /etc/sysconfig/network 

# cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=RHEL01

Można edytować ten plik jeżeli chcemy zmienić nazwę hosta w systemie. Jeżeli potrzebujemy użyć pełnej nazwy kwalifikowanej domeny robimy to również w tym pliku. Można użyć nazwy RHEL01.example.com jako pełnej nazwy domenowej dla RHEL01. Jeżeli znasz nazwę hosta systemu powinno się wymusić ustawienie gdzie serwer ma wysłać zapytanie jeżeli potrzebuję znać nazwę innego hosta. Dwa pliki zawierają informację umożliwiające wyszukiwanie DNS: 
  • /etc/hosts 
Struktura pliku /etc/hosts : 

<IP> <kwalifikowana nazwa domeny> <alias> 

Zobaczmy aktualny plik /etc/hosts : 

# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 RHEL01 RHEL01 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6

Możemy zobaczyć że w tej chwili w pliku nie ma nic innego poza wpisami lokalnymi. Jeżeli jednak uruchomione zostanie małe środowisko ( pięć lub więcej maszyn ) zastosowanie /etc/hosts będzie miało większy sens. Potrzebne będzie dodanie wpisów dotyczących każdej maszyny (pamiętając iż plik ten znajduje się lokalnie na maszynie). W tym miejscu od razu widać, iż podejście takie może szybko wymknąć się z pod kontroli szczególnie jeżeli trzeba by aktualizować plik /etc/hosts na wielu maszynach. Logiczne więc staje się zastosowanie serwera DNS, do którego będą skierowane zapytania zamiast do lokalnego pliku /etc/hosts. Adres serwera DNS zawarty jest w pliku /etc/resolv.conf. Takie rozwiązanie umożliwia odpytywanie serwera DNS w taki sam sposób jak w przypadku lokalnego pliku /etc/hosts.

Zobaczmy jak aktualnie wygląda plik /etc/resolv.conf : 

# cat /etc/resolv.conf
; generated by /sbin/dhclient-script
nameserver 172.168.1.1

Wynik tego polecenia pokazuję iż maszyna RHEL01 wysyła wszystkie zapytania DNS do serwera DNS o adresie 172.168.1.1 czyli sama do siebie.  Chociaż nie mamy jeszcze zainstalowanego serwera DNS ćwiczenie to pokaże w jaki sposób skonfigurować poprawnie klienta. Plik /etc/resolv.conf może również wyglądać w taki sposób: 

# cat /etc/resolv.conf
search example.com
nameserver 192.168.1.1
nameserver 172.168.1.1

Opcja wyszukiwania określa nazwę domeny jaka będzie domyślnie przeszukiwana. Jeżeli maszyna kliencka próbuję uzyskać dostęp, a nazwa hosta nie jest kwalifikowana w postaci RHEL01.example.com oraz serwer DNS zwróci błąd informujący, że nie mógł znaleźć danego hosta spróbujmy dodać do wyszukiwania opcję domeny. Jest to typowa konfiguracja w momencie gdy maszyny klienckie należą do domeny. Po drugie zobaczmy listę serwerów jaka jest dostępna w drugim serwerze DNS jeżeli w pierwszym dana nazwa nie jest dostępna. 

Ok mamy już skonfigurowany plik /etc/hosts oraz /etc/resolv.conf. Teraz z pewnością nasuwa się pytanie gdzie klient odpytuje najpierw? Naturalnie istnieje trzeci plik definiujący w jednej linii kolejność wyszukiwania. Plik ten może być jednym z ostatnich dwóch ale zazwyczaj jest ostatnim. 

Starszy plik : 

# cat /etc/host.conf
order hosts,bind

Nowszy plik : 

# cat /etc/nsswitch.conf | grep hosts
hosts: files dns

Domyślnie stosuje się plik nsswitch.conf i to nie bez powodu. Czasami chcemy w specyficznym środowisku wyszukać jakiś specyficzny host i połączyć się z nim oraz nie ma potrzeby by widziały go wszystkie inne hosty w sieci do tego celu łatwo wykorzystamy /etc/hosts. Gdy wszystkie pliki zostały skonfigurowane poprawnie można rozpocząć testowanie czy nazwy rozwiązywane są prawidłowo. Test można przeprowadzić na dwa sposoby - pierwszy to użycie polecenia "ping" z jednego hosta na drugi, kolejny sposób to to polecenie "nslookup" zapytując o adres IP otrzymując powiązaną nazwę hosta.

Użycie polecenia ping po nazwie hosta :

# ping RHEL02

Użycie polecenia nslookup :

# nslookup RHEL02

Rozwiązywanie problemów z siecią może być torturą jeżeli nie wiadomo czego szukać oraz jeżeli nie rozumie się działania sieci. 

Komentarze

Najczęściej czytane w tym miesiącu

50 popularnych pytań dotyczących systemu Linux zadawanych na rozmowach kwalifikacyjnych. (Pytania & Odpowiedzi)

Jak dodać użytkownika w systemie Windows z poziomu konsoli CMD? (net user, net localgroup)

Generowanie testowych plików o określonej wielkości