Windows VPN veza ne pohranjuje DNS poslužitelje u profil koji uređuješ u Postavkama. Kad se tunel podigne, klijent pregovara IP konfiguraciju s pristupnikom, pristupnik pošalje popis razrješivača, a Windows ga primijeni na adapter tunela. Taj je adapter zasebno sučelje od tvog Wi-Fi ili Ethernet sučelja, a popis pripada sučelju, ne profilu. Kad jednom znaš koji objekt posjeduje vrijednost, prepisivanje u PowerShellu je jedna naredba; učiniti da prepisivanje preživi ponovno spajanje dio je koji traži odluku.

Koji objekt posjeduje adresu

RAS stvara adapter tunela kad veza uspije i uklanja ga kad veza padne. DNS poslužitelji koje vidiš u ipconfig /all dolaze tijekom te razmjene konfiguracije, uz IPv4 i IPv6 adrese i rute. Budući da je vrijednost vezana uz sučelje, Set-DnsClientServerAddress piše u nešto što postoji samo dok veza postoji.

Ta jedna činjenica objašnjava većinu zbrke oko VPN DNS-a. Profil se može pregledati dok si odspojen, ali nema sučelja na koje bi se pokazalo, pa skripta za prijavu koja poziva cmdlet na VPN alias pada prije nego se itko spojio. Objašnjava i promjenu koja izgleda kao da se vraća: ništa se nije vratilo, sučelje je uništeno i ponovno izgrađeno s vrijednostima koje je pristupnik poslao.

Pronađi alias prije nego diraš DNS

Naziv profila i alias sučelja obično su isti niz znakova, ali nisu isti objekt. Get-VpnConnection ispisuje profile; Get-NetAdapter ispisuje sučelja koja Windows stvarno ima. DNS cmdleti žele drugo, a njih se dvoje razilazi češće nego što ljudi očekuju, posebno kad klijent imenu adaptera doda opis poput "(RAS)".

Ako profil ne postoji, PowerShell može stvoriti izvorni zapis. Vrsta tunela i provjera identiteta moraju odgovarati onome što pristupnik nudi, jer se nesklad pokazuje pri spajanju, a ne pri stvaranju:

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

Spoji se jednom, zatim pročitaj stvarni alias prije nego napišeš bilo koju DNS naredbu:

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 račun mora imati dopuštenje za promjenu postavki sučelja. Veza po korisniku obično prihvaća promjenu od prijavljenog korisnika; veza za sve korisnike stvorena s -AllUserConnection u pravilu traži povišenu ljusku.

Sam cmdlet je jedna linija, dokumentiran 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 pogrešku cmdleta, i to je dobar ishod, jer bi tišina bila gora. Ispravan cmdlet bez vidljivog učinka 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 virtualni adapter koji je stvorio alat za mreže u izoliranom okruženju.

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

Prepisivanje pripada jednoj instanci sučelja. Kad klijent razmontira adapter i ponovno ga izgradi pri sljedećem spajanju, poslane vrijednosti primjenjuju se iznova i tvog popisa nema. Neki klijenti ponovno stvaraju sučelje pri svakom spajanju; drugi ga koriste cijeli životni vijek sesije. Usporedi indeks sučelja u Get-NetAdapter kroz dvije veze i znat ćeš koje ponašanje imaš.

Postoje tri trajna odgovora, a njihovo slaganje stvara vlastite greške. DNS sufiks specifičan za vezu plus NRPT pravilo šalje samo interni prostor imena internom razrješivaču, a javna imena ostavlja na miru. Postavka grupnog pravila ili MDM-a primijenjena na VPN vezu postavlja DNS pri spajanju bez ikakve skripte. Zakazani zadatak koji reagira na događaj veze i ponovno pokreće cmdlet je tupa opcija, ali radi i ostavlja zapis. Odaberi jednog vlasnika DNS-a i zapiši koji je.

Interna imena s jednom oznakom također traže popis za pretraživanje sufiksa. Set-DnsClientGlobalSetting -SuffixSearchList vrijedi 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

Razrješivač naveden na adapteru dokazuje samo da je vrijednost zapisana. Pitaj namjeravani poslužitelj izravno, 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. Izravni upit odgovara, a obični upit pada: postavka adaptera ili popis sufiksa nije na snazi. Padaju oba: razrješivač je nedostupan kroz tunel, pa pogledaj rute i pravila vatrozida prije nego ponovno diraš DNS. Izravni upit pada dok obični odgovara odnekud drugdje: podijeljeni DNS je pogrešno konfiguriran i interno ime odgovara javni razrješivač, što je problem politike prije nego problem povezivosti.

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

Povezani članci