DNS-alimentata nftables-aro al WireGuard: kiel funkcias la transdono
DNS-respondo povas alimenti nftables-aron, sed aro mem ne enkursigas ion. Sekvu la kvar transdonojn kaj la tri vivdaŭrojn, kiuj decidas ĉu la direktado funkcios.
Nomoj solviĝas al adresoj, kaj tiuj adresoj povas eniri fajroŝirman aron, kiu poste influas enkursigadon, kio ebligas nom-bazitan direktadon sen prokuro. La malfacilaĵo estas, ke kvar komponantoj devas transdoni ĝuste: la solvilo, la aro, la klasifikilo, kiu markas novan fluon, kaj la kunulo, kiu portas ĝin. Ĉiu transdono malsukcesas alimaniere kaj ĉiu tenas sian propran tempon.
Traktu la dezajnon kiel ĉeno, ne kiel agordo. La demando ĉe ĉiu paŝo estas, kiu komponanto posedas la decidon kaj kio okazas, kiam ĝia enigo mankas.
Kion la DNS-respondo povas kaj kion ne
dnsmasq povas kopii adresojn el respondoj en nftables-aron, kio estas nutrado, ne enkursiga decido. Tiu opcio, dokumentita en la dnsmasq-manlibro, nomas la familion, la tabelon kaj la aron, kaj ĝia komenca 4# elektas nur A-rikordojn, do v6-celoj bezonas propran aranĝon. La aro devas jam ekzisti, ĉar la solvilo aldonas elementojn al io, kion kreis la posedanto de la fajroŝirmilo. Nenio en tiu paŝo elektas interfacon, tabelon aŭ kunulon.
La kliento ankaŭ devas uzi tiun solvilon por la nomo. Aplikaĵo kun propra ĉifrita DNS, aŭ kaŝmemora respondo el antaŭ ol ekzistis la politiko, konektiĝas sen krei iun ajn enskribon en la aro.
La aro estas enigo, ne itinero
Elemento en aro estas kongrua kondiĉo. Io devas rigardi ĝin, decidi, ke ĉi tiu paketo komencas novan fluon, kaj apliki la politikon, kiu sendas la fluon tra la tunelo. En Linux tio kutime signifas eligan vojon kapablan je enkursigado, kiu povas meti markon, regulon sendantan markitajn paketojn al dediĉita tabelo, kaj itineron en tiu tabelo montrantan al la WireGuard-aparato. Membrojeco sola instalas neniun el tio.
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
La kunulo aplikas duan kovradan kontrolon, kiun homoj forgesas. WireGuard ĉifras paketon nur por kunulo, kies permesitaj adresoj enhavas la celon, do politika itinero en la interfacon ne sufiĉas, kiam la listo de la kunulo ekskludas tiun prefikson. Tenu la liston sub regado de la enkursiga posedanto anstataŭ fidi je tio, kian itineran kreon la administranto hazarde faros.
Markoj, tabeloj kaj kunula kovrado
Markoj estas komuna nomspaco, do kaj la valoro kaj la masko devas esti interkonsentitaj kun ĉio alia, kio uzas ilin. Regulo, kiu sendas markitan trafikon al dediĉita tabelo, bezonas difinitan rezulton, kiam tiu tabelo havas neniun kongruan itineron, ĉar senserva serĉo povas daŭrigi al la sekva regulo kaj elsendi la paketon tra la fizika interfaco. Blackhole-defaŭta itinero ene de la dediĉita tabelo ŝanĝas tiun silentan eskapopn en videblan forĵeton. Kion la dezajno ankoraŭ ne povas, estas fermiĝi ĉe malsukceso por celo, kiu neniam eniris la aron.
La propraj eksteraj paketoj de la tunelo devas eskapi la klasifikilon. La iloj de WireGuard provizas soketan markon ĝuste por tiu celo, kaj uzi ĝin malhelpas, ke la enkapsuligo enkursiĝu reen en la interfacon, kiun ĝi konstruas.
Testu ĉiun vivdaŭron aparte
Tri konservejoj maljuniĝas laŭ tri horaroj: la kaŝmemoro de la solvilo, la elementoj de la aro kaj la spurata konekto. Testu ilin en tiu ordo kaj observu, ĉu ĉiu moviĝas, kiam ĝi devus. La subaj komandoj legas la solvilon, la aron, la konektan tabelon kaj la politikajn regulojn sen ŝanĝi ion.
dig +short office.example
nft list set inet vpn_select office_v4
conntrack -L -d 10.60.8.15
ip rule show
Freŝa serĉo, kiu aldonas elementon, pruvas, ke la nutrado funkcias, dum malnova elemento, kiu postvivas sian respondon, estas vivdaŭra miskongruo inda je notado. Nova konekto aperanta en la konekta tabelo kun la atendata marko montras, ke la klasifikilo funkciis, kaj malnova konekto, kiu tenas sian originalan markon, estas ĝusta konduto, ne cimo. La reglisto respondas, ĉu la politika serĉo entute ekzistas, kio estas alia demando ol ĉu ĝi kongruis. Legu la kvar eligojn en tiu ordo kaj la malsukcesa transdono sin malkaŝos.
Kie la postulo estas, ke difinita nomo ĉiam uzu unu vojon, DNS-alimentata aro ne povas pruvi ĝin, ĉar kompartitaj adresoj portas ankaŭ aliajn nomojn. Prokuro aŭ mekanismo ĉe aplikaĵa nivelo estas la ilo por tiu garantio.