నెస్టెడ్ WireGuard: మధ్య హాప్ తన సొంత పోర్టుకు సమాధానం ఇవ్వదు
మధ్య హాప్ ప్రతిదీ ఒకే సొరంగంలోకి పంపినప్పుడు, దాని ఇన్బౌండ్ సేవకు సమాధానాలు తప్పు మార్గంలో బయటకు వెళ్తాయి. ఇంటర్ఫేస్పై మూల-పోర్టు నియమం దాన్ని సరిచేస్తుంది.
మూడు WireGuard హాప్లు పబ్లిక్ చిరునామా లేని నెట్వర్క్ను చేరుకుంటాయి, ఆ తర్వాత మధ్య యంత్రం వినాల్సిన పోర్టులో సమాధానం ఇవ్వడం ఆపేస్తుంది. ముందుకు సాగే సొరంగం ఇంకా పనిచేస్తుంది, దూరపు హోస్ట్ ఇంకా స్పందిస్తుంది, బయటి నుండి నిశ్శబ్దమైనది మధ్య సర్వర్ మాత్రమే. ఈ కలయిక గందరగోళాన్ని కలిగిస్తుంది ఎందుకంటే అది తనే సృష్టించుకుంది: మధ్య హాప్ తన సొంత రూటింగ్ పట్టికను పాటిస్తోంది, ఆ పట్టిక దాని సమాధానాలను తప్పు దిశకు పంపుతుంది.
మధ్య పెట్టెతో మాట్లాడే వరకు పనిచేసే గొలుసు
ఒక ఉదాహరణ గొలుసును తీసుకోండి: క్లయింట్ A UDP 500లో సర్వర్ B ను చేరుకుంటుంది, B UDP 500లో సర్వర్ C వైపు ముందుకు సాగుతుంది. C తన ఏకైక సహచరుడి చిరునామా నుండి మాత్రమే ట్రాఫిక్ను అంగీకరిస్తుంది, ఇది దాన్ని ఆకుగా మారుస్తుంది మరియు దాని ప్రవర్తనను సరళంగా ఉంచుతుంది. B ఆకు కాదు, ఈ వైఫల్యం గురించి ఆసక్తికరమైనదంతా అక్కడే జరుగుతుంది.
ఈ భేదం ముఖ్యం ఎందుకంటే ఆకు మరియు మధ్య పాత్రలు వ్యతిరేక దిశల్లో లాగుతాయి. ఆకు ఎలాంటి పరిణామం లేకుండా ప్రతిదీ ఒకే సొరంగంలోకి పంపగలదు, ఎందుకంటే దానిపై మరేదీ ఆధారపడదు. మధ్య హాప్ ఒకేసారి క్లయింట్లకు ముగింపు బిందువు మరియు దూరపు వైపు క్లయింట్, ఆ రెండు పనులకు వేర్వేరు రూటింగ్ కావాలి.
సమాధానం సొరంగం ద్వారా ఎందుకు బయటకు వెళ్తుంది
B లో, C వైపు ఉన్న ఇంటర్ఫేస్ సంబంధిత డిఫాల్ట్ మార్గంతో పాటు AllowedIPs = 0.0.0.0/0 కలిగి ఉంటుంది. కాబట్టి B సృష్టించే ప్రతి ప్యాకెట్ ఆ సొరంగంలోకి వెళ్తుంది, మరింత నిర్దిష్టమైనది ప్రాధాన్యత పొందకపోతే.
A నుండి B కి చిరునామా చేసిన ప్యాకెట్ వచ్చి అంగీకరించబడుతుంది, ఎందుకంటే B గమ్యస్థానం మరియు స్థానిక డెలివరీ మొదట జరుగుతుంది. సమాధానం A యొక్క పబ్లిక్ చిరునామా వైపు లక్ష్యంగా స్థానికంగా సృష్టించిన పూర్తిగా కొత్త ప్యాకెట్, ఆ గమ్యస్థానం సొరంగంలోని డిఫాల్ట్ మార్గంతో సరిపోతుంది. C దాన్ని పొందుతుంది, ఆ చిరునామా యజమాని కాదు, దాన్ని పడేస్తుంది.
లక్షణం ఫైర్వాల్ సమస్య లేదా కీ సరిపోలకపోవడం లాగా చదవబడుతుంది, ఇక్కడ రెండూ నిజం కావు. C వైపు సొరంగంలో తీసిన క్యాప్చర్ సమాధానాలు తప్పు దిశలో వెళ్తున్నట్లు చూపుతుంది. ఆ ఒక పరిశీలన ఎంత కాన్ఫిగరేషన్ చదివినా కంటే ఎక్కువ సమయాన్ని ఆదా చేస్తుంది, కాబట్టి కీలు మార్చడం ప్రారంభించే ముందు దాన్ని రాసి పెట్టుకోండి. క్యాప్చర్ చూడని ఎవరైనా సొరంగమే పాడైందని భావిస్తారు.
ఇరుకైన మరమ్మత్తు: మూల పోర్టుతో సరిపోలే విధాన నియమాలు
B యొక్క వినే సాకెట్ నుండి సమాధానాలు మూల పోర్టు 500తో బయటకు వెళ్తాయి. ఒక విధాన నియమం దానితో సరిపోలి ఆ ప్యాకెట్లను సాధారణ పట్టికకు తిరిగి పంపగలదు:
ip rule add sport 500 table main priority 100
ip rule add sport 8080 table main priority 101
విధాన నియమాలు ప్రాధాన్యత క్రమంలో పరిశీలించబడతాయి, ప్రధాన పట్టిక 32766లో ఉంది, కాబట్టి 100లోని నియమం సొరంగం డిఫాల్ట్ మార్గం మాట్లాడే ముందు అడగబడుతుంది. బయటి నుండి చేరుకోగలిగేలా ఉండాల్సిన ప్రతి పోర్టుకు ఒక ఎంట్రీ జోడించండి, అంతకు మించి ఏమీ లేదు, తద్వారా ఫార్వార్డ్ చేసిన ట్రాఫిక్ దాని కోసం నిర్మించిన సొరంగాన్నే ఉపయోగిస్తూనే ఉంటుంది.
ఈ ఉపాయం పరిమితిని తెలుసుకోండి. sport ఎంపిక స్థానికంగా సృష్టించిన ప్యాకెట్లతో సరిపోలుతుంది, ఇది సమాధాన సందర్భాన్ని ఖచ్చితంగా కవర్ చేస్తుంది మరియు B మరొకరి కోసం కేవలం ఫార్వార్డ్ చేసే ట్రాఫిక్ను ఉద్దేశపూర్వకంగా కవర్ చేయదు. B వెనుక హోస్ట్ చేసిన సేవకు ఇంకా తన సొంత సమాధానం కావాలి, దీనికి విరుద్ధంగా నటించడం మొదటి సేవకు పనిచేసి రెండవదానికి విఫలమయ్యే సరిచేయడాన్ని ఇస్తుంది.
నియమానికి యజమానిని ఇవ్వండి
ప్రాంప్ట్లో టైప్ చేసిన నియమం తదుపరిసారి ఇంటర్ఫేస్ పునర్నిర్మించబడినప్పుడు అదృశ్యమవుతుంది. WireGuard సెటప్లో, ఇంటర్ఫేస్ సృష్టించబడే మరియు తొలగించబడే చోట దాన్ని ఉంచండి:
PostUp = ip rule add sport 500 table main priority 100
PostDown = ip rule del sport 500 table main priority 100
ఇంటర్ఫేస్ యజమాని NetworkManager, పంపిణీ హుక్ లేదా కంటైనర్ ప్రవేశ బిందువు అయితే, ఆ జంట చేతితో సవరించిన ఫైల్కు కాదు, ఆ యజమానికి చెందుతుంది. తిరిగి కనెక్ట్ అయిన తర్వాత ప్రభావవంతమైన నియమాలను తనిఖీ చేయండి, మొదటి ప్రారంభం తర్వాత మాత్రమే కాదు, ఎందుకంటే మొదటి ప్రారంభం ఎప్పుడూ పనిచేసే సందర్భం.
ప్రత్యామ్నాయాలను నిజాయితీగా పోల్చండి
మూల-పోర్టు నియమం నాలుగు నిష్క్రమణ మార్గాల్లో ఒకటి, వాటిలో అత్యంత ఇరుకైనది. సొరంగం విధానాన్ని అసలు తాకకపోవడం దాని ప్రయోజనం, అందుకే ఇది తర్వాతి మార్పులను తరచుగా తట్టుకుంటుంది. ఇరుకైన మరమ్మత్తులు వర్తించడం ఆపినప్పుడు గట్టిగా విఫలమవుతాయి, అయితే విస్తృత మినహాయింపు దాని కారణం మాయమైన చాలా కాలం తర్వాత కూడా నిశ్శబ్దంగా పనిచేస్తూనే ఉంటుంది. రెండేళ్ల తర్వాత పెట్టె యజమాని మరొకరు అయినప్పుడు ఆ భేదం సొగసు కంటే ముఖ్యం.
| Approach | What it costs | Where it breaks |
|---|---|---|
| Source-port policy rule | One rule per exposed port | Anything B forwards rather than originates |
| Destination exception route | A route pinned to specific client addresses | Clients whose address changes |
| Stop full-tunnelling on B | Loses the catch-all path toward C | Designs that depend on it |
| Split into two tunnels | More interfaces and more policy | Nothing, at the cost of complexity |
ఎంచుకున్న తర్వాత రెండు చివరల నుండి ధృవీకరించండి. A నుండి, B పోర్టుకు కనెక్షన్ ప్రారంభించి కొంతసేపు బిజీగా ఉంచండి. B లో, ip route get <address-of-A> sport 500 లాంటి దానితో కెర్నెల్ సమాధాన మార్గాన్ని సమర్థించేలా చేయండి, అది సొరంగాన్ని కాకుండా WAN ఇంటర్ఫేస్ను పేర్కొంటుందని నిర్ధారించండి. ఆ తర్వాత, C వెనుక ఏదో ఇంకా గొలుసు ద్వారా సమాధానం ఇస్తున్నట్లు తనిఖీ చేయండి, ఇది మినహాయింపు బైపాస్గా మారకుండా ఇరుకైనదిగానే ఉందని రుజువు చేస్తుంది. చివరగా, పోర్టులను డిజైన్ నోట్స్లో నమోదు చేయండి, లేకపోతే తదుపరి ఆపరేటర్ దీన్ని మరో సేవలో మళ్లీ కనుగొంటారు.