Windows VPN veza ne čuva DNS servere u profilu koji uređuješ u Postavkama. Kada se tunel podigne, klijent pregovara IP konfiguraciju sa gateway-om, gateway pošalje listu resolvera, a Windows je primijeni na adapter tunela. Taj adapter je odvojen interfejs od tvog Wi-Fi ili Ethernet interfejsa, a lista pripada interfejsu, ne profilu. Kada znaš koji objekat drži vrijednost, prepisivanje u PowerShell-u je jedna komanda; učiniti da prepisivanje preživi ponovno povezivanje je dio koji traži odluku.

Koji objekat drži adresu

RAS stvara adapter tunela kada veza uspije i uklanja ga kada veza padne. DNS serveri koje vidiš u ipconfig /all dolaze tokom te razmjene konfiguracije, pored IPv4 i IPv6 adresa i ruta. Pošto je vrijednost vezana za interfejs, Set-DnsClientServerAddress piše u nešto što postoji samo dok veza postoji.

Ta jedna činjenica objašnjava većinu zabune oko VPN DNS-a. Profil se može pregledati dok si odspojen, ali nema interfejsa na koji bi se pokazalo, pa skripta za prijavu koja poziva cmdlet na VPN alias pada prije nego se iko povezao. Objašnjava i promjenu koja izgleda kao da se vraća: ništa se nije vratilo, interfejs je uništen i ponovo izgrađen sa vrijednostima koje je gateway poslao.

Nađi alias prije nego diraš DNS

Naziv profila i alias interfejsa obično su isti niz znakova, ali nisu isti objekat. Get-VpnConnection ispisuje profile; Get-NetAdapter ispisuje interfejse koje Windows zaista ima. DNS cmdleti žele drugi, a njih dvoje se razilaze češće nego što ljudi očekuju, posebno kada klijent imenu adaptera doda opis poput "(RAS)".

Ako profil ne postoji, PowerShell može stvoriti izvorni unos. Tip tunela i autentifikacija moraju odgovarati onome što gateway nudi, jer se nesklad pokazuje pri povezivanju, a ne pri stvaranju:

Add-VpnConnection -Name "Corporate" -ServerAddress vpn.example.net `
  -TunnelType Ikev2 -EncryptionLevel Required `
  -AuthenticationMethod Eap -AllUserConnection

Poveži se jednom, zatim pročitaj stvarni alias prije nego napišeš bilo koju DNS komandu:

rasdial.exe "Corporate"
Get-NetAdapter | Where-Object InterfaceDescription -like "*VPN*"
Get-DnsClientServerAddress -InterfaceAlias "Corporate"

Primijeni prepisivanje u ispravnom redoslijedu

Redoslijed je važniji od sintakse. Adapter mora biti podignut, alias se mora razriješiti, a nalog mora imati dozvolu za promjenu postavki interfejsa. Veza po korisniku obično prihvata promjenu od prijavljenog korisnika; veza za sve korisnike stvorena sa -AllUserConnection u pravilu traži podignuti shell.

Sam cmdlet je jedna linija, dokumentovan u Microsoftovoj referenci za Set-DnsClientServerAddress:

Set-DnsClientServerAddress -InterfaceAlias "Corporate" -ServerAddresses 10.20.0.53,10.20.0.54
Get-DnsClientServerAddress -InterfaceAlias "Corporate" -AddressFamily IPv4

Dva načina neuspjeha vrijedi prepoznati na prvi pogled. Pogrešan alias daje grešku cmdleta, i to je dobar ishod, jer bi tišina bila gora. Ispravan cmdlet bez vidljivog efekta obično znači da gledaš pogrešan adapter: zaostali adapter tunela od drugog klijenta, fizičku mrežnu karticu sa sličnim opisom ili drugi virtuelni adapter koji je stvorio alat za mreže u izolovanom okruženju.

Zašto ponovno povezivanje može poništiti promjenu

Prepisivanje pripada jednoj instanci interfejsa. Kada klijent razmontira adapter i ponovo ga izgradi pri sljedećem povezivanju, poslane vrijednosti se primjenjuju iznova i tvoje liste nema. Neki klijenti ponovo stvaraju interfejs pri svakom povezivanju; drugi ga koriste cijeli vijek trajanja sesije. Uporedi indeks interfejsa u Get-NetAdapter kroz dvije veze i znat ćeš koje ponašanje imaš.

Postoje tri trajna odgovora, a njihovo slaganje stvara sopstvene greške. DNS sufiks specifičan za vezu plus NRPT pravilo šalje samo interni prostor imena internom resolveru, a javna imena ostavlja na miru. Postavka grupne politike ili MDM-a primijenjena na VPN vezu postavlja DNS pri povezivanju bez ikakve skripte. Zakazani zadatak koji reaguje na događaj veze i ponovo pokreće cmdlet je tupa opcija, ali radi i ostavlja zapis. Izaberi jednog vlasnika DNS-a i zapiši koji je.

Interna imena sa jednom oznakom takođe traže listu za pretragu sufiksa. Set-DnsClientGlobalSetting -SuffixSearchList važi za cijelo računalo, pa mijenja razrješavanje za svaki adapter na njemu, uključujući Ethernet. Isprobaj na laboratorijskom računalu prije nego uđe u sliku.

Provjeri razrješavanje, ne samo postavku

Resolver naveden na adapteru dokazuje samo da je vrijednost zapisana. Pitaj namjeravani server direktno, zatim pitaj uobičajenim putem:

Resolve-DnsName server01.corp.example -Server 10.20.0.53
Resolve-DnsName server01.corp.example

Razlika ti kaže gdje je kvar. Direktan upit odgovara, a običan upit pada: postavka adaptera ili lista sufiksa nije na snazi. Padaju oba: resolver je nedostupan kroz tunel, pa pogledaj rute i pravila firewall-a prije nego ponovo diraš DNS. Direktan upit pada dok običan odgovara odnekud drugdje: podijeljeni DNS je pogrešno konfigurisan i interno ime odgovara javni resolver, što je problem politike prije nego problem povezivosti.

Pokreni test dvaput, jednom odmah nakon povezivanja i jednom nakon odspajanja i ponovnog povezivanja, i uporedi izlaz Get-DnsClientServerAddress iz oba pokretanja. Ako se poslana vrijednost vratila na drugoj vezi, prepisivanje je živjelo i umrlo sa adapterom, i samo će NRPT ili put politike iz prethodnog odjeljka ostati. Sačuvaj oba zapisa i vremenske oznake povezivanja; oni rješavaju pitanje ostaje li brže od još jednog kruga uređivanja.

Povezani članci