Portu bat VPNtik kanpora ateratzeko politika bidezko bideratzea behar da
NAT arau batek helbideak berridazten ditu, baina ez du irteerako esteka aukeratzen. Hona hemen TCP portu bat tunelatik kanpo benetan mantentzen duten araua, taula eta marka.
Eskaera beti da esaldi beraren aldaera bat: utzi VPN nabigatzeko, baina utzi SSHri edo babeskopia lan bati ohiko konexioa erabiltzen. Horren inguruan dabilen aholkuak, portua iptables NAT arauekin birbidaltzeak, ez du hori egiten. NAT arau batek fluxu baten barruko helbideak eta portuak berridazten ditu; ez du inoiz aukeratzen paketea zein interfazetatik irteten den. Erabaki hori bideratze-kontsultarena da, eta bideratze-kontsultak laguntza behar du portu bat ikusteko.
Zergatik ezin duen bide arrunt batek portu batekin bat egin
Linucek bide bat aukeratzen du helburu-helbidea taula batean bilatuz, hautagai-taulak politikako arauen bidez iragazi ondoren. Arau horiek suebakiko marka, iturburu-helbidea, sarrerako interfazea edo UID batekin bat egin dezakete. Bide-sarrerak berak ez du portu-eremurik, bidea garraio-goiburua garrantzia hartu aurretik aukeratzen delako.
Egungo iproute2 eta nukleoek arauaren hautatzailea zabaltzen dute: ipproto, sport eta dport onartzen dira, beraz ip rule add ipproto tcp dport 22 table 100 asmoa lerro bakarrean adierazten du. Exekutatu ip rule add help benetako ostalarian zure eraikinak dport zerrendatzen duen ikusteko. Hala bada, komando bakarrean amaitu duzu; ez bada, beheko marka-bidea da baliokidea.
Edozein modutan, araua erakusle bat besterik ez da. Taula 100-ek bide bat behar du oraindik, eta jendeak ahazten duen zatia hori da.
Hiru zati, edo bat
Forma modernoa goiko arau bakarra eta taula alternatiboan bide bat da. Forma klasikoak netfilter eransten du erdian: markatu paketea, gero parekatu marka arau batean. Biak bilaketa berean amaitzen dira; portua non irakurtzen den bereizten dira.
Marka-ikuspegia badago netfilterrek garraio-goiburua ikusten duelako eta bideratze-kodeak historikoki ez zuelako ikusten. Hori da mekanismo osoa, eta horrek azaltzen du zergatik ordezko bidea hiru zati elkarlanean aritzea den, komando azkar bat izan beharrean.
Hiru zatiak ordenan
Lehenik, desbideratu nahi dituzun fluxuak markatu, bide-erabakia baino lehen marka existitzeko bezain goiz exekutatzen den kate batean:
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 0x1Bigarrenik, markatutako paketeak taula bereizi batera bidali:
ip rule add fwmark 0x1/0x1 table 100Hirugarrenik, eman taula horri esteka fisikoaren bidezko bide lehenetsia. Helbideak adibide dira; jarri zureak:
ip route add default via 192.168.1.1 dev wlan0 table 100Saltatu hirugarren urratsa eta markatutako paketeak ez du biderik aurkitzen taula 100ean, beraz huts egiten du. Sintomak arauak sarea hautsi duela dirudi, egiatan paketeari geratzen zitzaion bide bakarra kendu zionean.
Zerk mantentzen du funtzionatzen lehen paketearen ondoren
Markak irteerako paketeei aplikatzen zaizkie. Erantzuna interfaze fisikoan iristen da esteka horrek esleitutako helbidearekin, eta taula nagusiak oraindik tunela nahiago izan dezake helmuga horretarako. Bi mekanismok mantentzen dute erantzun-bidea koherente: iturburuan oinarritutako araua estekaren helbiderako, eta konexioen jarraipena, fluxuaren bizitza osoan erabakia gordetzen duena. Marka conntrack-en gordetzea eta erantzunean berrezartzea da egoerako salbuespen bat egonkor egiteko ohiko modua.
Alderantzizko bidearen iragazketa da beste hiltzaile isila. Nukleoak itzulera-bidea zorrotz baliozkotzen badu eta erantzuna taula nagusiak aukeratuko ez lukeen interfaze batera iristen bada, paketea mezurik gabe baztertzen da. rp_filter balio lehenetsiak banaketaren eta interfazea birbidaltzen den ala ez arabera aldatzen dira, beraz irakurri benetako balioa itzalita dagoela suposatu beharrean.
Ez markatu tunelaren beraren garraioa. WireGuard edo UDP OpenVPN tunel bat ez da TCP 22, beraz goiko errezeta segurua da, baina tunelaren helmuga ez den guztia bezala idatzitako salbuespen batek pakete zifratuak harrapa ditzake eta tunela bide-begizta bat dirudien moduan hauts dezake.
Egiaztatu suposatu beharrean
Galdetu nukleoari zein bide hartuko lukeen, helmugarako eta porturako, eta gero exekutatu benetako transferentzia:
ip route get 203.0.113.10
ip rule show
nft list rulesetMarka badago baina kontagailuak inoiz mugitzen ez badira, arauak ez du bat egiten. Kontagailuak idatzi duzun konfigurazioaren eta nukleoak aplikatzen duen politikaren arteko aldea dira.
Noiz da tresna okerra
Portuan oinarritutako salbuespenak hauskorrak dira berez. Zerbitzuek portuak aldatzen dituzte, HTTP/3 UDP 443 gisa iristen da, eta aplikazio batek hainbat motatako hainbat fluxu ireki ditzake. Benetako baldintza programa honek ohiko esteka erabiltzea bada, bideratze-geruza leku okerra da; sare-namespace batek edo aplikazio bakoitzeko proxy batek hobeto egokitzen dute.
Baldintza azpisare honek ohiko esteka erabiltzea bada, utzi markak guztiz eta gehitu bide zehatzago bat. Simpleagoa da, taula bakarrean ikusten da, eta hurrengo pertsonak audita dezake arau-multzo bat irakurri gabe.
Idatzi hiru baldintzetatik zein duzun benetan suebakia ukitu aurretik. Goiko mekanismoa zehatza da, eta geruza okerrean aplikatutako zehaztasuna luzapen luzeagoa besterik ez da.