Windows VPN ryšys nesaugo DNS serverių profilyje, kurį redaguojate nustatymuose. Kai tunelis pakyla, klientas derasi dėl IP konfigūracijos su vartais, vartai atsiunčia rezolverių sąrašą, o Windows pritaiko jį tunelio adapteriui. Tas adapteris yra atskira sąsaja nuo jūsų Wi-Fi ar Ethernet, o sąrašas priklauso sąsajai, ne profiliui. Kai žinote, kuris objektas valdo reikšmę, jos perrašymas PowerShell yra viena komanda; padaryti, kad perrašymas išliktų po pakartotinio prisijungimo, yra dalis, kuriai reikia sprendimo.

Kuris objektas valdo adresą

RAS sukuria tunelio adapterį, kai ryšys pavyksta, ir pašalina jį, kai ryšys nutrūksta. DNS serveriai, kuriuos matote ipconfig /all išvestyje, atsiranda per tuos konfigūracijos mainus, šalia IPv4 ir IPv6 adresų bei maršrutų. Kadangi reikšmė pririšta prie sąsajos, Set-DnsClientServerAddress rašo į kažką, kas egzistuoja tik tol, kol egzistuoja ryšys.

Šis vienas faktas paaiškina didžiąją dalį painiavos dėl VPN DNS. Profilį galima apžiūrėti atsijungus, bet nėra sąsajos, į kurią būtų galima nurodyti, todėl prisijungimo scenarijus, kuris iškviečia cmdlet su VPN slapyvardžiu, nepavyksta dar prieš kam nors prisijungiant. Tai paaiškina ir pokytį, kuris atrodo grįžtantis: niekas negrįžo, sąsaja buvo sunaikinta ir perkurta su reikšmėmis, kurias atsiuntė vartai.

Raskite slapyvardį prieš liesdami DNS

Profilio pavadinimas ir sąsajos slapyvardis paprastai yra ta pati eilutė, bet tai ne tas pats objektas. Get-VpnConnection išvardija profilius; Get-NetAdapter išvardija sąsajas, kurias Windows iš tikrųjų turi. DNS cmdlet nori antrosios, ir šie du dažniau nesutampa, nei žmonės tikisi, ypač kai klientas prie adapterio pavadinimo prideda aprašą, pavyzdžiui, "(RAS)".

Jei profilio nėra, PowerShell gali sukurti vietinį įrašą. Tunelio tipas ir autentifikavimas turi atitikti tai, ką siūlo vartai, nes neatitikimas išryškėja prisijungiant, o ne kuriant:

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

Prisijunkite kartą, tada perskaitykite tikrąjį slapyvardį prieš rašydami bet kurią DNS komandą:

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

Taikykite perrašymą teisinga tvarka

Tvarka svarbesnė už sintaksę. Adapteris turi būti įjungtas, slapyvardis turi išsispręsti, o paskyrai turi būti leista keisti sąsajos nustatymus. Vieno naudotojo ryšys paprastai priima pakeitimą iš prisijungusio naudotojo; visų naudotojų ryšiui, sukurtam su -AllUserConnection, paprastai reikia pakeltų teisių apvalkalo.

Pats cmdlet yra viena eilutė, dokumentuota Microsoft Set-DnsClientServerAddress nuorodoje:

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

Du gedimų būdus verta atpažinti iš pirmo žvilgsnio. Neteisingas slapyvardis sukelia cmdlet klaidą, ir tai yra geras rezultatas, nes tyla būtų blogiau. Teisingas cmdlet be matomo poveikio paprastai reiškia, kad žiūrite į netinkamą adapterį: kito kliento paliktą tunelio adapterį, fizinę tinklo plokštę su panašiu aprašu arba antrą virtualų adapterį, kurį sukūrė izoliuotos aplinkos tinklo įrankis.

Kodėl pakartotinis prisijungimas gali atšaukti pakeitimą

Perrašymas priklauso vienai sąsajos instancijai. Kai klientas išardo adapterį ir vėl jį sukonstruoja per kitą prisijungimą, siunčiamos reikšmės vėl pritaikomos ir jūsų sąrašo nebėra. Vieni klientai atkuria sąsają prie kiekvieno prisijungimo; kiti naudoja ją visą sesijos gyvavimo laiką. Palyginkite sąsajos indeksą Get-NetAdapter išvestyje tarp dviejų ryšių ir žinosite, koks elgesys pas jus.

Yra trys ilgalaikiai atsakymai, o jų kaupimas sukuria savo klaidų. Konkrečiam ryšiui skirta DNS priesaga ir NRPT taisyklė siunčia tik vidinę vardų erdvę vidiniam rezolveriui, o viešus vardus palieka ramybėje. VPN ryšiui pritaikytas grupės strategijos ar MDM nustatymas nustato DNS prisijungimo metu be jokio scenarijaus. Suplanuota užduotis, kuri reaguoja į ryšio įvykį ir iš naujo paleidžia cmdlet, yra grubus variantas, bet ji veikia ir palieka žurnalą. Pasirinkite vieną DNS savininką ir užsirašykite, kuris tai yra.

Vidiniai vienos etiketės vardai taip pat reikalauja priesagų paieškos sąrašo. Set-DnsClientGlobalSetting -SuffixSearchList galioja visai mašinai, todėl keičia skyrimą kiekvienam kompiuterio adapteriui, įskaitant Ethernet. Išbandykite laboratorinėje mašinoje, prieš tai patenkant į atvaizdį.

Patikrinkite skyrimą, ne tik nustatymą

Adapteryje nurodytas rezolveris įrodo tik tai, kad reikšmė buvo įrašyta. Paklauskite numatyto serverio tiesiogiai, tada paklauskite įprastu keliu:

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

Skirtumas parodo, kur yra gedimas. Tiesioginė užklausa atsako, o paprastoji nepavyksta: adapterio nustatymas ar priesagų sąrašas neveikia. Abi nepavyksta: rezolveris nepasiekiamas per tunelį, todėl prieš vėl liesdami DNS pažiūrėkite maršrutus ir ugniasienės taisykles. Tiesioginė užklausa nepavyksta, o paprastoji atsako iš kitur: padalintas DNS sukonfigūruotas neteisingai ir į vidinį vardą atsako viešasis rezolveris, o tai yra politikos problema anksčiau, nei ryšio problema.

Paleiskite testą du kartus, vieną kartą iškart po prisijungimo, o kitą po atsijungimo ir prisijungimo iš naujo, ir palyginkite Get-DnsClientServerAddress išvestį iš abiejų paleidimų. Jei siųsta reikšmė grįžo antrajame ryšyje, perrašymas gyveno ir mirė kartu su adapteriu, ir išliks tik ankstesniame skyriuje aprašyta NRPT arba strategijos taisyklė. Išsaugokite abu įrašus ir prisijungimo laiko žymas; jie atsakys į klausimą, ar tai išlieka, greičiau nei dar vienas taisymų ratas.

Susiję straipsniai