మీ VPN పైన SOCKS ప్రాక్సీగా SSH డైనమిక్ ఫార్వార్డింగ్
SOCKS మాత్రమే మాట్లాడే యాప్కు సాధారణ VPN లో ప్రాక్సీ ముగింపు బిందువు ఉండదు. రెండు దాటికలు, ఒక లూప్బ్యాక్ శ్రోత మరియు SSH సేవికయే చేయాల్సిన ఒక పేరు శోధన.
SOCKS మాత్రమే మాట్లాడే యాప్కు సాధారణ VPN లో మాట్లాడటానికి ఏమీ ఉండదు, ఎందుకంటే సొరంగం ప్యాకెట్లను మోసుకెళుతుంది మరియు యాప్కు ప్రాక్సీ ముగింపు బిందువు కావాలి. యాక్సెస్ యజమాని అనుమతించినప్పుడు OpenSSH ఆ బిందువును అందించగలదు, ఎందుకంటే డైనమిక్ ఫార్వార్డింగ్ ఒక SSH సెషన్ను స్థానిక ప్రాక్సీగా మారుస్తుంది. తర్వాత రెండు దాటికలను వేరుగా ఉంచాలి: SSH హోస్ట్ను చేరే సొరంగం మరియు ఆ హోస్ట్ తర్వాత తెరిచే కనెక్షన్. వాటిని వేరు చేయడం ఈ ఏర్పాటు ఎందుకు పని చేస్తుందో మరియు అది ఎప్పటికీ ఏమి చేయదో వివరిస్తుంది.
SSH శ్రోత ఏమవుతుంది, ఏమవదు
డైనమిక్ ఫార్వార్డింగ్ SSH క్లయింట్ను స్థానికంగా వినడానికి మరియు కనెక్ట్ అయ్యే ప్రతిదానితో SOCKS4 లేదా SOCKS5 మాట్లాడటానికి బలవంతం చేస్తుంది. ప్రతి అభ్యర్థన ఒక గమ్యాన్ని పేర్కొంటుంది మరియు SSH సేవిక తదుపరి కనెక్షన్ను తెరుస్తుంది, అందుకే గమ్య శోధన అవతలి వైపు జరగగలదు. ఇది యాప్ స్థాయి TCP ఫార్వార్డింగ్, మొత్తం పరికరానికి VPN కాదు. ఇది ఏ UDP అనుబంధాన్ని, ICMP ను, ప్రాక్సీ సెట్టింగ్లను పూర్తిగా నిర్లక్ష్యం చేసే యాప్లకు ఏమీ మోసుకెళ్లదు. SSH సేవిక నుండి యాప్ వరకు దాటిక కూడా మీ సొరంగం లోపల లేదు, గమ్యం తెలిసిన నెట్వర్క్ల నుండి మాత్రమే ట్రాఫిక్ స్వీకరించినప్పుడు ఇది ముఖ్యం.
ముందస్తు షరతులు నిజమైనవి: SSH హోస్ట్కు మార్గం, అధికారిక ఖాతా, ధృవీకరించిన సేవిక హోస్ట్ కీ మరియు ఫార్వార్డ్ చేయడానికి అనుమతి. వాటిలో ఏదీ ప్రాక్సీ సృష్టించదు, చివరిది సాధారణంగా మొదట కనిపించదు. మరేదైనా డీబగ్ చేయడానికి ముందు నాలుగింటినీ నిర్ధారించండి, ఎందుకంటే క్లయింట్ వైపు నుండి వైఫల్యం ఒకేలా కనిపిస్తుంది, ఏది లేకున్నా.
స్పష్టమైన పోర్ట్తో దాన్ని లూప్బ్యాక్లో ప్రారంభించండి
ఉపయోగించని స్థానిక పోర్ట్ను ఎంచుకుని, చిరునామాను వదిలివేయకుండా దాన్ని స్పష్టంగా లూప్బ్యాక్కు కట్టండి. కింది మూడు ఎంపికలు ఒక్కొక్కటి ఒక కారణంతో ఉన్నాయి.
ssh -D 127.0.0.1:1080 -NT -o ControlPath=none -o ExitOnForwardFailure=yes \
[email protected]
-N దూర కమాండ్ను దాటవేస్తుంది, -T సూడో-టెర్మినల్ను దాటవేస్తుంది, కాబట్టి సెషన్ ఫార్వార్డింగ్ కోసం మాత్రమే ఉంటుంది. ExitOnForwardFailure శ్రోతను సృష్టించలేనప్పుడు క్లయింట్ను నిష్క్రమించేలా చేస్తుంది, మీరు అడిగిన ఫార్వార్డింగ్ లేకుండా నడవడం బదులు. ControlPath=none సెషన్ను తన సొంత ఫార్వార్డింగ్లను జోడించగల ఉన్న మల్టీప్లెక్స్ కనెక్షన్ వెలుపల ఉంచుతుంది. లూప్బ్యాక్ శ్రోతను LAN నుండి బయట ఉంచుతుంది, కానీ పంచుకున్న యంత్రంలో ఇది అధికార హద్దు కాదు, ఎందుకంటే ఇతర స్థానిక ప్రక్రియలు కూడా దాన్ని చేరగలవు. OpenSSH క్లయింట్ సూచన ఈ ఫ్లాగ్లన్నింటినీ నమోదు చేస్తుంది, లూప్బ్యాక్ హెచ్చరిక వినే సాకెట్ అంటే ఏమిటి అన్నదాని నుండి వస్తుంది.
పేర్లను ప్రాక్సీ ద్వారా పంపండి, దాని చుట్టూ కాదు
SOCKS5 క్లయింట్ గమ్యాన్ని తానే పరిష్కరించుకోవచ్చు లేదా ప్రాక్సీని అడగవచ్చు, ఈ ఎంపిక ఏ పరిష్కర్త సమాధానం ఇస్తుందో నిర్ణయిస్తుంది. socks5h తో curl హోస్ట్ పేరును ప్రాక్సీ ద్వారా పంపుతుంది, కాబట్టి శోధన SSH సేవికపై జరుగుతుంది. సాధారణ socks5 తో ల్యాప్టాప్ మొదట పరిష్కరిస్తుంది మరియు కనెక్షన్ మాత్రమే ప్రయాణిస్తుంది, పేరు అంతర్గతమైనప్పుడు ఇది లక్ష్యాన్ని నిశ్శబ్దంగా దెబ్బతీస్తుంది. కింది అభ్యర్థన ప్రాక్సీ-రహిత జాబితాను కూడా ఖాళీ చేస్తుంది, కాబట్టి వారసత్వంగా వచ్చిన NO_PROXY విలువ దాన్ని ప్రాక్సీ చుట్టూ తీసుకెళ్లలేదు.
curl -sS --noproxy '' --proxy socks5h://127.0.0.1:1080 https://app.corp.example/health
ధృవపత్ర ధృవీకరణ మరియు యాప్ యొక్క స్వంత లాగిన్ ఇప్పటికీ వర్తిస్తాయి, ఎందుకంటే ప్రాక్సీ రెండింటినీ భర్తీ చేయదు. రెండు శోధనలు మిగిలాయి: ల్యాప్టాప్ అనుమతించిన VPN మరియు DNS మార్గం ద్వారా SSH హోస్ట్ను చేరాలి, SSH సేవిక యాప్ పేరును తానే పరిష్కరించాలి. రెండోదాన్ని ఏ ట్రాఫిక్ ప్రాక్సీ ద్వారా వెళ్లకముందే విడిగా పరీక్షించవచ్చు.
ssh [email protected] getent hosts app.corp.example
ఒక అనుమతించిన గమ్యాన్ని నిరూపించండి, తర్వాత సెషన్ను మూసివేయండి
విధానం అనుమతించే గమ్యాన్ని మరియు అది తిరస్కరించాల్సిన దాన్ని పరీక్షించండి, ఎందుకంటే పని చేసే ఫార్వార్డింగ్ శ్రోత పని చేస్తుందని మాత్రమే నిరూపిస్తుంది, అంతకంటే ఎక్కువ కాదు. యాప్ SSH సేవిక ఎంచుకునే మూల చిరునామాన్ని చూస్తుంది, అది మీ ల్యాప్టాప్ సొరంగ చిరునామా కాదు. అవతలి చివర కనెక్షన్లను మూలం ప్రకారం నమోదు చేసే చోట, అభ్యర్థన తిరస్కరించబడినప్పుడు మొదట చూడాల్సింది ఆ భేదమే.
సెషన్ను దానిని కలిగి ఉన్న ప్రక్రియ ద్వారా ఆపండి, సంబంధం లేని షెల్ను చంపడం బదులు. తర్వాత శ్రోత వెళ్లిపోయిందని నిర్ధారించండి, ఎందుకంటే ఇప్పటికీ సమాధానం ఇచ్చే పోర్ట్ మీరు నిజంగా మూయని సెషన్. ఈ వ్యాయామం తెచ్చిన ప్రాక్సీ సెట్టింగ్ను మాత్రమే తొలగించండి, యాప్ కాన్ఫిగరేషన్ మిగిలిన భాగాన్ని అలాగే ఉంచండి. ఫార్వార్డింగ్ నియమాన్ని పట్టుకున్న పర్యవేక్షణ లేని టెర్మినల్ సేవ కాదు, మరియు శాశ్వత ప్రాక్సీకి ఆమోదించిన జీవిత చక్రం కావాలి, మరచిన విండో కాదు.
ss -ltn | grep 1080
ఈ ఏర్పాటు సరిదిద్దలేని వైఫల్యాలు
కొన్ని లక్షణాలు పైన ఉన్న పరిమితుల వైపు నేరుగా సూచిస్తాయి, వాటిని ముందుగా గుర్తిస్తే ప్రాక్సీ డీబగ్గింగ్ మధ్యాహ్నం ఆదా అవుతుంది. పట్టిక మీరు చూసేదాన్ని అది సాధారణంగా అర్థం చేసుకునే దానితో కలుపుతుంది. చివరి నిలువు వరుసలో ఏదైనా కాన్ఫిగరేషన్ పొరపాటు కాదు, రూపకల్పన ప్రశ్న.
| What you see | What it usually means | Where to look |
|---|---|---|
| The app connects and nothing follows | It ignores proxy settings entirely | Its own network settings, not the SSH session |
| A name resolution error for the destination | The SSH server cannot resolve it | Server resolver and search domains |
| A UDP-only application fails | Dynamic forwarding carries TCP only | This arrangement cannot serve it |
| curl works, the browser does not | The browser is not using the socks5h endpoint | Browser proxy configuration |
| The listener answers after the session ended | Another process owns port 1080 | The ss output, then the owning process |
మొదటి మూడు వరుసలు ప్రజలు తప్పుగా నిర్ధారణ చేసేవి, ఎందుకంటే ఒక్కొక్కటి ప్రాక్సీ గురించి దోషానికి బదులు కనెక్షన్ ప్రయత్నాన్ని ఉత్పత్తి చేస్తుంది. ల్యాప్టాప్లో పరిష్కారమయ్యే పేరు సేవిక పరిష్కర్త గురించి ఏమీ చెప్పదు, వైఫల్యం దానికి బదులు ధృవపత్రం లేదా సమయ పరిమితి సమస్యగా చదవబడుతుంది. UDP మాత్రమే ఉన్న యాప్లు రూపకల్పన లోపల విరిగిపోకుండా దాని వెలుపల నిలుస్తాయి, ఏ అదనపు ssh ఎంపికా దాన్ని మార్చదు. బ్రౌజర్ వరుస ప్రాక్సీ సెట్టింగ్లు ప్రతి యాప్కు విడివిడిగా ఉంటాయని గుర్తు చేస్తుంది. చివరి వరుస మూసివేత తనిఖీ ఎందుకు ఉందో చూపుతుంది: ఇప్పటికీ వినిపించే పోర్ట్ అంటే ఇప్పుడు వేరే ఏదో దాన్ని కలిగి ఉంది.