Изброяването на два резолвера на един адаптер изглежда като начин един домейн да се изпраща към един сървър, а друг домейн — към втория, и нищо в списъка с резолвери не работи така. Windows резолвира по име и решението кой сървър да бъде попитан идва от обекти на политиката, а не от подреден списък с адреси. Мисловният модел, който трябва да се замени, е опашката: няма първи сървър за домейн A и втори сървър за домейн B. Има набор от правила за всяко пространство от имена, който изрично назовава сървърите, и след като тези правила съществуват, списъкът на адаптера престава да бъде интересен.

Мифът: два адреса разделят два домейна

Вярването оцелява, защото работи случайно, когато един сървър отговаря на всичко, а вторият е само резерва. Клиентът пита първия сървър, той препраща или рекурсира и отговорът пристига; никой не забелязва кой резолвер всъщност е държал зоната. Илюзията се разпада в момента, в който двете пространства от имена живеят в отделни частни зони без препращане помежду им, защото първият сървър тогава отговаря авторитетно, че името не съществува. Отрицателен отговор от първия сървър не задейства резервата, тъй като клиентът е получил окончателен отговор, а не отказ.

Подреденият списък няма понятие за домейн, затова не може да изрази намерението. Списъкът всъщност управлява кой сървър се пита първи и кой се опитва втори, и двата отговора важат еднакво за всяко име.

Какво всъщност използва Windows, за да избира

Таблицата на политиката за резолвиране на имена съпоставя име с конфигурирани пространства от имена и избира сървърите и опциите за това съвпадение. Правилата могат да се конфигурират локално, да се доставят чрез групова политика или да се подават от VPN профил, а ефективната политика е комбинация, а не един списък. Затова първата диагностика винаги е ефективното състояние: локално създадено правило, което губи от управлявана политика, създава лаборатория, която се държи съвсем различно от конфигурацията си. Правилата се съпоставят и по специфичност, така че широк запис за пространство от имена може да засенчи тесен по начини, невидими в списък с конфигурирани елементи. Четенето на ефективния ред е единственият начин да се види кое правило печели.

Get-DnsClientNrptRule
Get-DnsClientNrptPolicy -Effective

Първата команда изброява какво е конфигурирано на машината; втората показва какво клиентът действително ще приложи, включително записи, дошли от другаде. Ако ефективният изход съдържа управлявани пространства от имена, собственикът на тази политика е правилното място за заявка за промяната, а не локалният списък с правила. И двете команди само четат състояние, така че изпълнението им преди някой да се съгласи с промяната не струва нищо.

Едно правило на пространство от имена, запазете обекта

След като ефективното състояние е ясно, създайте едно правило на пространство от имена и запазете обекта, който всяка команда връща. Показваните имена са етикети за хора, а уникалният идентификатор във върнатия обект е надеждната цел за изтриване след това. Запишете двата идентификатора в същата бележка за промяната, която отбелязва пространствата от имена и резолверите, защото сесията, която ги е създала, няма да е сесията, която чисти.

$svcRule = Add-DnsClientNrptRule -Namespace ".svc.internal.example" -NameServers "10.60.0.53" -DisplayName "VPN lab services" -PassThru
$resRule = Add-DnsClientNrptRule -Namespace ".research.internal.example" -NameServers "10.61.0.53" -DisplayName "VPN lab research" -PassThru
$svcRule | Select-Object Name, Namespace, NameServers
$resRule | Select-Object Name, Namespace, NameServers

Водещата точка означава съвпадение по суфикс, така че правилото покрива app.svc.internal.example и всичко останало под него. Двата адреса тук принадлежат на собствения маршрутен план на тази лаборатория; правилото не създава зона, не инсталира маршрут и не упълномощава приложението, което в крайна сметка се свързва, и справката за Add-DnsClientNrptRule описва точно кой параметър какво прави.

Обърнете внимание какво не правят тези команди: те са за цялата машина, не са ограничени до VPN сесия и оцеляват след затваряне на прозореца. Лаборатория, която забрави това, оставя политика след изчезването на тунела.

Докажете, че клиентът е избрал сървъра

Питането на конкретен сървър дали знае име доказва, че сървърът може да отговори, което не е същото твърдение като това, че клиентът е избрал този сървър. Тестът, който има значение, резолвира истинско име по обичайния клиентски път и после потвърждава кой резолвер се е справил с него, най-добре докато тунелът, който дава маршрута, е вдигнат. Ако тунелът е свален, правилно ограниченото правило пак сочи към недостижим сървър, което е проблем с маршрутизацията, а не с политиката. Тествайте и двете състояния, за да могат после да се различат.

Resolve-DnsName app.svc.internal.example
Resolve-DnsName build.research.internal.example
Resolve-DnsName app.svc.internal.example -DnsOnly -NoHostsFile

Следете за кеширани отговори от периода преди правилата да съществуват и за приложения, които напълно заобикалят системния резолвер със свой шифрован DNS. Суфиксите за търсене са още една отделна функция: правило може да избере резолвер за пълно име, без да учи Windows да разгръща голо име на хост в това пространство от имена.

Премахнете точно това, което създадохте

Почистването е мястото, където лабораторията се превръща в поучителна история. Изтриването на всяко правило на машината е бързо и премахва политика, на която някой друг разчита, затова използвайте идентификаторите, записани при създаването на правилата, и после прочетете отново ефективното състояние, за да потвърдите, че машината се е върнала там, откъдето е започнала. Ако сесията, която ги е създала, я няма, бележката за промяната е единственото място, където идентификаторите съществуват. Затова се записват преди първата команда, а не след нея.

Remove-DnsClientNrptRule -Name $svcRule.Name -Force
Remove-DnsClientNrptRule -Name $resRule.Name -Force
Get-DnsClientNrptPolicy -Effective

За внедряване, а не за лаборатория, въпросът за срока на живот е също толкова важен, колкото правилото. VPN профил може да носи правилата за пространства от имена и да избере дали те да останат след връзката; правило, което остава, докато резолверът е недостижим, оставя клиентите да предпочитат мъртъв сървър, а правило, ограничено до връзката, изчезва заедно с тунела. Решете кое от тези поведения е нужно на услугата, отбележете кой притежава правилото и оставете разделението на правомощията документирано до профила, а не в нечия памет за лаборатория.

Подобни статии