Delad DNS över OpenVPN: vad en routingdomän måste göra på varje operativsystem
Ett söksuffix, en routingdomän och en IP-rutt är tre olika saker. Sätt policyn per plattform och bevisa sedan vilken server som svarade på frågan.
Varje begäran om delad DNS börjar med samma mening: företagets namn går till företagets DNS och allt annat fortsätter att fungera. Att göra den meningen till en konfiguration innebär att svara på tre frågor per operativsystem, och svaren använder olika mekanismer på varje. Profiler som fungerar på en Linux-bärbar dator misslyckas ofta på Windows av skäl som inte har något med tunneln att göra. Glappet är oftast en resolverinställning som förväxlas med en rutt.
Namnge policyn först och välj sedan den plattformsprimitiv som uttrycker den.
Tre inställningar som är lätta att förväxla
Ett söksuffix expanderar ett kort namn: när du skriver files blir det files.corp.example när resolvern provar suffix i ordning. En routingdomän väljer vilken resolver som svarar på frågor inom ett namnområde. En IP-rutt gör bara den valda resolvern nåbar. Dessa tre lever i olika lager, och att byta ut det ena mot det andra ger en konfiguration som ser rätt ut och inte löser någonting.
Förvirringen har ett pris: att lägga till ett söksuffix skickar varje kort namn till jobbets resolver, även namn som hör någon annanstans. Att välja en routingdomän håller orelaterade frågor kvar hos den lokala resolvern och skickar fortfarande *.corp.example genom tunneln.
Linux: en domän endast för routing, inte ett söksuffix
På systemd-resolved är en domän med tilde som prefix en domän endast för routing, vilket betyder att frågor för det namnområdet går till den länkade resolvern utan att också bli ett söksuffix. resolvectl domain tun0 '~corp.example' ställer in det, och resolvectl dns tun0 10.8.0.1 namnger servern. Båda inställningarna tillhör gränssnittet, så de försvinner med det. Tilden är den del folk utelämnar, och utan den börjar korta namn lösas via jobbets resolver.
Installera inte samma domän som ett globalt söksuffix också. De två inställningarna är inte överflödiga; den ena dirigerar och den andra skriver om det du skrev.
Windows behöver en namnområdespolicy, inte ett suffix
Windows förvarar policyn för delad DNS i tabellen för namnmatchning, inte i adapterns DNS-suffix. En regel mappar ett namnområde till specifika servrar: Add-DnsClientNrptRule -Namespace .corp.example -NameServers 10.8.0.1. Att bara ställa in suffixet ändrar hur korta namn ser ut; det dirigerar inte frågan till en annan server.
Kontrollera den gällande policyn med Get-DnsClientNrptPolicy efter anslutning, eftersom en regel från en tidigare anslutning kan överleva tunneln. Ta bort regler vid namn när tunneln går ner och håll visningsnamnet stabilt så att städningen träffar rätt post.
Håll en resolverägare per plattform
En skrivbordshanterare, ett OpenVPN up-skript och en lokal resolverdaemon kan alla försöka skriva samma konfiguration. När de inte är överens vinner den som skriver sist och resultatet beror på nedmonteringens ordning. Välj en komponent som äger resolverstatusen, låt de andra rapportera i stället för att skriva, och testa en återanslutning: policyn bör överleva den utan att regler dupliceras. Testa även en frånkoppling, eftersom kvarvarande status är det som gör att nästa anslutning beter sig annorlunda.
Program som levererar sin egen krypterade resolver ignorerar operativsystemets policy helt. Det är en egenskap hos programmet, inte en defekt i tunneln.
Verifiera resultatet, inte profiltexten
Lös ett namn som ska gå genom tunneln och ett som inte ska det, på varje plattform, och bekräfta vilken server som svarade. resolvectl query host.corp.example och Resolve-DnsName host.corp.example rapporterar båda vilken server som svarade. Upprepa efter en återanslutning. Bekräfta sedan att tunnelns resolver är nåbar på den adress som profilen skickar, eftersom en korrekt policy som pekar på en onåbar server misslyckas på samma sätt som ingen policy alls.
Anteckna det avsedda beteendet i profilens kommentarer: vilket suffix som dirigeras, vilken server som svarar på det och vad som händer med allt annat. Nästa plattform du stöder behöver den meningen mer än den behöver konfigurationsfilen.