Menyenaraikan dua penyelesai pada satu penyesuai kelihatan seperti cara menghantar satu domain ke satu pelayan dan domain lain ke pelayan yang lain, dan tiada apa dalam senarai penyelesai berfungsi begitu. Windows menyelesaikan mengikut nama, dan keputusan pelayan mana yang ditanya datang daripada objek dasar dan bukan daripada senarai alamat tersusun. Model mental yang perlu diganti ialah baris gilir: tiada pelayan pertama untuk domain A dan pelayan kedua untuk domain B. Terdapat set peraturan bagi setiap ruang nama yang menamakan pelayan secara eksplisit, dan apabila peraturan itu wujud, senarai penyesuai tidak lagi menarik.

Mitos: dua alamat membahagi dua domain

Kepercayaan ini kekal kerana ia berfungsi secara kebetulan apabila satu pelayan menjawab segala-galanya dan yang kedua hanyalah sandaran. Klien bertanya kepada pelayan pertama, pelayan itu memajukan atau membuat rekursi, dan jawapannya tiba; tiada siapa perasan penyelesai mana yang sebenarnya memegang zon itu. Ilusi itu pecah pada saat kedua-dua ruang nama tinggal dalam zon peribadi berasingan tanpa pemajuan antara mereka, kerana pelayan pertama kemudian menjawab secara berwibawa bahawa nama itu tidak wujud. Jawapan negatif daripada pelayan pertama tidak mencetuskan sandaran, kerana klien menerima jawapan muktamad dan bukan kegagalan.

Senarai tersusun tidak mempunyai konsep domain, jadi ia tidak boleh menyatakan hasrat. Apa yang benar-benar dikawal oleh senarai ialah pelayan mana yang ditanya dahulu dan mana yang dicuba kedua, dan kedua-dua jawapan itu terpakai sama rata kepada setiap nama.

Apa yang sebenarnya digunakan Windows untuk memilih

Jadual Dasar Penyelesaian Nama memadankan nama dengan ruang nama yang dikonfigurasikan dan memilih pelayan serta pilihan untuk padanan itu. Peraturan boleh dikonfigurasikan secara tempatan, dihantar melalui Dasar Kumpulan, atau dibekalkan oleh profil VPN, dan dasar berkesan ialah gabungan dan bukan satu senarai. Itulah sebabnya diagnosis pertama sentiasa keadaan berkesan: peraturan yang dicipta secara tempatan tetapi kalah kepada dasar terurus menghasilkan makmal yang berkelakuan sama sekali tidak seperti yang dicadangkan oleh konfigurasinya. Peraturan juga dipadankan mengikut kekhususan, jadi entri ruang nama yang luas boleh menenggelamkan yang sempit dengan cara yang tidak kelihatan dalam senarai item yang dikonfigurasikan. Membaca susunan berkesan ialah satu-satunya cara untuk melihat peraturan mana yang menang.

Get-DnsClientNrptRule
Get-DnsClientNrptPolicy -Effective

Perintah pertama menyenaraikan apa yang dikonfigurasikan pada mesin; yang kedua menunjukkan apa yang sebenarnya akan digunakan oleh klien, termasuk entri yang datang dari tempat lain. Jika output berkesan mengandungi ruang nama terurus, pemilik dasar itu ialah tempat yang betul untuk meminta perubahan, bukan senarai peraturan tempatan. Kedua-dua perintah hanya membaca keadaan, jadi menjalankannya sebelum seseorang bersetuju dengan perubahan tidak merugikan apa-apa.

Satu peraturan bagi setiap ruang nama, simpan objek itu

Setelah keadaan berkesan difahami, cipta satu peraturan bagi setiap ruang nama dan simpan objek yang dikembalikan oleh setiap perintah. Nama paparan ialah label untuk manusia, dan pengecam unik dalam objek yang dikembalikan ialah sasaran pemadaman yang boleh dipercayai selepas itu. Tulis kedua-dua pengecam dalam nota perubahan yang sama yang merekodkan ruang nama dan penyelesai, kerana sesi yang menciptanya bukan sesi yang akan membersihkan.

$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

Titik di hadapan menandakan padanan akhiran, jadi peraturan meliputi app.svc.internal.example dan apa-apa di bawahnya. Dua alamat di sini milik pelan penghalaan makmal ini sendiri; peraturan tidak mencipta zon, tidak memasang laluan dan tidak memberi kuasa kepada aplikasi yang akhirnya bersambung, dan rujukan Add-DnsClientNrptRule mendokumentasikan dengan tepat parameter mana yang melakukan apa.

Perhatikan apa yang tidak dilakukan oleh perintah ini: ia untuk seluruh mesin, tidak terhad kepada sesi VPN, dan kekal selepas tetingkap ditutup. Makmal yang melupakan ini meninggalkan dasar selepas terowong hilang.

Buktikan bahawa klien memilih pelayan

Bertanya kepada pelayan tertentu sama ada ia mengenali sesuatu nama membuktikan pelayan itu boleh menjawab, yang bukan dakwaan yang sama dengan klien memilih pelayan itu. Ujian yang penting menyelesaikan nama sebenar melalui laluan klien biasa dan kemudian mengesahkan penyelesai mana yang mengendalikannya, sebaik-baiknya semasa terowong yang membekalkan laluan itu hidup. Jika terowong mati, peraturan yang berskop dengan betul masih menunjuk ke pelayan yang tidak dapat dicapai, dan itu masalah penghalaan dan bukan dasar. Uji kedua-dua keadaan supaya kedua-duanya boleh dibezakan kemudian.

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

Perhatikan jawapan cache daripada tempoh sebelum peraturan wujud, dan perhatikan aplikasi yang memintas penyelesai sistem sepenuhnya dengan DNS tersulit mereka sendiri. Akhiran carian ialah ciri berasingan yang lain: peraturan boleh memilih penyelesai untuk nama penuh tanpa mengajar Windows mengembangkan nama hos kosong ke dalam ruang nama itu.

Buang tepat apa yang anda cipta

Pembersihan ialah tempat makmal menjadi kisah pengajaran. Memadam setiap peraturan pada mesin adalah pantas dan membuang dasar yang diharapkan oleh orang lain, jadi gunakan pengecam yang ditangkap semasa peraturan dicipta, dan baca semula keadaan berkesan selepas itu untuk mengesahkan mesin kembali ke tempat ia bermula. Jika sesi yang menciptanya sudah tiada, nota perubahan ialah satu-satunya tempat pengecam itu wujud. Itulah sebabnya ia ditulis sebelum perintah pertama dijalankan, bukan selepasnya.

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

Untuk penggunaan sebenar dan bukan makmal, persoalan jangka hayat sama penting dengan peraturan. Profil VPN boleh membawa peraturan ruang nama dan memilih sama ada ia kekal selepas sambungan; peraturan yang kekal sedangkan penyelesai tidak dapat dicapai membiarkan klien mengutamakan pelayan mati, dan peraturan berskop sambungan hilang apabila terowong hilang. Tentukan tingkah laku mana yang diperlukan oleh perkhidmatan, tandakan siapa pemilik peraturan, dan biarkan pembahagian kuasa didokumentasikan di sebelah profil dan bukan dalam ingatan seseorang tentang makmal.

Artikel berkaitan