15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij
30.10.2024
1 +1

Opanowanie pliku Hosts w Linux: Kompletny przewodnik po lokalnej kontroli DNS

Niezależnie od tego, czy jesteś programistą testującym nową aplikację, administratorem systemu rozwiązującym problemy z propagacją DNS, czy po prostu osobą, która chce zablokować rozpraszające strony internetowe, plik /etc/hosts jest jednym z najpotężniejszych i najrzadziej wykorzystywanych narzędzi w każdym systemie Linux. Ten przewodnik zawiera szczegółowy, praktyczny opis wszystkiego, co musisz wiedzieć — od zrozumienia, czym jest plik hosts, po jego bezpieczną edycję w środowisku VPS Hosting.

Spis treści

  1. Czym jest plik hosts?
  2. Gdzie znajduje się plik hosts w systemie Linux?
  3. Zrozumienie struktury pliku hosts
  4. Jak edytować plik hosts w systemie Linux (krok po kroku)
  5. Typowe przypadki użycia pliku hosts
  6. Czyszczenie pamięci podręcznej DNS po edycji
  7. Najlepsze praktyki i kwestie bezpieczeństwa
  8. Podsumowanie

1. Czym jest plik hosts? {#what-is-the-hosts-file}

Plik hosts to plik systemowy w formacie zwykłego tekstu, który mapuje czytelne dla człowieka nazwy hostów — takie jak www.example.com — na odpowiadające im adresy IP. Działa jako lokalny, statyczny resolver DNS i, co kluczowe, jest sprawdzany przez system operacyjny *przed* wykonaniem jakiegokolwiek zewnętrznego zapytania DNS.

Oznacza to, że wpisy w pliku hosts mają bezwzględny priorytet nad rekordami DNS zwracanymi przez zewnętrzne serwery nazw. Ta jedna cecha sprawia, że jest to niezwykle wszechstronne narzędzie do:

  • Lokalnych środowisk deweloperskich — Testowanie strony internetowej pod rzeczywiście wyglądającą domeną bez modyfikowania aktywnych rekordów DNS.
  • Rozwiązywania problemów z DNS — Tymczasowe wymuszenie rozwiązywania domeny do określonego IP w celu testowania konfiguracji serwera.
  • Blokowania stron internetowych — Przekierowanie niechcianych domen na adres nieroutowalny, skutecznie blokując dostęp.
  • Testowania środowisk staging i przed uruchomieniem — Podgląd nowej konfiguracji serwera przed globalnym przełączeniem DNS.
  • Bezpieczeństwa sieci — Blokowanie znanych złośliwych domen na poziomie systemu operacyjnego.

> Uwaga techniczna: W systemie Linux kolejność rozwiązywania nazw jest określana przez plik /etc/nsswitch.conf. Domyślna konfiguracja zazwyczaj umieszcza files (tj. /etc/hosts) przed dns, zapewniając, że lokalne wpisy są zawsze sprawdzane jako pierwsze.

2. Gdzie znajduje się plik hosts w systemie Linux? {#location}

We wszystkich głównych dystrybucjach Linux — w tym Ubuntu, Debian, CentOS, Rocky Linux, AlmaLinux i Arch Linux — plik hosts znajduje się pod adresem:

/etc/hosts

Ta ścieżka jest spójna we wszystkich dystrybucjach, co ułatwia pracę niezależnie od środowiska. Plik jest własnością root i wymaga podwyższonych uprawnień do edycji.

Domyślna zawartość pliku /etc/hosts

Świeżo skonfigurowany serwer Linux — na przykład działający na AlexHost VPS Hosting — zazwyczaj zawiera domyślne wpisy podobne do następujących:

127.0.0.1       localhost
127.0.1.1       your-hostname.example.com your-hostname

# The following lines are desirable for IPv6 capable hosts
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

Te wpisy zapewniają, że:

    localhost zawsze rozwiązuje się do adresu pętli zwrotnej 127.0.0.1 (IPv4) i ::1 (IPv6).
    Własna nazwa hosta serwera rozwiązuje się lokalnie bez konieczności wykonywania zewnętrznego zapytania DNS.
    
    Nie usuwaj tych domyślnych wpisów, chyba że masz konkretny i dobrze uzasadniony powód. Ich usunięcie może spowodować nieoczekiwane zachowanie usług systemowych, dostarczania poczty i frameworków aplikacji.
    3. Zrozumienie struktury pliku hosts {#structure}
    Plik hosts ma prosty, spójny format. Każda niepusta linia niebędąca komentarzem reprezentuje pojedyncze mapowanie i przestrzega następującej składni:
    IP_address    hostname    [alias1]    [alias2]    ...
    
    
    
    
    Pole
    Opis
    
    
    
    
    IP_address
    Adres IPv4 lub IPv6, do którego powinna rozwiązywać się nazwa hosta
    
    
    hostname
    Podstawowa w pełni kwalifikowana nazwa domeny (FQDN) lub krótka nazwa hosta
    
    
    alias (opcjonalne)
    Jedna lub więcej dodatkowych nazw, które powinny rozwiązywać się do tego samego IP
    
    
    
    
    Kluczowe zasady formatowania
    
    Białe znaki: Pola są oddzielone spacjami lub tabulatorami. Wiele spacji jest dopuszczalne.
    Komentarze: Każdy tekst następujący po znaku # w linii jest traktowany jako komentarz i ignorowany przez system.
    Rozróżnianie wielkości liter: Nazwy hostów są w praktyce niewrażliwe na wielkość liter, ale konwencją jest używanie małych liter.
    Jeden IP na linię: Każda linia zaczyna się od dokładnie jednego adresu IP, po którym następuje jedna lub więcej nazw hostów.
    
    Praktyczne przykłady
    Mapowanie pojedynczej domeny do localhost:
    127.0.0.1    example.com
    Mapowanie wielu nazw hostów do tego samego IP w jednej linii:
    127.0.0.1    example.com    www.example.com    staging.example.com
    Blokowanie domeny przez wskazanie jej na adres nieroutowalny:
    0.0.0.0    ads.tracker.com
    Wymuszenie rozwiązywania domeny do określonego zdalnego IP serwera:
    203.0.113.42    mywebsite.com    www.mywebsite.com
    Dodawanie komentarzy wbudowanych w celach dokumentacyjnych:
    # Local development environment - Project Alpha
    127.0.0.1    alpha.local    api.alpha.local
    
    # Blocked domains - updated 2025-01-15
    0.0.0.0    malicious-site.com
    4. Jak edytować plik hosts w systemie Linux (krok po kroku) {#editing}
    Ponieważ /etc/hosts jest plikiem konfiguracyjnym systemu, do jego modyfikacji potrzebne są uprawnienia root lub sudo. Poniżej przedstawiono kompletny, bezpieczny dla środowisk produkcyjnych przepływ pracy.
    Krok 1: Utwórz kopię zapasową przed edycją
    To niezbędna najlepsza praktyka. Zawsze twórz kopię zapasową pliku przed wprowadzeniem jakichkolwiek zmian:
    sudo cp /etc/hosts /etc/hosts.bak
    Możesz zweryfikować, czy kopia zapasowa została utworzona:
    ls -lh /etc/hosts*
    Jeśli coś pójdzie nie tak, przywróć ją natychmiast za pomocą:
    sudo cp /etc/hosts.bak /etc/hosts
    Krok 2: Otwórz plik hosts w edytorze tekstu
    Używając nano (zalecane dla początkujących i szybkich edycji):
    sudo nano /etc/hosts
    nano jest przyjazny dla użytkownika, wyświetla skróty klawiaturowe na dole ekranu i jest dostępny praktycznie w każdej dystrybucji Linux domyślnie.
    Używając vim (preferowany przez doświadczonych administratorów):
    sudo vim /etc/hosts
    Używając vi (dostępny w minimalnych instalacjach):
    sudo vi /etc/hosts
    Krok 3: Dodaj, zmodyfikuj lub usuń wpisy
    Po otwarciu pliku przejdź do odpowiedniego miejsca i wprowadź zmiany. Oto najczęstsze operacje:
    Dodaj nowe mapowanie (dołącz na końcu pliku):
    127.0.0.1    myproject.local    www.myproject.local
    Zablokuj stronę internetową:
    0.0.0.0    facebook.com    www.facebook.com
    Nadpisz DNS dla domeny (np. aby przetestować nowy serwer):
    198.51.100.25    mywebsite.com    www.mywebsite.com
    Krok 4: Zapisz i wyjdź z edytora
    W nano:
    
    Naciśnij CTRL + O, aby zapisać plik.
    Naciśnij Enter, aby potwierdzić nazwę pliku.
    Naciśnij CTRL + X, aby wyjść.
    
    W vim lub vi:
    
    Naciśnij Esc, aby upewnić się, że jesteś w trybie poleceń.
    Wpisz :wq i naciśnij Enter, aby zapisać i wyjść.
    Aby wyjść bez zapisywania, wpisz :q! i naciśnij Enter.
    
    Krok 5: Zweryfikuj składnię swoich zmian
    Przed testowaniem wizualnie potwierdź, że wpisy wyglądają poprawnie:
    cat /etc/hosts
    Możesz również użyć grep, aby szybko znaleźć konkretny wpis:
    grep "myproject.local" /etc/hosts
    Krok 6: Przetestuj nowe mapowania
    Użyj ping, aby zweryfikować, że nazwa hosta rozwiązuje się do oczekiwanego adresu IP:
    ping -c 4 myproject.local
    W przypadku zablokowanej domeny (zmapowanej do 0.0.0.0 lub 127.0.0.1) ping powinien zakończyć się niepowodzeniem lub zwrócić wynik natychmiast:
    ping -c 2 facebook.com
    Możesz również użyć getent do bardziej bezpośredniego wyszukiwania w pliku hosts:
    getent hosts myproject.local
    To polecenie odpytuje stos rozwiązywania nazw systemu (w tym /etc/hosts) i zwraca rozwiązany IP, co czyni je bardziej niezawodnym niż ping do celów weryfikacji.
    5. Typowe przypadki użycia pliku hosts {#use-cases}
    5.1. Lokalny rozwój stron internetowych
    Jest to prawdopodobnie najczęstszy przypadek użycia wśród programistów. Zamiast uzyskiwać dostęp do lokalnego projektu przez http://localhost:3000 lub http://127.0.0.1:8080, możesz przypisać znaczącą, przypominającą produkcyjną nazwę domeny.
    Przykładowa konfiguracja:
    Dodaj do /etc/hosts:
    127.0.0.1    myproject.local    api.myproject.local    admin.myproject.local
    Po zapisaniu przejdź do http://myproject.local w przeglądarce. Twoje żądanie zostanie rozwiązane lokalnie bez kontaktowania się z zewnętrznym serwerem DNS.
    To podejście jest szczególnie cenne, gdy:
    
    Twoja aplikacja używa wirtualnego hostingu i wymaga określonego nagłówka Host.
    Testujesz certyfikaty SSL lokalnie (używając certyfikatów z podpisem własnym zmapowanych do właściwej nazwy domeny).
    Musisz symulować architekturę wielu subdomen (np. api., admin., cdn.).
    
    Jeśli uruchamiasz wiele projektów na VPS z cPanel, plik hosts może również pomóc w testowaniu konfiguracji domeny przed zakończeniem propagacji DNS.
    5.2. Blokowanie niechcianych stron internetowych
    Plik hosts jest lekkim blokerem treści niewymagającym żadnych zależności. Przekierowując domenę do 0.0.0.0 (preferowane zamiast 127.0.0.1, ponieważ szybciej kończy się niepowodzeniem bez próby połączenia), możesz zablokować dostęp na poziomie systemu operacyjnego — wpływając jednocześnie na wszystkie przeglądarki i aplikacje.
    Blokowanie rozpraszających mediów społecznościowych:
    0.0.0.0    facebook.com    www.facebook.com
    0.0.0.0    twitter.com    www.twitter.com
    0.0.0.0    reddit.com    www.reddit.com
    Blokowanie znanych domen serwujących reklamy lub śledzących:
    0.0.0.0    doubleclick.net
    0.0.0.0    ads.google.com
    0.0.0.0    tracking.example-analytics.com
    > Wskazówka dla profesjonalistów: Utrzymywane przez społeczność listy blokowania (takie jak te z projektu StevenBlack hosts) kompilują dziesiątki tysięcy domen reklamowych, śledzących i złośliwego oprogramowania w jeden format pliku hosts, który możesz scalić ze swoim /etc/hosts.
    5.3. Testowanie serwera przed uruchomieniem i przełączenie DNS
    Podczas migracji strony internetowej na nowy serwer — na przykład przenoszenia z Shared Web Hosting na Serwer Dedykowany — propagacja DNS może trwać od kilku minut do 48 godzin. Plik hosts pozwala natychmiast podejrzeć nowy serwer, tylko z lokalnej maszyny, bez wpływu na innych użytkowników.
    Scenariusz: Migrujesz mywebsite.com na nowy serwer pod IP 203.0.113.42.
    Dodaj do lokalnego /etc/hosts:
    203.0.113.42    mywebsite.com    www.mywebsite.com
    Teraz, gdy odwiedzisz mywebsite.com w przeglądarce, zobaczysz zawartość nowego serwera. Inni odwiedzający na całym świecie nadal będą widzieć stary serwer do czasu propagacji DNS. Po potwierdzeniu, że wszystko działa poprawnie, usuń wpis i pozwól DNS przejąć kontrolę.
    Ta technika jest nieoceniona do:
    
    Weryfikacji konfiguracji serwera WWW przed uruchomieniem.
    Testowania Certyfikatów SSL na nowym serwerze.
    Potwierdzania routingu poczty e-mail i zachowania aplikacji po migracji.
    
    5.4. Omijanie błędów rozwiązywania DNS
    Jeśli serwer DNS jest tymczasowo niedostępny lub zwraca nieprawidłowe wyniki, możesz użyć pliku hosts jako awaryjnego nadpisania, aby przywrócić łączność z krytycznymi usługami.
    Przykład:
    # Emergency override - DNS server outage 2025-01-15
    198.51.100.10    internal-api.company.com
    198.51.100.11    database.company.com
    Pamiętaj, aby usunąć te wpisy po rozwiązaniu podstawowego problemu z DNS, aby uniknąć nieaktualnych mapowań powodujących przyszłe zamieszanie.
    5.5. Środowiska deweloperskie z wieloma serwerami
    W złożonych konfiguracjach deweloperskich z wieloma maszynami wirtualnymi lub kontenerami plik hosts może mapować przyjazne nazwy do każdej usługi:
    192.168.1.10    db.local         # Database server
    192.168.1.11    cache.local      # Redis/Memcached
    192.168.1.12    queue.local      # Message broker
    192.168.1.13    search.local     # Elasticsearch
    Eliminuje to konieczność zapamiętywania adresów IP i sprawia, że pliki konfiguracyjne są bardziej czytelne i przenośne.
    6. Czyszczenie pamięci podręcznej DNS po edycji {#flushing-dns}
    W większości nowoczesnych systemów Linux zmiany w /etc/hosts wchodzą w życie natychmiast dla nowych połączeń. Jednak jeśli twój system lub aplikacje buforują odpowiedzi DNS, może być konieczne wyczyszczenie tej pamięci podręcznej, aby nowe mapowania były używane od razu.
    Dla systemów używających systemd-resolved (Ubuntu 18.04+, Debian 10+, większość nowoczesnych dystrybucji):
    sudo systemctl restart systemd-resolved
    Lub, aby wyczyścić pamięć podręczną bez pełnego restartu:
    sudo resolvectl flush-caches
    Zweryfikuj, czy pamięć podręczna została wyczyszczona:
    sudo resolvectl statistics
    Dla systemów używających nscd (Name Service Cache Daemon):
    sudo systemctl restart nscd
    Dla systemów używających NetworkManager:
    sudo systemctl restart NetworkManager
    Dla systemów używających dnsmasq:
    sudo systemctl restart dnsmasq
    Sprawdzanie, którego resolvera DNS używa twój system
    systemctl list-units --type=service | grep -E "resolved|nscd|dnsmasq|NetworkManager"
    > Pamięci podręczne przeglądarek: Należy pamiętać, że przeglądarki internetowe utrzymują własną wewnętrzną pamięć podręczną DNS, niezależną od systemu operacyjnego. Po zmodyfikowaniu /etc/hosts może być również konieczne wyczyszczenie pamięci podręcznej DNS przeglądarki. W Chrome/Chromium przejdź do chrome://net-internals/#dns i kliknij Clear host cache.
    7. Najlepsze praktyki i kwestie bezpieczeństwa {#best-practices}
    ✅ Zawsze twórz kopię zapasową przed edycją
    sudo cp /etc/hosts /etc/hosts.bak.$(date +%Y%m%d_%H%M%S)
    Używanie znacznika czasu w nazwie pliku kopii zapasowej zapewnia możliwość śledzenia wielu wersji.
    ✅ Używaj komentarzy do dokumentowania zmian
    # Added 2025-01-15 by admin@example.com - staging server test
    203.0.113.42    staging.mywebsite.com
    Jest to szczególnie ważne w środowiskach zespołowych, gdzie wiele osób może mieć dostęp do serwera.
    ✅ Niezwłocznie usuwaj tymczasowe wpisy
    Wpisy dodane do testowania lub awaryjnych nadpisań powinny być usuwane, gdy tylko nie są już potrzebne. Nieaktualne wpisy mogą powodować trudne do zdiagnozowania problemy z łącznością miesiące później.
    ✅ Weryfikuj składnię
    Nieprawidłowo sformatowany wpis w pliku hosts nie spowoduje awarii systemu, ale po cichu nie uda się rozwiązać nazwy. Zawsze sprawdzaj dwukrotnie swoje wpisy za pomocą:
    getent hosts <hostname>
    ⚠️ Ostrzeżenie bezpieczeństwa: Przejęcie pliku hosts
    Złośliwe oprogramowanie czasami modyfikuje /etc/hosts, aby przekierować legalne domeny (takie jak strony bankowe lub serwery aktualizacji) do adresów IP kontrolowanych przez atakującego. Jest to znany wektor ataku zwany przejęciem pliku hosts.
    Chroń się przed tym przez:
    
    Ustawianie restrykcyjnych uprawnień do pliku: sudo chmod 644 /etc/hosts
  • Monitorowanie pliku pod kątem nieautoryzowanych zmian za pomocą narzędzi takich jak auditd lub AIDE.
  • Regularne przeglądanie zawartości pliku: cat /etc/hosts
  • ⚠️ Plik hosts nie jest substytutem właściwego DNS

    W środowiskach produkcyjnych plik hosts powinien być używany tylko do tymczasowych nadpisań i lokalnego rozwoju. Do trwałego zarządzania domenami zawsze używaj właściwych rekordów DNS. Jeśli potrzebujesz profesjonalnie rejestrować domeny i nimi zarządzać, Rejestracja Domen u niezawodnego dostawcy zapewnia, że twoja infrastruktura DNS jest solidna i skalowalna.

    8. Podsumowanie {#conclusion}

    Plik /etc/hosts jest pozornie prostym, a jednocześnie niezwykle potężnym narzędziem w zestawie każdego administratora systemu Linux i programisty. Jego zdolność do lokalnego nadpisywania rozwiązywania DNS — z zerowym opóźnieniem, bez zewnętrznych zależności i bez zmian infrastruktury — sprawia, że jest niezastąpiony dla:

    • Programistów budujących i testujących aplikacje lokalnie.
    • Administratorów systemów zarządzających migracjami serwerów i oknami przełączania DNS.
    • Użytkowników dbających o bezpieczeństwo blokujących złośliwe lub niechciane domeny.
    • Inżynierów DevOps orkiestrujących lokalne środowiska wielousługowe.

    Kluczowe wnioski z tego przewodnika:

    ZadaniePolecenie / Akcja
    Otwórz plik hostssudo nano /etc/hosts
    Utwórz kopię zapasową przed edycjąsudo cp /etc/hosts /etc/hosts.bak
    Zweryfikuj mapowaniegetent hosts <hostname>
    Przetestuj za pomocą pingping -c 4 <hostname>
    Wyczyść pamięć podręczną DNSsudo resolvectl flush-caches
    Przywróć z kopii zapasowejsudo cp /etc/hosts.bak /etc/hosts

    Niezależnie od tego, czy prowadzisz proste środowisko deweloperskie, czy zarządzasz flotą serwerów produkcyjnych na AlexHost VPS Hosting, opanowanie pliku hosts jest podstawową umiejętnością, która przynosi korzyści za każdym razem, gdy potrzebujesz szybkiego, niezawodnego, lokalnego nadpisania DNS. Edytuj z pewnością siebie, dokumentuj swoje zmiany i zawsze trzymaj kopię zapasową — udanego routingu!

    15%

    Zaoszczędź 15% na wszystkich usługach hostingowych

    Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

    Użyj kodu:

    Skills
    Rozpocznij