Að halda einni port utan við VPN krefst stefnubundinnar leiðarvals
NAT-regla endurskrifar vistföng en velur ekki útleið. Hér eru reglan, taflan og merkið sem halda einni TCP-port í raun utan við göngin.
Beiðnin er alltaf afbrigði af sömu setningu: hafðu VPN fyrir vafrið, en leyfðu SSH eða afritunarvinnu að nota venjulegu tenginguna. Ráðið sem gengur um þetta, að framsenda portið með iptables NAT-reglum, gerir það ekki. NAT-regla endurskrifar vistföng og port innan streymis; hún velur aldrei hvaða tengi pakkinn fer út um. Þessi ákvörðun tilheyrir leiðarleitinni, og leiðarleitin þarf hjálp til að sjá port.
Hvers vegna venjuleg leið getur ekki passað við port
Linux velur leið með því að fletta upp áfangavistfanginu í töflu, eftir að búið er að sía frambjóðendatöflurnar með stefnureglum. Þær reglur geta passað við eldveggsmerki, upprunavistfang, innkomið tengi eða UID. Leiðarfærslan sjálf hefur ekkert portssvið, því leiðin er valin áður en flutningshausinn skiptir máli.
Nútíma iproute2 og kjarnar víkka regluvöruna: ipproto, sport og dport eru samþykkt, svo ip rule add ipproto tcp dport 22 table 100 lýsir fyrirætlaninni í einni línu. Keyrðu ip rule add help á raunverulegu vélinni til að sjá hvort smíðin þín listar dport. Ef hún gerir það ertu búinn með einni skipun; ef ekki er merkjaleiðin hér fyrir neðan jafngildið.
Hvort sem er, reglan er aðeins bendir. Tafla 100 þarf samt leið, og það er hluturinn sem fólk gleymir.
Þrír hlutir, eða einn
Nútímaformið er eina reglan hér að ofan auk leiðar í varatöflunni. Klassíska formið setur netfilter í miðjuna: merktu pakkann og passaðu svo merkið í reglu. Bæði enda í sömu leit; þau eru ólík að því hvar portið er lesið.
Merkjaleiðin er til vegna þess að netfilter sér flutningshausinn en leiðarvalskóðinn sá hann ekki sögulega. Þetta er allur vélbúnaðurinn, og það útskýrir hvers vegna varaleiðin er þrír hlutir sem vinna saman en ekki ein sniðug skipun.
Þrír hlutir í röð
Fyrst, merktu streymin sem þú vilt beina annars staðar, í keðju sem keyrir nógu snemma til að merkið sé til fyrir leiðarákvörðunina:
nft add table inet vpnexempt
nft 'add chain inet vpnexempt out { type route hook output priority mangle; }'
nft add rule inet vpnexempt out tcp dport 22 meta mark set 0x1Í öðru lagi, sendu merktu pakkana í sérstaka töflu:
ip rule add fwmark 0x1/0x1 table 100Í þriðja lagi, gefðu þeirri töflu sjálfgefna leið um líkamlega tenginguna. Vistföngin eru dæmi; settu þín eigin:
ip route add default via 192.168.1.1 dev wlan0 table 100Slepptu þriðja skrefinu og merkti pakkinn finnur enga leið í töflu 100, svo hann bilar. Einkennin líta út eins og reglan hafi brotið netið, þegar hún fjarlægði í raun einu leiðina sem pakkinn átti eftir.
Hvað heldur því gangandi eftir fyrsta pakkann
Merki gilda um útfarandi pakka. Svarið kemur á líkamlega tengið með vistfanginu sem sú tenging úthlutaði, og aðaltaflan kann enn að velja göngin fyrir þann áfangastað. Tvær aðferðir halda svarleiðinni samkvæmri: regla byggð á uppruna fyrir vistfang tengingarinnar, og tengingarakning sem varðveitir ákvörðunina alla ævi streymisins. Að geyma merkið í conntrack og endurheimta það í svarinu er venjuleg leið til að gera stöðubundna undantekningu stöðuga.
Síun bakleiðar er hinn þögli banamaður. Ef kjarninn sannreynir bakleiðina strangt og svarið kemur á tengi sem aðaltaflan myndi ekki velja, er pakkanum hent án skilaboða. rp_filter sjálfgefin gildi eru mismunandi eftir dreifingum og eftir því hvort tenginu er framsent, svo lestu raunverulega gildið í stað þess að gera ráð fyrir að það sé slökkt.
Merktu ekki eigin flutningi ganganna. WireGuard eða UDP OpenVPN göng eru ekki TCP 22, svo uppskriftin hér að ofan er örugg, en undantekning sem skrifuð er sem allt nema áfangastaður ganganna getur gripið dulritaða pakkana og brotið göngin á þann hátt að það líti út eins og leiðarlykkja.
Athugaðu í stað þess að gera ráð fyrir
Spyrðu kjarnann hvaða leið hann myndi fara, fyrir áfangastaðinn og fyrir portið, og keyrðu svo raunverulega flutninginn:
ip route get 203.0.113.10
ip rule show
nft list rulesetEf merkið er til en teljararnir hreyfast aldrei passar reglan ekki. Teljararnir eru munurinn á stillingu sem þú skrifaðir og stefnu sem kjarninn beitir.
Hvenær þetta er rangt tól
Undantekningar byggðar á porti eru brothættar að eðlisfari. Þjónustur flytja port, HTTP/3 kemur sem UDP 443, og eitt forrit getur opnað nokkrar streymi af mismunandi gerðum. Ef raunverulega krafan er að þetta forrit noti venjulegu tenginguna er leiðarlagið rangur staður; nafnrými nets eða milliþjónn fyrir hvert forrit hentar betur.
Ef krafan er að þetta undirnet noti venjulegu tenginguna, slepptu merkjum alveg og bættu við nákvæmari leið. Það er einfaldara, sýnilegt í einni töflu, og næsta manneskja getur skoðað það án þess að lesa reglusafn.
Skrifaðu niður hver af þremur kröfunum þú hefur í raun áður en þú snertir eldvegginn. Aðferðin hér að ofan er nákvæm, og nákvæmni beitt á rangt lag er bara lengri truflun.