మీ VPN సర్వర్ నిజంగా ఏ మూల చిరునామాను చూస్తుందో NAT నిర్ణయిస్తుంది
మీ ల్యాప్టాప్ చిరునామా VPN సర్వర్కు ఎప్పటికీ చేరదు. NAT దాన్ని చివరి హాప్లో తిరిగి రాస్తుంది, టన్నెల్ IP తర్వాత కేటాయించబడుతుంది. రెండు చివరలను ఎలా పోల్చాలి.
VPN సర్వర్ మీ ల్యాప్టాప్ చిరునామాను ప్యాకెట్ నుండి చదివి లాగ్లో రాస్తుందని మీరు ఊహిస్తారు. అది చదివేది చివరి NAT హాప్ బాహ్య శీర్షికలో పెట్టింది, హాట్స్పాట్గా ఉపయోగించే ఫోన్లో ఇది తరచుగా వందలాది ఇతర చందాదారులతో పంచుకునే చిరునామా. మీ యంత్రం సొంత 192.168.x.x ఆ శీర్షికలో ఎప్పటికీ ఇంటర్నెట్ను దాటదు, టన్నెల్ చిరునామాను కనెక్షన్ ఇప్పటికే ఏర్పడిన తర్వాత సర్వర్ ఇస్తుంది. కాబట్టి సర్వర్ లాగ్ మరియు ల్యాప్టాప్లోని ip addr సరిపోలకపోతే, రెండూ తప్పు కావు; అవి ఒకే సెషన్ యొక్క వేర్వేరు పొరలను వివరిస్తాయి.
మూడు చిరునామాలు, లాగ్లో ఒకటి మాత్రమే
గందరగోళం మూడు చిరునామాలను ఒకటిగా కుదించడం నుండి వస్తుంది. ప్రతిదానికి వేరే యజమాని, వేరే శీర్షికలో నివసిస్తుంది, వేరే మార్గంలో సర్వర్ను చేరుతుంది.
| Address | Who assigns it | Where it sits | Visible to the VPN server |
|---|---|---|---|
Device address, e.g. 192.168.1.24 | Your router via DHCP | Outer header, before translation | No, rewritten in place |
| Translated address and port | Router, ISP CGNAT, or both | Outer header, after translation | Yes, this is the tuple it logs |
Tunnel address, e.g. 10.8.0.6 | The VPN server itself | Inner header, after decapsulation | Yes, but it chose it |
కనెక్ట్ అయ్యే క్షణంలో మధ్య వరుస మాత్రమే తెలియదు. డీమన్ ప్రకారం సర్వర్ దాన్ని తన పీర్ పట్టిక, స్థితి ఫైల్ లేదా ప్రవాహ లాగ్లో రాస్తుంది: WireGuard దాన్ని ఎండ్పాయింట్ అంటుంది, OpenVPN స్థితి ఫైల్ దాన్ని Real Address అని గుర్తిస్తుంది, strongSwan దాన్ని IKE_SA యొక్క దూర హోస్ట్గా నివేదిస్తుంది. ఆ విలువ వేరే మూలం నుండి ప్యాకెట్ వచ్చిన ప్రతిసారీ రిఫ్రెష్ అవుతుంది, కాబట్టి ఎవరూ ఏమీ పునఃప్రారంభించకుండానే అది మారుతుంది.
కింది వరుస అనేది ప్రజలు తప్పుగా గుర్తింపు దావాగా చదివేది. అది సర్వర్ కాన్ఫిగరేషన్లో ఒక స్థానాన్ని సూచిస్తుంది, వ్యక్తిని కాదు, ఎందుకంటే సర్వర్ దాన్ని తన స్వంత పూల్ నుండి ఎంచుకుంది. ఇద్దరు వినియోగదారులు వేరే రోజుల్లో ఒకే టన్నెల్ చిరునామాను పొందవచ్చు, ఒకరు రెండు పరికరాల నుండి రెండు కలిగి ఉండవచ్చు.
టన్నెల్ నడుస్తున్నప్పుడు లాగ్ చేసిన ట్యూపుల్ ఎందుకు మారుతుంది
చిరునామా అనువాదం టైమర్తో కూడిన పట్టిక, శాశ్వత బంధం కాదు. ఇంటి రౌటర్ చివరి ప్యాకెట్ తర్వాత కొంతసేపు తన UDP మ్యాపింగ్ను ఉంచుతుంది, ఆపరేటర్ గేట్వే తన సొంత షెడ్యూల్ ప్రకారం పోర్టులను తిరిగి ఉపయోగిస్తుంది, Wi-Fi నుండి LTEకి మారే ఫోన్ పూర్తిగా వేరే మూలంతో తిరిగి వస్తుంది. ఇక్కడ Linux conntrack డిఫాల్ట్లు ఉపయోగకరమైన ప్రమాణం: nf_conntrack_udp_timeout 30 సెకన్లు మరియు స్ట్రీమింగ్ రూపం 120, కాబట్టి నిశ్శబ్ద టన్నెల్ వినియోగదారు గమనించక ముందే దాని మ్యాపింగ్ను కోల్పోవచ్చు.
టన్నెల్ నిలిచి ఉండటానికి కారణం ప్రోటోకాల్ చిరునామాను కాదు, పీర్ను ప్రామాణీకరిస్తుంది. హ్యాండ్షేక్ తర్వాత WireGuard స్థితిలేనిది, కాబట్టి ప్రామాణీకరించిన ఏ ప్యాకెట్ అయినా నిల్వ చేసిన ఎండ్పాయింట్ను నవీకరిస్తుంది, తిరిగి బంధించడం తదుపరి ప్యాకెట్లో సరిపోతుంది; persistent-keepalive = 25 అందుకే ఉంది, నిష్క్రియంగా ఉన్నప్పుడు మ్యాపింగ్ను వెచ్చగా ఉంచడానికి. OpenVPN యొక్క --float అదే పని చేస్తుంది, ప్రామాణీకరించిన క్లయింట్ కొత్త చిరునామా మరియు పోర్టు నుండి కొనసాగడానికి అనుమతిస్తుంది. float డిఫాల్ట్గా ఆఫ్ ఉన్న 2.4 మరియు 2.5 బిల్డ్లలో, తిరిగి బంధించడం సెషన్ను రీసెట్ చేస్తుంది, క్లయింట్ మళ్లీ కనెక్ట్ అవుతుంది.
IPsec అక్కడికి ఎక్కువ కదిలే భాగాలతో చేరుతుంది. IKEv2 NAT గుర్తింపు పేలోడ్లలో మూల మరియు గమ్య హాష్లను పోల్చి అనువాదాన్ని గుర్తిస్తుంది, UDP 4500 ఎన్క్యాప్సులేషన్కు మారుతుంది, keepaliveలను కొత్త ట్యూపుల్ వరకు అనుసరిస్తుంది. keepaliveలు నిరోధించబడితే SA కాగితంపై నడుస్తూనే ఉంటుంది, ఒక దిశలో ట్రాఫిక్ నిశ్శబ్దంగా ఆగుతుంది.
సర్వర్ ఏమి ఆపాదించగలదు, ఏమి కాదు
చంపదగిన పురాణం ఏమిటంటే అనువాదం మిమ్మల్ని ఆపరేటర్ నుండి దాచుతుంది. అది లేబుల్ను మారుస్తుంది, గమనింపును కాదు. ఆపరేటర్ NAT వెనుక ఉన్న గేట్వే 100.64.0.0/10 స్థలాన్ని లేదా అనేక చందాదారులు పంచుకునే ఒక పబ్లిక్ చిరునామాను చూస్తుంది, అయినా ప్రవాహాన్ని సర్టిఫికెట్ విషయం, WireGuard పబ్లిక్ కీ, కేటాయించిన టన్నెల్ చిరునామా, బైట్ కౌంటర్లు మరియు సమయ విండోతో జోడించగలదు. వీటిలో దేనికీ మీ LAN చిరునామా అవసరం లేదు.
పరిమితులు వ్యతిరేక దిశలో కూడా వెళ్తాయి. లాగ్లోని పంచుకున్న చిరునామా ఇంటిని కాదు, గేట్వేను సూచిస్తుంది; ఒకే అనువదించిన చిరునామా నుండి వేరే పోర్టులపై ఉన్న రెండు సెషన్లు వేరే పరికరాలు; పోర్టు తిరిగి ఉపయోగించబడితే రెండు వేరే రోజుల్లో ఒకే చిరునామా రెండు సంబంధం లేని చందాదారులు కావచ్చు. పీర్ కీలను మాత్రమే నమోదు చేసే సర్వర్ ఖాతా డేటాబేస్ లేకుండా వాటిని కస్టమర్కు అనుసంధానించలేదు, చిరునామాలను మాత్రమే నమోదు చేసే సర్వర్ ఒకే రౌటర్ వెనుక ఉన్న ల్యాప్టాప్ మరియు ఫోన్ను వేరు చేయలేదు.
ఊహించడం కంటే రెండు చివరలను పోల్చండి
ఏం జరిగిందో నిర్ణయించడానికి, అదే కనెక్షన్ను రెండు చివరలలో ఒకే క్షణంలో సంగ్రహించి చిరునామాను కాదు, ట్యూపుల్ను పోల్చండి. క్లయింట్లో, ఏ అనువాదానికి ముందైనా:
ss -uapn 'dport = :51820'
ip -4 route get 203.0.113.10
wg show wg0 endpoints
తర్వాత రౌటర్ లేదా CGNAT గేట్వేపై అనువాద నమోదును మరియు చివరకు సర్వర్కు ఏమి చేరుతుందో చదవండి:
conntrack -L -p udp --dport 51820
tcpdump -ni eth0 udp port 51820
చాలా అసమానతలను మూడు నమూనాలు వివరిస్తాయి. సర్వర్పై మూల పోర్టు స్థానిక పోర్టు నుండి భిన్నంగా ఉండి గమ్యం సరిపోలితే: సాధారణ పోర్టు అనువాదం. సర్వర్పై మూల చిరునామా మీది కాని ISP బ్లాక్కు చెందితే: కనీసం ఒక అదనపు NAT పొర. నిష్క్రియత తర్వాత ప్యాకెట్లు ఆగి కొత్త పోర్టుతో కొనసాగితే: మ్యాపింగ్ గడువు ముగిసింది, రౌటింగ్ లోపం కాదు. టైమ్స్టాంప్లు ఒకటి లేదా రెండు సెకన్లకు మించి దూరంగా ఉంటే, మీరు రెండు వేరే ప్రయత్నాలను పోలుస్తున్నారు.
భేదం ఎక్కడ వస్తువులను విరుస్తుంది
సర్వర్ వైఫల్యాల్లా కనిపించే అంతరాయాలు సాధారణంగా ఇక్కడి నుండి మొదలవుతాయి. మీ ఇంటి చిరునామాకు పిన్ చేసిన యాక్సెస్ నియమం ISP లీజ్ మారిన తర్వాత విఫలమవుతుంది. అనువదించిన చిరునామాతో సరిపోలే fail2ban నియమం ఆ గేట్వే వెనుక ఉన్న అందరు చందాదారులను ఒకేసారి నిషేధిస్తుంది. స్థిర దూర చిరునామా ఉన్న సైట్-టు-సైట్ పీర్ మొబైల్ లింక్ మారిన తర్వాత కీలను పునరుద్ధరించడం ఆపేస్తుంది. టన్నెల్ ప్రోటోకాల్ బాగానే ఉంది; బాహ్య ట్యూపుల్ గురించిన ఊహ కాదు.
అదే గందరగోళం సర్వర్ వైపు కూడా కనిపిస్తుంది. VPN బాక్స్ స్వయంగా NAT వెనుక ఉంటే పోర్టు ఫార్వార్డింగ్ మరియు పని చేసే ఫార్వార్డింగ్ మార్గం అవసరం; strongSwan ఫార్వార్డింగ్ గైడ్ IPsec కోసం ఆ సందర్భాన్ని కవర్ చేస్తుంది. ప్రైవేట్ చిరునామాలో మాత్రమే చేరగల సర్వర్ తన క్లయింట్లు అందించే అనువదించిన ట్యూపుల్ను ఎప్పటికీ చూడదు, ఇది క్లయింట్లు అనువాదం కావడం కంటే వేరే సమస్య.
ఈ నాలుగు తనిఖీలను క్రమంగా చేసి మొదటి వైఫల్యం వద్ద ఆగండి:
- రెండు చివరలలో ఒకే సమయంలో సంగ్రహించండి; మూల పోర్టు, గమ్య పోర్టు మరియు టైమ్స్టాంప్లు సరిపోలుతున్నాయని నిర్ధారించండి.
- మీరు ఆశించిన చిరునామా కాదు, సర్వర్ ఇప్పుడు కలిగి ఉన్న చిరునామాను పీర్ జాబితాలో చదవండి.
- నమోదు మరియు దాని మిగిలిన ఆయుష్షు కోసం conntrack లేదా NAT పట్టికను తనిఖీ చేయండి.
- క్లయింట్పై టన్నెల్ ఇంటర్ఫేస్ చిరునామా LAN చిరునామాతో కాదు, సర్వర్ కేటాయించిన దానితో సరిపోలుతుందని నిర్ధారించండి.
రెండు సంగ్రహణలు ట్యూపుల్పై ఏకీభవించినా టన్నెల్ విఫలమైతే, అనువాదం మీ సమస్య కాదు; హ్యాండ్షేక్ మరియు టన్నెల్ లోపలి రౌటింగ్ పట్టికకు వెళ్లండి.