nftables-markeringen en VPN-routing: welke regel wint echt
Een markering in de firewall kan de routeringsregel alsnog missen. Controleer het masker van de regel, het objecttype en de andere schrijvers voordat u een vierde toevoegt.
Een markering die in nftables wordt gezet, hoort één klasse verkeer door de tunnel te sturen, en het verkeer blijft via de fysieke interface naar buiten gaan. De regelset ziet er op zichzelf correct uit. Wat er meestal is gebeurd, is dat iets anders dezelfde markering heeft geschreven, of dat de routeringsregel overeenkomt met een masker waaraan de nieuwe waarde niet meer voldoet.
Controle 1: lees de regel waarop de kernel matcht
Begin bij de policyregel in plaats van bij de firewall. De kernel bekijkt regels in prioriteitsvolgorde en de eerste overeenkomst bepaalt de tabel. Lees de fwmark-waarde en het masker uit de regel zelf en bevestig dan dat een pakket met de markering die u hebt gezet er echt op matcht. Een regel die een volledige 32-bits waarde verwacht, matcht niet op een pakket dat slechts één bit draagt.
Bevestig vervolgens welke tabel die regel kiest en wat de tabel bevat. Een regel die naar een lege tabel wijst, levert een mislukte opzoeking op, wat op veel systemen betekent dat het pakket doorvalt naar de volgende regel en via de fysieke interface naar buiten gaat.
Twee commando's beslissen dit: de regellijst en de routeopzoeking voor de bestemming in die tabel.
Controle 2: pakketmarkering of verbindingsmarkering
nftables kan een markering op het pakket zetten en een markering op de verbindingstracking-regel, en dat zijn verschillende objecten. De pakketmarkering leeft voor de verwerkingsronde van het pakket, terwijl de verbindingsmarkering voor de flow blijft bestaan en bewust gekopieerd moet worden. Het ene zetten en het andere verwachten is een gangbare halve oplossing.
Als de routeringsregel op de pakketmarkering leunt, doet het later in het pad herstellen van de verbindingsmarkering niets voor die beslissing, omdat de beslissing al is genomen.
Bepaal welk object het routeringssignaal bezit en zet het vervolgens op het punt waar de routeringsbeslissing wordt genomen.
Controle 3: wie schrijft die markering nog meer
De eigen gereedschappen van WireGuard markeren hun UDP-pakketten zodat het versleutelde transport niet terug wordt gerouteerd naar de tunnel waartoe het behoort. Als uw regelset aan hetzelfde veld een ongerelateerde waarde toekent, verdwijnt die uitsluiting en probeert het buitenste verkeer van de tunnel zichzelf binnen te gaan. Het symptoom is een tunnel die tot stand komt en daarna stopt met verkeer doorlaten.
Markeringen worden ook gebruikt door andere firewallgereedschappen, door containernetwerken en door beleidsroutering voor andere doeleinden, dus twee subsystemen die het hele veld schrijven is een conflict, zelfs wanneer elk afzonderlijk correct is.
Lijst de schrijvers op voordat u er nog een toevoegt.
Controle 4: het masker bepaalt wat u houdt
Een markering is een veld van 32 bits, en maskers zijn de manier waarop meerdere eigenaren het delen. Een waarde met een masker zetten behoudt de bits die u niet bezit; het hele veld zetten vernietigt die van alle anderen. Lees het masker in elke regel die het veld raakt, ook in de regels die u niet hebt geschreven.
Documenteer de bittoewijzing naast de regelset.
Anders hergebruikt de volgende persoon een waarde die al een eigenaar heeft, en een conflict hier lijkt op een routeringsfout terwijl het een adresseringsfout is. De nftables-documentatie over pakketmetadata beschrijft de markeringsbewerkingen zelf.
Controle 5: verifieer met een echte flow, niet met een opzoeking
Een gewone routeopzoeking draagt geen markering, dus kan die een ander pad tonen dan het echte pakket. Genereer het verkeer dat u belangrijk vindt en observeer de tellers, de verbindingstracking-regel en de interface waar het daadwerkelijk uit gaat. Test zowel de inbegrepen klasse als de uitgesloten klasse, want een te brede markering breekt de uitsluiting terwijl het geslaagd lijkt. Als de inbegrepen klasse werkt en de uitgesloten klasse ook de tunnel in gaat, is de markering te breed en niet te smal.
Vermijd het leegmaken van de verbindingsstatus om een verversing af te dwingen tijdens een actieve sessie, omdat nieuwe en bestaande flows legitiem verschillende paden kunnen nemen.
Leg de markering, het masker en de tabel op één plek vast, en de volgende wijziging wordt beoordeelbaar.