Dodate pravilo za VPN promet v verigo FORWARD, zaženete zahtevo z istega Linux stroja, in števec ostane na ničli. Pravilo je verjetno pravilno. Paket nikoli ni šel po tej poti, ker zahteve, ustvarjene na stroju samem, ta ne posreduje naprej. Sledenje življenju paketa od vtičnice do kabla pojasni zakaj, in kam pravilo pravzaprav sodi.

Ugotovite, kje se je paket rodil

Vrstni red kljuk v Netfiltru loči tri primere, in samo eden od njih vključuje FORWARD:

OriginPathHook that sees it
Local processOUTPUT then POSTROUTINGOUTPUT, POSTROUTING
Addressed to a local servicePREROUTING then INPUTPREROUTING, INPUT
Received for another hostPREROUTING, FORWARD, POSTROUTINGFORWARD

Lokalna aplikacija se začne na poti OUTPUT, ker je jedro že ugotovilo, da paket nastane tukaj in nikoli ni kandidat za posredovanje. Ustvarjanje tunela te klasifikacije ne spremeni; tunel je naprava, skozi katero lahko paket odide, ne stopnja, ki lokalni izhod spremeni v tranzit.

Dva paketa, ena zgodba

Ko je tunel vzpostavljen, sta notranji paket aplikacije in šifrirani zunanji paket različna objekta. Notranji paket nosi cilj in koristni tovor, ki ju je izbrala aplikacija. Zunanji paket nosi šifrirano besedilo na naslov in vrata partnerja, in prav on v resnici prečka fizični vmesnik.

Vaša politika se nanaša na enega od njiju, in izbira napačnega je pogost razlog, da se zdi, da pravilo ne naredi ničesar. Pravilo, ki se ujema z zunanjim naslovom partnerja, vidi vsak paket tunela enako, karkoli počne aplikacija znotraj. Pravilo, ki se ujema z notranjim ciljem, vidi promet, ki vas zanima, in sproži se le, če ta paket doseže kavelj, na katerega ste namestili pravilo.

Imenski prostori premaknejo mejo

Vsebnik to oteži, ne da bi spremenil načelo. Zahteva aplikacije je lokalni izhod znotraj omrežnega imenskega prostora vsebnika. Gostitelj ta promet prejme na navideznem vmesniku Ethernet in ga lahko posreduje naprej, zato je lahko pravilo FORWARD na gostitelju smiselno, čeprav se proces, ki je ustvaril zahtevo, nikoli ni dotaknil verige OUTPUT gostitelja.

Preden izberete kavelj, ugotovite, kje v resnici živita nabor pravil in tunel. Tunel znotraj vsebnika, tunel na gostitelju z vsebnikom, usmerjenim skozenj, in tunel v ločenem imenskem prostoru so tri različne topologije s tremi različnimi mesti pravil. Berite pravila znotraj imenskega prostora, ki ima v lasti napravo, ne le v privzetem.

Vprašajte, ali oznako sploh potrebujete

Če je cilj poslati eno ciljno predpono skozi tunel, pot za to predpono lahko zadošča. Najprej preverite veljavne poti, vključno z vsem, kar je strežnik potisnil: preusmerjena privzeta pot pošlje skozi VPN veliko več prometa kot ozka politika, ki ste jo imeli v mislih, in nobena količina označevanja ne bo uskladila rezultata z namenom.

Klasifikacija je potrebna, ko je odločitev odvisna od nečesa, česar pot ne more izraziti, na primer od vira, uporabnika ali procesa. Za prejeti promet označevanje v PREROUTING deluje. Za lokalni promet se mora označevanje zgoditi v izhodni stopnji, ki lahko po nastavitvi oznake sproži novo iskanje poti. Pri nftables je to veriga vrste route na izhodnem kavlju; običajna izhodna filtrirna veriga bo nastavila vrednost in pustila pot nespremenjeno.

Pri iptables enakovredna stvar živi v ureditvi mangle OUTPUT in velja enaka zahteva: odločitev o usmerjanju je treba ponovno preučiti, ko oznaka obstaja. Nato mora pravilo politike porabiti oznako in kazati na tabelo, ki vsebuje uporabno pot. Nastavitev oznake conntrack je tretja, ločena operacija; shrani vrednost na toku in sama po sebi te vrednosti ne položi na trenutni paket, da bi jo usmerjanje lahko prebralo.

Preverite iskanje in števec skupaj

nft list ruleset
ip route get 198.51.100.25
ip route get 198.51.100.25 mark 0x1

Naslov in oznaka sta ponazoritvena, in dve poizvedbi poti odgovarjata na različni vprašanji. Druga sprašuje, kaj bi jedro storilo, če bi paket nosil to oznako; ne kaže, da vaš nabor pravil kakšno dodeli. Obravnavajte jo kot preizkus hipoteze, ne kot dokaz, da politika deluje.

Nato zaženite neškodljivo zahtevo in opazujte dve stvari hkrati: števec na izbranem kavlju in izhod, ki ga je paket dejansko zavzel. Če se števec premakne in paket odide drugam, sta oznaka ali tabela napačni. Če se ne premakne nobeno, paket do tega kavlja sploh ne pride, in naslednje vprašanje je imenski prostor ali pot.

Na koncu omejite test na tisto, kar mehanizem zmore izraziti. Ena pot za en naslov ne postane trajna politika za storitev, katere naslovi se spreminjajo. Najprej določite obseg paketov, nato preverite, ali lahko zasnova usmerjanja in označevanja ta obseg ohrani po ponovni povezavi.

Sorodni članki