ఒక పోర్ట్ కోసం VPNని దాటవేయడానికి పాలసీ రూటింగ్ అవసరం
NAT నియమం చిరునామాలను తిరిగి రాస్తుంది, కానీ బయటకు వెళ్లే లింక్ను ఎంచుకోదు. ఒక TCP పోర్ట్ను టన్నెల్ వెలుపల ఉంచే నియమం, పట్టిక మరియు గుర్తు ఇదిగోండి.
అభ్యర్థన ఎప్పుడూ అదే వాక్యం యొక్క ఒక రూపం: బ్రౌజింగ్ కోసం VPN ఉంచండి, కానీ SSH లేదా బ్యాకప్ పనిని సాధారణ కనెక్షన్ను ఉపయోగించనివ్వండి. దీని గురించి తిరిగే సలహా, అంటే iptables NAT నియమాలతో పోర్ట్ను ఫార్వర్డ్ చేయడం, అది చేయదు. NAT నియమం ఒక ప్రవాహం లోపల చిరునామాలు మరియు పోర్టులను తిరిగి రాస్తుంది; ప్యాకెట్ ఏ ఇంటర్ఫేస్ ద్వారా బయటకు వెళ్తుందో ఎప్పుడూ ఎంచుకోదు. ఆ నిర్ణయం రూట్ శోధనకు చెందుతుంది, రూట్ శోధనకు పోర్ట్ను చూడటానికి సహాయం కావాలి.
సాధారణ రూట్ పోర్ట్తో ఎందుకు సరిపోలదు
లినక్స్ గమ్య చిరునామాను పట్టికలో వెతికి రూట్ను ఎంచుకుంటుంది, అభ్యర్థి పట్టికలు పాలసీ నియమాల ద్వారా ఫిల్టర్ అయిన తర్వాత. ఆ నియమాలు ఫైర్వాల్ గుర్తు, మూల చిరునామా, లోపలికి వచ్చే ఇంటర్ఫేస్ లేదా UIDతో సరిపోలవచ్చు. రూట్ ఎంట్రీకి తనకంటూ పోర్ట్ ఫీల్డ్ ఉండదు, ఎందుకంటే ట్రాన్స్పోర్ట్ హెడర్ ముఖ్యమయ్యే ముందే రూట్ ఎంచుకోబడుతుంది.
ప్రస్తుత iproute2 మరియు కర్నెల్లు నియమ ఎంపికను విస్తరిస్తాయి: ipproto, sport మరియు dport ఆమోదించబడతాయి, కాబట్టి ip rule add ipproto tcp dport 22 table 100 ఉద్దేశాన్ని ఒక్క లైన్లో వ్యక్తం చేస్తుంది. ip rule add help ను నిజమైన హోస్ట్పై అమలు చేయండి, మీ బిల్డ్ dport జాబితా చేస్తుందో లేదో చూడటానికి. చేస్తే, ఒక ఆదేశంతో మీరు పూర్తి; లేకపోతే, క్రింది గుర్తు మార్గం సమానమైనది.
ఎలాగైనా నియమం కేవలం ఒక సూచిక. పట్టిక 100కి ఇంకా రూట్ కావాలి, అదే ప్రజలు మరచిపోయే భాగం.
మూడు భాగాలు, లేదా ఒకటి
ఆధునిక రూపం పైనున్న ఒకే నియమం మరియు ప్రత్యామ్నాయ పట్టికలో ఒక రూట్. సంప్రదాయ రూపం మధ్యలో netfilterని జోడిస్తుంది: ప్యాకెట్ను గుర్తించండి, తర్వాత నియమంలో గుర్తును సరిపోల్చండి. రెండూ ఒకే శోధన వద్ద ముగుస్తాయి; పోర్ట్ ఎక్కడ చదవబడుతుందని భిన్నంగా ఉంటాయి.
గుర్తు విధానం ఉనికికి కారణం, netfilter ట్రాన్స్పోర్ట్ హెడర్ను చూస్తుంది, రూటింగ్ కోడ్ చరిత్రలో చూడలేదు. అదే మొత్తం యాంత్రికత, మరియు ఎందుకు ప్రత్యామ్నాయ మార్గం ఒక తెలివైన ఆదేశం కాకుండా సహకరించే మూడు భాగాలు అని ఇది వివరిస్తుంది.
మూడు భాగాలు వరుసగా
మొదట, మళ్లించాలనుకునే ప్రవాహాలను గుర్తించండి, రూట్ నిర్ణయానికి ముందే గుర్తు ఉండేంత ముందుగా నడిచే చైన్లో:
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రెండవది, గుర్తించిన ప్యాకెట్లను ప్రత్యేక పట్టికకు పంపండి:
ip rule add fwmark 0x1/0x1 table 100మూడవది, ఆ పట్టికకు భౌతిక లింక్ ద్వారా డిఫాల్ట్ రూట్ ఇవ్వండి. చిరునామాలు ఉదాహరణాత్మకం; మీవి పెట్టండి:
ip route add default via 192.168.1.1 dev wlan0 table 100మూడవ దశను దాటవేయండి, గుర్తించిన ప్యాకెట్కు పట్టిక 100లో రూట్ దొరకదు, కాబట్టి అది విఫలమవుతుంది. లక్షణం నియమం నెట్వర్క్ను పాడు చేసినట్టు కనిపిస్తుంది, నిజానికి అది ప్యాకెట్కు మిగిలిన ఏకైక మార్గాన్ని తీసివేసింది.
మొదటి ప్యాకెట్ తర్వాత దీన్ని నడిపిస్తూ ఉంచేది
గుర్తులు బయటకు వెళ్లే ప్యాకెట్లకు వర్తిస్తాయి. ప్రతిస్పందన లింక్ కేటాయించిన చిరునామాతో భౌతిక ఇంటర్ఫేస్కు వస్తుంది, ప్రధాన పట్టిక ఆ గమ్యానికి ఇంకా టన్నెల్ను ఇష్టపడవచ్చు. రెండు యాంత్రికతలు ప్రతిస్పందన మార్గాన్ని స్థిరంగా ఉంచుతాయి: లింక్ చిరునామా కోసం మూల ఆధారిత నియమం, మరియు ప్రవాహం జీవితకాలం మొత్తం నిర్ణయాన్ని కాపాడే connection tracking. గుర్తును conntrackలో దాచి ప్రతిస్పందనపై పునరుద్ధరించడం స్థితి కలిగిన మినహాయింపును స్థిరంగా చేసే సాధారణ మార్గం.
వ్యతిరేక మార్గ ఫిల్టరింగ్ మరో నిశ్శబ్ద హంతకుడు. కర్నెల్ తిరిగి వచ్చే మార్గాన్ని కఠినంగా ధృవీకరిస్తే, ప్రధాన పట్టిక ఎంచుకోని ఇంటర్ఫేస్పై ప్రతిస్పందన వస్తే, ప్యాకెట్ సందేశం లేకుండా పడవేయబడుతుంది. rp_filter డిఫాల్ట్ విలువలు పంపిణీని బట్టి, ఇంటర్ఫేస్ ఫార్వర్డ్ అవుతుందా అన్నదాన్ని బట్టి మారుతాయి, కాబట్టి అది ఆఫ్ ఉందని ఊహించకుండా ప్రభావవంతమైన విలువను చదవండి.
టన్నెల్ స్వంత రవాణాను గుర్తించవద్దు. WireGuard లేదా UDP OpenVPN టన్నెల్ TCP 22 కాదు, కాబట్టి పైని సూత్రం సురక్షితం, కానీ టన్నెల్ గమ్యం తప్ప అన్నీ అని రాసిన మినహాయింపు గుప్తీకరించిన ప్యాకెట్లను పట్టుకుని, రూటింగ్ లూప్లా కనిపించే విధంగా టన్నెల్ను పాడు చేయవచ్చు.
ఊహించకుండా తనిఖీ చేయండి
గమ్యం కోసం మరియు పోర్ట్ కోసం కర్నెల్ ఏ మార్గం తీసుకుంటుందో అడగండి, తర్వాత నిజమైన బదిలీని నడపండి:
ip route get 203.0.113.10
ip rule show
nft list rulesetగుర్తు ఉన్నా కౌంటర్లు ఎప్పుడూ కదలకపోతే, నియమం సరిపోలడం లేదు. మీరు రాసిన కాన్ఫిగరేషన్కు, కర్నెల్ వర్తింపజేసే పాలసీకి మధ్య తేడా కౌంటర్లు.
ఇది తప్పు సాధనం అయినప్పుడు
పోర్ట్ ఆధారిత మినహాయింపులు స్వభావంగా పెళుసైనవి. సేవలు పోర్టులు మారుస్తాయి, HTTP/3 UDP 443గా వస్తుంది, ఒక అప్లికేషన్ వివిధ రకాల అనేక ప్రవాహాలను తెరవవచ్చు. నిజమైన అవసరం ఈ ప్రోగ్రామ్ సాధారణ లింక్ను ఉపయోగించడం అయితే, రూటింగ్ పొర తప్పు స్థలం; నెట్వర్క్ నేమ్స్పేస్ లేదా ప్రతి అప్లికేషన్కు ప్రాక్సీ బాగా సరిపోతుంది.
అవసరం ఈ సబ్నెట్ సాధారణ లింక్ను ఉపయోగించడం అయితే, గుర్తులను పూర్తిగా దాటవేసి మరింత నిర్దిష్టమైన రూట్ను జోడించండి. ఇది సులభం, ఒక పట్టికలో కనిపిస్తుంది, తదుపరి వ్యక్తి నియమాల సమితిని చదవకుండా దాన్ని పరిశీలించవచ్చు.
ఫైర్వాల్ను తాకే ముందు మూడు అవసరాలలో మీకు నిజంగా ఏది ఉందో రాయండి. పైని యాంత్రికత ఖచ్చితమైనది, తప్పు పొరపై వర్తింపజేసిన ఖచ్చితత్వం కేవలం పొడవైన అంతరాయం.