ഏത് പ്ലാറ്റ്ഫോമിലും കോഡിൽ നിന്ന് സക്രിയ VPN ടണൽ കണ്ടെത്തുന്നത് എങ്ങനെ
ടണൽ നിലവിലുണ്ടോ, ഈ ലക്ഷ്യം അതിലൂടെ കടക്കുന്നുണ്ടോ, അതോ ദൂരെയുള്ള അറ്റം മറുപടി നൽകുന്നുണ്ടോ? ഇവ മൂന്ന് വ്യത്യസ്ത പരിശോധനകളും മൂന്ന് വ്യത്യസ്ത സിഗ്നലുകളുമാണ്.
“VPN ഓണാണോ?” എന്നത് യഥാർത്ഥത്തിൽ ഒരു വാക്യത്തിലെ മൂന്ന് ചോദ്യങ്ങളാണ്। നിങ്ങളുടെ കോഡിന് അവയിൽ ഏതാണ് വേണ്ടതെന്നതാണ് ആദ്യ തീരുമാനം, മിക്ക നടപ്പാക്കലുകളും അത് ഒഴിവാക്കുന്നു। ഈ ഉപകരണത്തിൽ ടണൽ ഉണ്ടോ, ഈ ലക്ഷ്യത്തിലേക്കുള്ള ട്രാഫിക് അതിലൂടെ പുറത്തുപോകുന്നുണ്ടോ, അതോ ദൂരെയുള്ള അറ്റം നിങ്ങൾ പ്രതീക്ഷിക്കുന്ന ഐഡന്റിറ്റിയുമായി മറുപടി നൽകുന്നുണ്ടോ। ഗുണം തിരഞ്ഞെടുക്കുക, പിന്നെ അത് അളക്കുന്ന സിഗ്നൽ തിരഞ്ഞെടുക്കുക, അവസാനം നിങ്ങൾ യഥാർത്ഥത്തിൽ ഏതാണ് അളന്നതെന്ന് ലോഗിൽ എഴുതുക।
മൂന്ന് ഗുണങ്ങൾ, മൂന്ന് സിഗ്നലുകൾ
ഓരോന്നും ഒരു വരിയിലാക്കുമ്പോൾ, മൂന്ന് ചോദ്യങ്ങൾക്ക് മൂന്ന് വ്യത്യസ്ത ഉത്തരങ്ങളുണ്ട്। താഴെയുള്ള പട്ടിക തന്നെ തീരുമാനമാണ്, അതിന്റെ സംഗ്രഹമല്ല।
| Property | Signal that answers it | What it still leaves open |
|---|---|---|
| Existence | The platform's own connection state: RAS on Windows, NetworkManager on D-Bus on Linux, scutil on macOS | Tunnels of a type the platform does not manage, which includes most third-party clients |
| Path | A route lookup for the one destination, or a scoped proxy or interface key that names the tunnel | Whether the far end is the peer you trust |
| Identity | An authenticated response from the far end, or a source-address policy applied on the server | Which local interface carried the packets |
അവസാന വരി പതിയെ വായിക്കുക। മറുപടി നൽകുന്ന സ്വകാര്യ ഹോസ്റ്റ് എന്തോ ഒന്ന് മറുപടി നൽകി എന്ന് തെളിയിക്കുന്നു, മറുപടി ടണലിലൂടെ വന്നു എന്നല്ല, മറുവശത്ത് ആരുണ്ടെന്നതിനെക്കുറിച്ച് ഒന്നും പറയുന്നുമില്ല। നിങ്ങൾക്ക് വേണ്ട ഗുണം പഥമാണെങ്കിൽ, പഥം അളക്കുക।
നിലനിൽപ്പ്: പ്ലാറ്റ്ഫോമിന്റെ സ്വന്തം അവസ്ഥ
Windows സ്വദേശീയ പ്രൊഫൈലുകൾക്ക് ഇതിന് Remote Access Service API വഴി മറുപടി നൽകുന്നു। RasEnumConnections എന്താണ് ബന്ധിപ്പിച്ചിരിക്കുന്നതെന്ന് ലിസ്റ്റ് ചെയ്യുന്നു, RasGetConnectStatus ഒരു എൻട്രിയുടെ അവസ്ഥ റിപ്പോർട്ട് ചെയ്യുന്നു, RasGetLinkStatistics വേഗത, ബൈറ്റ് കൗണ്ടറുകൾ, കണക്ഷന്റെ പ്രായം എന്നിവ ചേർക്കുന്നു। പരിധികളാണ് കാര്യം: OpenVPN, WireGuard, വെണ്ടർ ക്ലയന്റുകൾ ഒരിക്കലും RAS കണക്ഷൻ രജിസ്റ്റർ ചെയ്യുന്നില്ല, അതിനാൽ ആ തരത്തിലുള്ള ആരോഗ്യകരമായ ടണൽ ശൂന്യമായ ലിസ്റ്റ് കാണിക്കുന്നു, നിഷ്കളങ്കമായ കോഡ് അതിനെ ഓഫ് എന്ന് റിപ്പോർട്ട് ചെയ്യുന്നു।
Linux ഡെസ്ക്ടോപ്പുകൾ അതേ ഗുണം D-Bus-ലെ NetworkManager വഴി വെളിപ്പെടുത്തുന്നു, അവിടെ VPN കണക്ഷൻ ഒബ്ജക്റ്റിലെ PropertiesChanged പരിശോധനയെ ഇവന്റാക്കി മാറ്റുന്നു, State ഗുണം ലിങ്ക് ബന്ധിപ്പിച്ച അവസ്ഥയിൽ എത്തുന്നത് റിപ്പോർട്ട് ചെയ്യുന്നു। ഒരു ഷെല്ലിൽ നിന്ന് nmcli connection show --active അതേ വിവരങ്ങൾ വായിക്കുന്നു, ഡീബഗ്ഗിംഗ് സമയത്ത് നിങ്ങൾക്ക് വേണ്ടത് അതാണ്। macOS ആ ലിസ്റ്റ് System Configuration ഫ്രെയിംവർക്കിൽ സൂക്ഷിക്കുന്നു, scutil അതിന്റെ കമാൻഡ്-ലൈൻ കാഴ്ചയാണ്। മൂന്നും പ്ലാറ്റ്ഫോം കൈകാര്യം ചെയ്യുന്ന ഒരു കണക്ഷനെ വിവരിക്കുന്നു, മൂന്നും അത് കൈകാര്യം ചെയ്യാത്ത ടണലിനെക്കുറിച്ച് മൗനം പാലിക്കുന്നു।
പഥം: പാക്കറ്റ് യഥാർത്ഥത്തിൽ എങ്ങോട്ട് പോകുന്നു
പേര് പൊരുത്തപ്പെടുത്തൽ എല്ലാവരും ആദ്യം എത്തുന്ന കുറുക്കുവഴിയാണ്: ഇന്റർഫേസുകൾ ലിസ്റ്റ് ചെയ്യുക, സ്ട്രിംഗ് tun, tap, ppp അല്ലെങ്കിൽ ipsec എന്നിവയുമായി പരിശോധിക്കുക, പൊരുത്തം തെളിവായി കണക്കാക്കുക। ഇത് ഒരു ഹ്യൂറിസ്റ്റിക്കാണ്, ഇന്റർഫേസ് കൂട്ടം അതിലൂടെ എന്തെങ്കിലും നീങ്ങുന്നുണ്ടോ ഇല്ലയോ എന്നത് കണക്കിലെടുക്കാതെ ഒരുപോലെ തോന്നാം। പഴയ iOS ബിൽഡുകൾ ഇങ്ങനെ മറുപടി നൽകിയിരുന്നു, പിന്നീടുള്ളവ നിർത്തി, കാരണം കാണുന്ന ഇന്റർഫേസുകൾ ഇനി രണ്ട് അവസ്ഥകളെ വേർതിരിച്ചില്ല।
അവിടെ അതിനെ മാറ്റിയത് സിസ്റ്റം പ്രോക്സി നിഘണ്ടുവാണ്। VPN ബന്ധിപ്പിച്ചിരിക്കുമ്പോൾ പ്രോക്സി ക്രമീകരണങ്ങളുടെ വിളി ടണലുമായി ബന്ധപ്പെട്ട ഇന്റർഫേസുകളിൽ പരിമിതപ്പെടുത്തിയ കീകൾ തിരികെ നൽകുന്നു, ഒന്നും ബന്ധിപ്പിച്ചിട്ടില്ലെങ്കിൽ നിഘണ്ടു ശൂന്യമായി മടങ്ങുന്നു। ഇത് കേൾക്കുന്നതിലും ദുർബലമായ പ്രസ്താവനയാണ്, കാരണം ടണൽ നിലവിലുണ്ടെന്ന സിസ്റ്റത്തിന്റെ വിശ്വാസം രേഖപ്പെടുത്തുന്നു, ഏത് ലക്ഷ്യം അത് ഉപയോഗിക്കുന്നു എന്നല്ല।
Android-ന് ഈ കെണിയുടെ സ്വന്തം പതിപ്പുണ്ട്: vpn.connectivity ബ്രോഡ്കാസ്റ്റ് ചില ബിൽഡുകളിൽ മാനിഫെസ്റ്റിൽ പ്രഖ്യാപിച്ച റിസീവറുകളിലേക്കും മറ്റുള്ളവയിൽ റൺടൈമിൽ രജിസ്റ്റർ ചെയ്ത റിസീവറുകളിലേക്കും എത്തുന്നു। അതിനെ മികച്ച ശ്രമമായി കാണുക, അതിന് പിന്നിൽ നേരിട്ടുള്ള പരിശോധന സൂക്ഷിക്കുക।
ലക്ഷ്യമാണ് പ്രധാനമെങ്കിൽ, അഡാപ്റ്റർ ലിസ്റ്റിന് പകരം റൂട്ടിംഗ് പട്ടികയോട് ചോദിക്കുക। സ്ഥിരസ്ഥിതി ഗേറ്റ്വേ ഹ്യൂറിസ്റ്റിക്കുകൾ ഒന്നിലധികം നെറ്റ്വർക്കുകൾ ഉള്ള യന്ത്രങ്ങളിലും സ്വന്തം ഗേറ്റ്വേ ഇൻസ്റ്റാൾ ചെയ്യുന്ന ടണലുകളിലും തകരുന്നു।
ഐഡന്റിറ്റി: ദൂരെയുള്ള അറ്റം പരിശോധിക്കുക
ഓരോ കുറച്ച് സെക്കൻഡിലും ദൂരെയുള്ള അറ്റത്തേക്ക് ICMP എക്കോ അയയ്ക്കുന്ന ലൂപ്പ് ഇത്തരം പരിശോധനകളിൽ ഏറ്റവും വിലകുറഞ്ഞതാണ്, അത് ഉപയോഗപ്രദമായ ദിശയിൽ പരാജയപ്പെടുന്നു। സ്വകാര്യ നെറ്റ്വർക്കിനുള്ളിൽ മാത്രം നിലനിൽക്കുന്ന വിലാസത്തിലേക്ക് അത് ലക്ഷ്യമിടുക, കാരണം പൊതു വിലാസം പ്രവർത്തിക്കുന്ന ഏത് അപ്ലിങ്കിലൂടെയും മറുപടി നൽകുന്നു, ഒന്നും തെളിയിക്കുന്നുമില്ല। ICMP ഫിൽട്ടർ ചെയ്യുന്നിടത്ത്, സേവന പോർട്ടിലേക്കുള്ള ചെറിയ TCP കണക്ഷൻ അതേ ജോലി ചെയ്യുന്നു।
സർവർ വശത്തെ പരിശോധനയ്ക്ക് കൃത്യമായി ഒരു സിഗ്നലേ ലഭ്യമാകൂ: കണക്ഷനിലെ ഉറവിട വിലാസം। ശ്രേണികളുടെ ഇൻവെന്ററി സൂക്ഷിക്കുന്നത് പരിപാലന ജോലിയാണ്, അത് അതേ ബ്ലോക്ക് ഉപയോഗിക്കുന്ന മറ്റേതെങ്കിലും നെറ്റ്വർക്കിൽ നിന്ന് ടണലിനെ വേർതിരിക്കാനാവില്ല।
പരുക്കൻ നയത്തിന് ഇതുമായി പോകാം। ഐഡന്റിറ്റിക്ക് പോകാനാവില്ല, അതിനാൽ അതിന്റെ പാക്കറ്റുകൾ എവിടെ നിന്ന് വരുന്നതായി തോന്നുന്നു എന്നത് വിശ്വസിക്കുന്നതിന് പകരം ക്ലയന്റിനെ പ്രാമാണീകരിക്കുക।
വിഭാഗം രേഖപ്പെടുത്തുക, വിധിയല്ല
പരാജയ വിഭാഗങ്ങൾ ലോഗിൽ വേർതിരിച്ച് സൂക്ഷിക്കുക: ഒരു ഇന്റർഫേസും ഇല്ല, ഇന്റർഫേസ് ഉണ്ട് പക്ഷേ ലക്ഷ്യം എത്താനാവില്ല, ലക്ഷ്യം എത്താം പക്ഷേ പ്രാമാണീകരണം നിരസിച്ചു। ഇവ മൂന്ന് വ്യത്യസ്ത ഉടമകളാണ്, ഓരോരുത്തരും വ്യത്യസ്ത അന്വേഷണം തുറക്കുന്നു।
അവയെ ഒരു “VPN ഓഫ്” ആക്കി ചുരുക്കുന്നത് ശരിയാക്കാനാവാത്ത ടീമിന് റിപ്പോർട്ട് അയയ്ക്കുന്നു। വിഭാഗമാണ് ഉപയോഗപ്രദമായ ഔട്ട്പുട്ട്; വിധിയാണ് അതിനെ തെറ്റാക്കുന്നത്।