Постављање DNS-а на Windows VPN адаптеру помоћу PowerShell-а и затим провера
Windows везује DNS тунела за адаптер, а не за VPN профил. Поставите га након повезивања у PowerShell-у, затим проверите да ли га поновно повезивање задржава.
Windows VPN веза не чува DNS сервере у профилу који уређујете у Подешавањима. Када се тунел подигне, клијент преговара о IP конфигурацији са гејтвејом, гејтвеј шаље листу резолвера, а Windows је примењује на адаптер тунела. Тај адаптер је одвојен интерфејс од вашег Wi-Fi или Ethernet-а, а листа припада интерфејсу, не профилу. Када знате који објекат поседује вредност, преписивање у PowerShell-у је једна команда; учинити да преписивање преживи поновно повезивање је део који тражи одлуку.
Који објекат поседује адресу
RAS ствара адаптер тунела када веза успе и уклања га када веза падне. DNS сервери које видите у ipconfig /all долазе током те размене конфигурације, поред IPv4 и IPv6 адреса и рута. Пошто је вредност везана за интерфејс, Set-DnsClientServerAddress пише у нешто што постоји само док веза постоји.
Та једна чињеница објашњава највећи део забуне око DNS-а на VPN-у. Профил се може прегледати док сте искључени, али нема интерфејса на који би се показало, па скрипта за пријаву која позива cmdlet на VPN алијас пада пре него што се ико повезао. Објашњава и промену која изгледа као да се вратила: ништа се није вратило, интерфејс је уништен и поново изграђен са вредностима које је гејтвеј послао.
Пронађите алијас пре него што дирате DNS
Назив профила и алијас интерфејса обично су исти низ знакова, али нису исти објекат. Get-VpnConnection приказује профиле; Get-NetAdapter приказује интерфејсе које Windows заиста има. DNS cmdlet-ови траже други, и њих двоје се разилазе чешће него што људи очекују, посебно када клијент имену адаптера дода опис попут "(RAS)".
Ако профил не постоји, PowerShell може да направи изворни запис. Тип тунела и провера идентитета морају да одговарају ономе што гејтвеј нуди, јер се неспагање показује при повезивању, а не при стварању:
Add-VpnConnection -Name "Corporate" -ServerAddress vpn.example.net `
-TunnelType Ikev2 -EncryptionLevel Required `
-AuthenticationMethod Eap -AllUserConnection
Повежите се једном, затим прочитајте стварни алијас пре него што напишете било коју DNS команду:
rasdial.exe "Corporate"
Get-NetAdapter | Where-Object InterfaceDescription -like "*VPN*"
Get-DnsClientServerAddress -InterfaceAlias "Corporate"
Примените преписивање у исправном редоследу
Редослед је важнији од синтаксе. Адаптер мора да буде подигнут, алијас мора да се разреши, а налог мора да има дозволу да мења подешавања интерфејса. Веза по кориснику обично прихвата промену од пријављеног корисника; веза за све кориснике направљена са -AllUserConnection обично захтева подигнуту љуску.
Сам cmdlet је једна линија, документован у Microsoft-овој референци за Set-DnsClientServerAddress:
Set-DnsClientServerAddress -InterfaceAlias "Corporate" -ServerAddresses 10.20.0.53,10.20.0.54
Get-DnsClientServerAddress -InterfaceAlias "Corporate" -AddressFamily IPv4
Два начина отказа вреди препознати на први поглед. Погрешан алијас даје грешку из cmdlet-а, и то је добар исход, јер би тишина била гора. Исправан cmdlet без видљивог ефекта обично значи да гледате погрешан адаптер: заостали адаптер тунела од другог клијента, физичку мрежну картицу са сличним описом, или други виртуелни адаптер који је направио мрежни алат у изолованом окружењу.
Зашто поновно повезивање може да поништи промену
Преписивање припада једној инстанци интерфејса. Када клијент размонтира адаптер и поново га изгради при следећем повезивању, послате вредности се поново примењују и ваша листа нестаје. Неки клијенти поново стварају интерфејс при сваком повезивању; други га користе цео век сесије. Упоредите индекс интерфејса у Get-NetAdapter између две везе и знаћете какво понашање имате.
Постоје три трајна одговора, а њихово слагање ствара сопствене грешке. DNS суфикс специфичан за везу плус NRPT правило шаље само интерни простор имена интерном резолверу и оставља јавна имена на миру. Подешавање групне политике или MDM-а примењено на VPN везу поставља DNS при повезивању без икакве скрипте. Заказани задатак који реагује на догађај везе и поново покреће cmdlet је груба опција, али ради и оставља дневник. Изаберите једног власника DNS-а и запишите који је.
Интерна имена са једном ознаком такође траже листу за претрагу суфикса. Set-DnsClientGlobalSetting -SuffixSearchList важи за цело рачунало, па мења разрешавање за сваки адаптер на њему, укључујући Ethernet. Испробајте га на лабораторијском рачунару пре него што уђе у слику.
Проверите разрешавање, не само подешавање
Резолвер наведен на адаптеру доказује само да је вредност записана. Питајте намеравани сервер директно, затим питајте уобичајеним путем:
Resolve-DnsName server01.corp.example -Server 10.20.0.53
Resolve-DnsName server01.corp.example
Ова подела вам каже где је квар. Директан упит одговара, а обичан упит пада: подешавање адаптера или листа суфикса није на снази. Оба падају: резолвер је недоступан кроз тунел, па пре него што поново дирате DNS, погледајте руте и правила заштитног зида. Директан упит пада док обичан одговара са другог места: подељени DNS је погрешно конфигурисан и на интерно име одговара јавни резолвер, што је проблем политике пре него проблем повезаности.
Покрените тест двапут, једном одмах после повезивања и једном после искључивања и поновног повезивања, и упоредите излаз Get-DnsClientServerAddress из оба покретања. Ако се послата вредност вратила на другој вези, преписивање је живело и умрло са адаптером, и само NRPT или путања политике из претходног одељка ће се одржати. Сачувајте оба записа и временске ознаке повезивања; они решавају питање да ли остаје брже од још једног круга измена.