Jūs pakėlėte WireGuard, tunelis praleidžia srautą, o vidinis vardas vis dar neišsprendžiamas. Kitas žingsnis paprastai būna ieškoti DNS nustatymo WireGuard konfigūracijoje, tarsi partneris galėtų perduoti resolverį, kaip daro kai kurios kitos VPN. Negali. Rankos paspaudimas perduoda raktus, sąsajos adresus ir leidžiamus IP, ir jis neturi lauko DNS serveriams ar paieškos domenams. Resolverio politika gyvena kliente, ir būtent ten yra pataisos vieta.

Tunelis ir resolveris yra atskiros sutartys

WireGuard tyčia mažas. Jis perkelia paketus jūsų išvardytiems adresams ir autentifikuoja partnerius; viskas virš to sluoksnio yra jūsų dizainas. OpenVPN gali perduoti dhcp-option DNS, nes jo valdymo kanalas perduoda konfigūraciją, ir šis skirtumas suklupdo tuos, kurie pereina tarp jų.

Taigi veikiantis tunelis nieko nesako apie vardų sprendimą. Klientas gali turėti tobulą maršrutą į 10.90.0.1 ir vis tiek siųsti užklausas viešam resolveriui, todėl simptomas atrodo kaip “VPN sugadino DNS”, nors DNS niekada nebuvo nukreiptas į VPN.

Aptarnaukite zoną netapdami rekursyviu resolveriu

Serverio pusė yra maža autoritatinė zona, ne bendras resolveris. Šiame pavyzdyje šliuzas yra 10.90.0.1, klientai yra 10.90.0.0/24, o programa, kuri jums rūpi, atsako adresu 10.60.0.20.

Sujunkite šiuos nustatymus į esamą options bloką, o ne kurkite antrą:

options {
    listen-on { 127.0.0.1; 10.90.0.1; };
    listen-on-v6 { none; };
    allow-query { 127.0.0.1; 10.90.0.0/24; };
    allow-transfer { none; };
    recursion no;
};

Tada deklaruokite zoną ir jos failą:

zone "corp.example" {
    type primary;
    file "/etc/bind/db.corp.example";
};
$TTL 300
@ IN SOA ns.corp.example. hostmaster.corp.example. ( 1 3600 600 604800 300 )
@      IN NS ns.corp.example.
ns     IN A  10.90.0.1
portal IN A  10.60.0.20

Patikrinkite prieš perkraudami, nes sintaksės klaida įkeliant numeta visą serverį kiekvienai zonai, kurią jis aptarnauja:

named-checkconf
named-checkzone corp.example /etc/bind/db.corp.example

Atidarykite UDP ir TCP 53 tik VPN sąsajoje. Skelbti privačią autoritetą viešoje sąsajoje kviečia ir užklausas, ir išvardijimą, o allow-transfer turėtų likti uždarytas, nebent antrinis tikrai jo reikia.

Nukreipkite klientą į ją, kiekvienai jungčiai

Tarkime, kad ryšį valdo NetworkManager, o resolveris yra systemd-resolved. Pirmiausia perskaitykite esamą politiką, ypač bet kurį šakninio maršrutizavimo domeną, nes ~. įrašas pranoks tai, ką ketinate pridėti.

nmcli connection modify wg-office +ipv4.dns 10.90.0.1
nmcli connection modify wg-office +ipv4.dns-search '~corp.example'

Tildė yra svarbus simbolis. Ji žymi domeną kaip tik-maršrutą: vardai po corp.example eina į šios jungties DNS serverį, o domenas nepridedamas kaip trumpo vardo paieškos priesaga. Be jos, rašant portal pradedama spręsti portal.corp.example, kas patogu jums ir netikėta visiems kitiems. Laikykite tildę kabutėse, nes be kabučių ji yra shell išplėtimas, laukiantis nurodyti į jūsų namų katalogą.

Taikykite pakeitimą per sąsają valdantį tvarkyklę, tada iš naujo prijunkite ryšį. Nepaleiskite antros wg-quick kopijos tai pačiai sąsajai; du savininkai kovos dėl maršrutų ir vienas jų laimės blogiausiu momentu.

Patikrinkite kelią prieš vardą

Užklauskite vardo iš kliento ir patvirtinkite ir atsakymą, ir serverį, kuris jį pateikė:

resolvectl query portal.corp.example

Jei tai grąžina 10.60.0.20, DNS sutartis įvykdyta. Jei laikas baigiasi, pirmiausia patikrinkite maršrutą į 10.90.0.1, po to ugniasienės taisyklę, po to allow-query serveryje. Vardų sprendimo nesėkmės šioje konfigūracijoje beveik visada yra pasiekiamumas arba ACL, o ne zonos failas. Dirbkite nuo kliento į išorę, nes serveris negali pasakyti, kodėl užklausa niekada neatėjo.

Atminkite, kad programai vis dar reikia savo maršruto ir savo paslaugos leidimo. Išspręstas vardas, nurodantis į nepasiekiamą adresą, yra kita gedimas tais pačiais drabužiais.

Kas vis dar ne automatiška

Programos su savo resolverio logika visiškai ignoruoja sistemos resolverį, ir joks nmcli kiekis to nepakeis. Diegimai, kurie tikrina DNSSEC, privačiai zonai reikia aiškaus pasitikėjimo inkaro dizaino; atsakymas nėra bendra instrukcija išjungti tikrinimą. Testuokite ta pačia kliento programine įranga, kurią naudoja jūsų vartotojai, o ne įrankiu, kuris atsitiktinai naudoja sistemos resolverį. Skirtumas tarp šių dviejų yra visas klaidų pranešimas.

Flotės gali automatizuoti šią kliento politiką per savo aprūpinimo sistemą, bet politika lieka atskiras objektas su savininku. BIND 9 žinynas apima aukščiau naudojamus klausymosi ir užklausų valdiklius, ir tai tinkama vieta patvirtinti elgseną jūsų įdiegtai versijai.

Kitas žingsnis: pridėkite zonos serijos numerio didinimą ir tikrinimo komandas į savo pakeitimų procedūrą, kad įrašo redagavimas negalėtų nepastebėtas pasiekti produkcijos.

Susiję straipsniai