DNS maitinamas nftables rinkinys į WireGuard: kaip veikia perdavimas
DNS atsakymas gali maitinti nftables rinkinį, bet rinkinys nieko nemaršrutizuoja. Sekite keturis perdavimus ir tris gyvavimo trukmes, kurios nusprendžia, ar nukreipimas veiks.
Vardai išsprendžiami į adresus, ir tie adresai gali patekti į ugniasienės rinkinį, kuris vėliau veikia maršrutizavimą, o tai leidžia nukreipimą pagal vardą be tarpinio serverio. Kabliukas tas, kad keturi komponentai turi perduoti teisingai: sprendiklis, rinkinys, klasifikatorius, pažymintis naują srautą, ir partneris, kuris jį neša. Kiekvienas perdavimas nepavyksta savaip, ir kiekvienas laiko savo laiką.
Traktuokite dizainą kaip grandinę, o ne kaip konfigūraciją. Kiekviename žingsnyje kyla klausimas, kuris komponentas valdo sprendimą ir kas nutinka, kai trūksta jo įvesties.
Ką DNS atsakymas gali ir ko negali
dnsmasq gali kopijuoti adresus iš atsakymų į nftables rinkinį, ir tai yra maitinimas, o ne maršrutizavimo sprendimas. Ta parinktis, dokumentuota dnsmasq vadove, nurodo šeimą, lentelę ir rinkinį, o jos pradinis 4# parenka tik A įrašus, todėl v6 paskirties vietoms reikia savo tvarkos. Rinkinys turi jau egzistuoti, nes sprendiklis prideda elementus į tai, ką sukūrė ugniasienės savininkas. Tame žingsnyje niekas neparenka sąsajos, lentelės ar partnerio.
Klientas taip pat turi naudoti tą sprendiklį vardui. Programa su savo šifruotu DNS arba podėlyje esantis atsakymas iš laikų prieš politiką prisijungia nesukurdama nė vieno įrašo rinkinyje.
Rinkinys yra įvestis, o ne maršrutas
Rinkinio elementas yra atitikimo sąlyga. Kažkas turi į jį pažvelgti, nuspręsti, kad šis paketas pradeda naują srautą, ir pritaikyti politiką, kuri siunčia srautą per tunelį. Linux tai paprastai reiškia maršrutizavimui pajėgų išvesties kelią, galintį uždėti žymą, taisyklę, siunčiančią pažymėtus paketus į atskirą lentelę, ir maršrutą toje lentelėje į WireGuard įrenginį. Vien narystė nieko iš to neįdiegia.
nft add set inet vpn_select office_v4 { type ipv4_addr\; }
ip rule add fwmark 0x40 table 200
ip route add default dev wg0 table 200
wg show wg0 allowed-ips
Partneris taiko antrą aprėpties patikrą, kurią žmonės pamiršta. WireGuard šifruoja paketą tik partneriui, kurio leidžiami adresai apima paskirties vietą, todėl politikos maršrutas į sąsają nepakanka, kai partnerio sąrašas neapima šio prefikso. Laikykite sąrašą maršrutizavimo savininko kontrolėje, o ne pasikliaukite tuo, kokį maršrutų kūrimą atsitiktinai atlieka tvarkyklė.
Žymos, lentelės ir partnerio aprėptis
Žymos yra bendra vardų erdvė, todėl ir reikšmė, ir kaukė turi būti suderintos su viskuo kitu, kas jas naudoja. Taisyklė, siunčianti pažymėtą srautą į atskirą lentelę, reikalauja apibrėžto rezultato, kai toje lentelėje nėra atitinkančio maršruto, nes neatsakytas ieškojimas gali tęstis prie kitos taisyklės ir išsiųsti paketą per fizinę sąsają. Blackhole numatytasis maršrutas atskiroje lentelėje paverčia tą tylų pabėgimą matomu numetimu. Ko dizainas vis dar negali, tai užsidaryti gedimo atveju paskirties vietai, kuri niekada nepateko į rinkinį.
Tunelio pačių išoriniai paketai turi išvengti klasifikatoriaus. WireGuard įrankiai būtent tam teikia lizdo žymą, ir jos naudojimas neleidžia inkapsuliavimui būti nukreiptam atgal į sąsają, kurią jis stato.
Tikrinkite kiekvieną gyvavimo trukmę atskirai
Trys saugyklos sensta pagal tris grafikus: sprendiklio podėlis, rinkinio elementai ir sekama jungtis. Tikrinkite juos ta tvarka ir stebėkite, ar kiekviena juda, kai turi. Toliau pateiktos komandos skaito sprendiklį, rinkinį, jungčių lentelę ir politikos taisykles nieko nekeisdamos.
dig +short office.example
nft list set inet vpn_select office_v4
conntrack -L -d 10.60.8.15
ip rule show
Naujas ieškojimas, pridedantis elementą, įrodo, kad maitinimas veikia, o pasenęs elementas, pergyvenęs savo atsakymą, yra gyvavimo trukmės neatitikimas, kurį verta užsirašyti. Nauja jungtis jungčių lentelėje su laukiama žyma rodo, kad klasifikatorius veikė, o sena jungtis, išlaikanti pradinę žymą, yra teisingas elgesys, o ne klaida. Taisyklių sąrašas atsako, ar politikos ieškojimas apskritai egzistuoja, ir tai yra kitas klausimas nei ar jis atitiko. Perskaitykite keturis išėjimus ta tvarka, ir nepavykęs perdavimas pats save išduos.
Kai reikalavimas yra, kad tam tikras vardas visada naudotų vieną kelią, DNS maitinamas rinkinys to įrodyti negali, nes bendri adresai neša ir kitus vardus. Tarpinis serveris arba programos lygmens mechanizmas yra tos garantijos įrankis.