Dodali ste ime u /etc/hosts, povezali VPN i očekivali da se zapis pojavi svima. To se ne dešava, a iznenađenje obično dolazi s drugim simptomom: ime se razrješava na vašem računaru, a kod kolege ne, što izgleda kao pokvarena VPN DNS usluga, a zapravo hosts datoteka radi upravo ono za šta je napravljena. Hosts datoteka je lokalna konfiguracija razrješavanja imena, a ne ažuriranje zone, i ništa u normalnoj VPN vezi je ne prenosi.

Hosts je lokalno nadjačavanje, a ne ažuriranje zone

Datoteka je lista mapiranja koja biblioteke imenskih servisa konsultuju prije ili umjesto pitanja DNS servera. Red kao 10.40.0.20 build.corp.example mijenja ono što aplikacije na tom jednom računaru zaključe. On ne stvara zapis, ne putuje kroz tunel, a DNS server na koji tunel pokazuje nema pojma da postoji.

Zato je neuspjeh asimetričan. Vaš klijent dobija odgovor iz datoteke. Drugi klijent pita VPN DNS server, koji ne vraća ništa, i aplikacija prijavljuje da ime ne postoji. Oba računara se ponašaju ispravno; samo jedan ima nadjačavanje koje drugi nikad nije vidio.

Dvije komande, dvije različite komponente

Najbrži način da zaustavite raspravu je da razliku učinite vidljivom u dvije komande, obje izvršene na klijentu koji ima unos u hosts:

getent ahosts build.corp.example
dig @10.40.0.53 build.corp.example A

Prva pita vlastitu putanju pretrage sistema, koja na tipičnom glibc sistemu čita lokalne datoteke prije DNS-a. Druga šalje DNS upit direktno serveru na toj adresi i uopšte ne konsultuje lokalne datoteke. Kada prva vrati vaš unos, a druga vrati NXDOMAIN, dokazali ste da zapis ne postoji u DNS-u i da vaš računar odgovara iz lokalnog nadjačavanja.

Redoslijed je konfigurabilan i vrijedi ga provjeriti prije nego što zaključite bilo šta o određenoj distribuciji. Pogledajte red hosts: u /etc/nsswitch.conf; hosts: files dns prvo konsultuje datoteke. Ne kopirajte taj primjer preko radne konfiguracije samo da biste promijenili redoslijed, jer stvarni sistemi često navode dodatne izvore i uslovne unose servisa koje primjer ne sadrži.

systemd-resolved zamagljuje test

Na sistemu koji koristi systemd-resolved, lokalni stub takođe servira imena iz hosts baze podataka. Zbog toga upit na 127.0.0.53 nije nezavisan test udaljenog servera, iako izgleda kao DNS upit i ponaša se tako. Možete potvrditi šta rezolver zna i koje bi servere pitao sa:

resolvectl query build.corp.example
resolvectl status

Izlaz komande status navodi DNS servere po vezi i tako saznajete da li je VPN veza uopšte dobila rezolver. To pitanje je odvojeno od unosa u hosts i vrijedi ga postaviti kada privatno ime ne radi za svakog korisnika, a ne za jednog.

Aplikacije mogu dodati još jedan sloj. Preglednik s vlastitim DNS-over-HTTPS podešavanjem, kontejner s vlastitom konfiguracijom rezolvera ili okruženje izvršavanja koje kešira pretrage za cijeli životni vijek procesa mogu odgovoriti drugačije od sistema. Testirajte aplikaciju do koje vam je stalo umjesto da pretpostavljate da jedna komanda opisuje svaki program na računaru.

Šta zapravo dijeli ime kroz VPN

Ako privatno ime treba da radi za sve, potreban mu je vlasnik do kojeg svako može doći rezolverom. Čist odgovor je objaviti zapis u upravljanoj zoni i učiniti tu zonu razrješivom kroz predviđenu VPN DNS putanju. Zapis tada ima jedan izvor istine, revizijski trag i životni ciklus, i niko ne mora pamtiti koji laptop nosi lokalno nadjačavanje.

Distribucija hosts datoteka je legitimna alternativa, i to je upravljanje krajnjim tačkama, a ne imenski servis. Ako je odaberete, datoteku mora rasporediti, verzionisati i ukloniti ono što upravlja flotom, i tako to treba opisati u dizajnu. „VPN to rješava“ nije opis tog procesa.

Dinamička DNS registracija je treći mehanizam, s vlastitim dozvolama, autentifikacijom ažuriranja i životnim vijekom zapisa. Ona ne slijedi iz unosa u hosts, a ne slijedi ni iz pukog povezivanja klijenta, osim ako su server i klijent oba konfigurisani za to. Zapis koji se sam pojavi signal je da je neko omogućio sigurna ažuriranja i klijent koji se sam registruje, a ta konfiguracija pripada u dizajnerski zapis, a ne u nit za rješavanje problema. Ako niko ne može navesti ko posjeduje to podešavanje, tretirajte automatski zapis kao neprovjeren i držite upravljanu zonu kao izvor istine.

Razriješeno ime nije ruta

Razrješavanje imena i dostupnost su odvojeni, a zastarjelo lokalno mapiranje klasičan je način da ih pobrkate. Unos u hosts koji pokazuje na adresu koja se preselila nastavit će birati zastarjeli host dugo nakon što je DNS ispravljen, a simptom izgleda kao greška rutiranja na imenu koje se dobro razrješava.

Zato, kada izvještaj glasi „ime se razrješava, ali usluga nije dostupna“, uporedite sistemsku pretragu s eksplicitnim upitom VPN DNS serveru, pa provjerite adresu koju ste dobili prema onoj koju usluga zapravo koristi. Referenca za systemd-resolved dokumentuje lokalne izvore koje konsultuje, i to je mapa koja vam treba za to poređenje.

Zatim ispravite nadjačavanje preko njegovog vlasnika. Uklanjanje reda iz vlastite hosts datoteke ne čini ništa za dvanaest laptopa koji su isti red dobili iz skripte za raspoređivanje, a to je verzija ovog problema koju ljudi zapravo imaju.

Povezani članci