Namen worden naar adressen omgezet, en die adressen kunnen in een firewallset belanden die later het routeren beïnvloedt, wat sturing op basis van naam zonder proxy mogelijk maakt. De valkuil is dat vier componenten goed moeten overdragen: de resolver, de set, de classifier die een nieuwe flow markeert en de peer die hem draagt. Elke overdracht faalt anders en elk houdt zijn eigen tijd bij.

Behandel het ontwerp als een keten en niet als een configuratie. De vraag bij elke stap is welke component de beslissing bezit en wat er gebeurt als zijn invoer ontbreekt.

Wat het DNS-antwoord wel en niet kan

dnsmasq kan adressen uit antwoorden in een nftables-set kopiëren, wat een voeding is en geen routeringsbeslissing. Die optie, gedocumenteerd in de dnsmasq-handleiding, noemt de familie, de tabel en de set, en de voorlopende 4# selecteert alleen A-records, dus v6-bestemmingen hebben hun eigen regeling nodig. De set moet al bestaan, omdat de resolver elementen toevoegt aan iets dat de eigenaar van de firewall heeft gemaakt. Niets in die stap kiest een interface, een tabel of een peer.

De client moet ook die resolver voor de naam gebruiken. Een toepassing met eigen versleutelde DNS, of een gecachet antwoord van voordat het beleid bestond, verbindt zonder enige vermelding in de set te maken.

De set is invoer, geen route

Een element in een set is een overeenkomstvoarde. Iets moet ernaar kijken, beslissen dat dit pakket een nieuwe flow begint, en het beleid toepassen dat de flow door de tunnel stuurt. Op Linux betekent dat meestal een routeerbaar uitpad dat een mark kan zetten, een regel die gemarkeerde pakketten naar een aparte tabel stuurt, en een route in die tabel naar het WireGuard-apparaat. Alleen lidmaatschap installeert daar niets van.

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

De peer past een tweede dekkingscontrole toe die mensen vergeten. WireGuard versleutelt een pakket alleen voor een peer wiens toegestane adressen de bestemming omvatten, dus een beleidsroute naar de interface is niet genoeg wanneer de lijst van de peer dat prefix uitsluit. Houd de lijst onder controle van de routeringseigenaar in plaats van te vertrouwen op welke routeaanmaak de beheerder toevallig doet.

Markeringen, tabellen en peer-dekking

Markeringen zijn een gedeelde naamruimte, dus zowel de waarde als het masker moeten worden afgestemd met al het andere dat ze gebruikt. Een regel die gemarkeerd verkeer naar een aparte tabel stuurt, heeft een gedefinieerd resultaat nodig wanneer die tabel geen overeenkomende route heeft, want een onbeantwoorde opzoeking kan doorgaan naar de volgende regel en het pakket via de fysieke interface naar buiten sturen. Een blackhole-standaardroute in de aparte tabel maakt die stille ontsnapping tot een zichtbare drop. Wat het ontwerp nog steeds niet kan, is sluiten bij falen voor een bestemming die nooit in de set kwam.

De eigen buitenste pakketten van de tunnel moeten de classifier ontwijken. WireGuard-gereedschap biedt precies daarvoor een socketmarkering, en het gebruik daarvan voorkomt dat de inkapseling terug wordt gerouteerd naar de interface die het bouwt.

Test elke levensduur apart

Drie opslagplaatsen verouderen volgens drie schema's: de cache van de resolver, de elementen van de set en de gevolgde verbinding. Test ze in die volgorde en kijk of elk beweegt wanneer het moet. De opdrachten hieronder lezen de resolver, de set, de verbindingstabel en de beleidsregels zonder iets te wijzigen.

dig +short office.example
nft list set inet vpn_select office_v4
conntrack -L -d 10.60.8.15
ip rule show

Een verse opzoeking die een element toevoegt, bewijst dat de voeding werkt, terwijl een verouderd element dat zijn antwoord overleeft een levensduurverschil is dat het noteren waard is. Een nieuwe verbinding in de verbindingstabel met de verwachte markering toont dat de classifier liep, en een oude verbinding die zijn oorspronkelijke markering houdt is correct gedrag en geen fout. De regellijst beantwoordt of de beleidsopzoeking überhaupt bestaat, wat een andere vraag is dan of die overeenkwam. Lees de vier uitvoer in die volgorde en de falende overdracht verraadt zichzelf.

Waar de eis is dat een bepaalde naam altijd één pad gebruikt, kan een DNS-gevoede set dat niet bewijzen, omdat gedeelde adressen ook andere namen dragen. Een proxy of een mechanisme op toepassingsniveau is het gereedschap voor die garantie.

Gerelateerde artikelen