നിങ്ങളുടെ 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 ഓപ്ഷനും അത് മാറ്റുന്നില്ല. ബ്രൗസർ വരി പ്രോക്സി ക്രമീകരണങ്ങൾ ഓരോ ആപ്പിനും വേറെയാണ് എന്ന സാധാരണ ഓർമ്മപ്പെടുത്തലാണ്. അവസാന വരിയാണ് അടയ്ക്കൽ പരിശോധന എന്തിനുണ്ടെന്ന് കാണിക്കുന്നത്: ഇപ്പോഴും കേൾക്കുന്ന പോർട്ട് എന്നാൽ ഇപ്പോൾ അതിന് മറ്റെന്തോ ഉടമയുണ്ട്.