Android, iOS, Windows എന്നിവയിൽ പിംഗ് ഇല്ലാതെ VPN നില പരിശോധിക്കുന്നത് എങ്ങനെ
ഒരു ഹോസ്റ്റ് ഉത്തരം നൽകി എന്ന് മാത്രമാണ് പിംഗ് തെളിയിക്കുന്നത്, ടണൽ സജീവമാണെന്നല്ല. Android, iOS, Windows സ്റ്റാറ്റസ് API-കളോട് ചോദിക്കുക, തുടർന്ന് നിങ്ങളുടെ ആപ്പിന് യഥാർത്ഥത്തിൽ വേണ്ട റൂട്ട് പരിശോധിക്കുക.
192.0.2.10-ലേക്ക് പിംഗ് ചെയ്യുമ്പോൾ ഒരു വിലാസം ICMP എക്കോയ്ക്ക് ഉത്തരം നൽകി എന്ന് മാത്രം അറിയാം, അത്രമാത്രം. ടണൽ ഇല്ലാത്ത നെറ്റ്വർക്കിലും അത് വിജയിച്ചേക്കാം, കാരണം വിലാസം ലോക്കൽ സബ്നെറ്റിലായിരിക്കാം; ആരോഗ്യകരമായ ടണലുണ്ടായാലും അത് പരാജയപ്പെടാം, കാരണം സെർവർ HTTPS നൽകുമ്പോൾ ICMP ഉപേക്ഷിക്കുന്നു. നിങ്ങളുടെ സ്ക്രിപ്റ്റിന് വേണ്ട പരിശോധന പ്ലാറ്റ്ഫോം സ്റ്റാറ്റസ് ചോദ്യവും ആപ്പ് ഉപയോഗിക്കുന്ന ലക്ഷ്യത്തിലേക്കുള്ള റൂട്ട് പരിശോധനയുമാണ്. ഇവയെ രണ്ട് വേറിട്ട ഫീൽഡുകളായി കാണുക, ഒരിക്കലും ഒരു ബൂളിയൻ ആയി അല്ല.
എക്കോ മറുപടി യഥാർത്ഥത്തിൽ എന്ത് തെളിയിക്കുന്നു
ICMP എന്നത് ഇന്റർഫേസുകളെയോ ടണലുകളെയോ കുറിച്ച് ധാരണയില്ലാത്ത ഒരു റീച്ചബിലിറ്റി പ്രോട്ടോക്കോളാണ്. മറുപടി വരുമ്പോൾ കേർണൽ ഒരു ഹോസ്റ്റ് ഉത്തരം നൽകി എന്ന് റിപ്പോർട്ട് ചെയ്യുന്നു; അഭ്യർത്ഥന കൊണ്ടുപോയ റൂട്ടോ മറുപടി കൊണ്ടുവന്ന റൂട്ടോ അത് റിപ്പോർട്ട് ചെയ്യുന്നില്ല. ഫിൽട്ടറിംഗ് സിഗ്നലിനെ കൂടുതൽ ശബ്ദമുള്ളതാക്കുന്നു, കാരണം എക്കോ അഭ്യർത്ഥനകൾ തടയുന്ന ഫയർവാൾ അതിന് പിന്നിലെ പോർട്ടുകളെക്കുറിച്ച് ഒന്നും പറയുന്നില്ല. കൂടാതെ വിഭജിത ടണൽ പ്രൊഫൈൽ പരീക്ഷിച്ച വിലാസം ബോധപൂർവ്വം ഒഴിവാക്കാം, മറ്റെല്ലാ ലക്ഷ്യങ്ങളും പ്രവർത്തിക്കുമ്പോൾ.
നിങ്ങൾ യഥാർത്ഥത്തിൽ അറിയാൻ ആഗ്രഹിക്കുന്നത്, ആപ്പ് സഞ്ചരിക്കുന്ന പാതയിൽ ഒരു നിർദ്ദിഷ്ട സേവനം ഉപയോഗയോഗ്യമാണോ എന്നാണ്. ആപ്പ് വിളിക്കുന്ന ഹോസ്റ്റും പോർട്ടും തിരഞ്ഞെടുക്കുക, തുടർന്ന് ആപ്ലിക്കേഷൻ പാളിയിൽ മറുപടി ആവശ്യപ്പെടുക.
റീച്ചബിലിറ്റിയും ടണൽ നിലയും വ്യത്യസ്ത വസ്തുതകളാണ്, ഒന്ന് ശരിയായിരിക്കുമ്പോൾ മറ്റൊന്ന് തെറ്റായിരിക്കാം. അവ വേറിട്ട് നിർത്തുന്നത് പരാജയം ആരുടേതാണെന്ന് പറയും. അവയെ ഒരു പരിശോധനയിൽ ചേർത്താൽ ആർക്കും റൂട്ട് ചെയ്യാൻ കഴിയാത്ത ഒരു ടിക്കറ്റ് ഉണ്ടാകും.
Android-നോട് പിംഗ് അല്ല, ട്രാൻസ്പോർട്ട് ചോദിക്കുക
Android സ്റ്റാറ്റസ് ചോദ്യത്തിന് ConnectivityManager വഴി നേരിട്ട് ഉത്തരം നൽകുന്നു. സജീവ നെറ്റ്വർക്കിന്റെ കഴിവുകളിൽ VPN ട്രാൻസ്പോർട്ട് ഫ്ലാഗ് ഉണ്ട്, ട്രാഫിക് VPN ഇന്റർഫേസ് വഴി റൂട്ട് ചെയ്യുമ്പോൾ അത് സജ്ജമാകുന്നു. ഈ വിളി ലോക്കലും വിലകുറഞ്ഞതും ഏതെങ്കിലും ദൂര ഹോസ്റ്റ് ഉത്തരം നൽകുന്നുണ്ടോ എന്നതിൽ നിന്ന് സ്വതന്ത്രവുമാണ്.
സജീവ നെറ്റ്വർക്ക് ഇല്ലാത്തപ്പോൾ ഈ Java പതിപ്പ് എക്സെപ്ഷൻ എറിയുന്നതിന് പകരം false നൽകുന്നു. അത് സജീവ നെറ്റ്വർക്ക് വായിക്കുന്നതിനാൽ, ഉപയോക്താവ് ക്രമീകരണങ്ങളിൽ തിരഞ്ഞെടുത്ത പ്രൊഫൈൽ പ്രതിഫലിപ്പിക്കുന്നു.
ConnectivityManager cm = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkCapabilities caps = cm.getNetworkCapabilities(cm.getActiveNetwork());
boolean tunnel = caps != null && caps.hasTransport(NetworkCapabilities.TRANSPORT_VPN);
മാറ്റ അറിയിപ്പുകൾക്ക്, ടൈമറിൽ പോൾ ചെയ്യുന്നതിന് പകരം NetworkCallback രജിസ്റ്റർ ചെയ്യുക. അതിനെ VpnService.prepare-മായി കൂട്ടിക്കുഴയ്ക്കരുത്, അത് ഉപയോക്താവ് VPN-ന് അനുമതി നൽകിയോ എന്ന് മാത്രം റിപ്പോർട്ട് ചെയ്യുന്നു, പാക്കറ്റുകൾ ഒഴുകുന്നുണ്ടോ എന്നല്ല. റദ്ദാക്കൽ VpnService.onRevoke വഴി വരുന്നു, പക്ഷേ ക്രമീകരണങ്ങളിൽ ഒരു പ്രൊഫൈൽ മറന്നാൽ ഒരു ബ്രോഡ്കാസ്റ്റും ഉണ്ടാകുന്നില്ല.
iOS: ഇന്റർഫേസ് പേരുകൾ ഒരു ഹ്യൂറിസ്റ്റിക് ആണ്, കരാറല്ല
പല iOS സ്നിപ്പറ്റുകളും പ്രോക്സി ക്രമീകരണങ്ങൾ പരിശോധിച്ച് __SCOPED__ നിഘണ്ടു കണ്ടെത്തി tap, tun, utun2, ppp അല്ലെങ്കിൽ ipsec പോലുള്ള ഇന്റർഫേസ് കീകൾ തിരയുന്നു. ആ സമീപനം ഒരു നാമകരണ കൺവെൻഷനാണ്, രേഖപ്പെടുത്തിയ ഉറപ്പല്ല, അതിനാൽ ഇന്റർഫേസ് പേരുമാറ്റുന്ന OS അപ്ഡേറ്റ് അത് തകർക്കാം. ടണലിനെ അതിജീവിക്കുന്ന പഴയ എൻട്രികൾക്ക് true റിപ്പോർട്ട് ചെയ്യാനും അത് സാധ്യതയുള്ളതാണ്.
കോൺഫിഗറേഷൻ നിങ്ങളുടെ ആപ്പിന്റേതാണെങ്കിൽ, പകരം NEVPNManager യഥാർത്ഥ നില നൽകുന്നു. നിങ്ങളുടെ ആപ്പ് ആരംഭിച്ച ടണൽ അത് വിവരിക്കുന്നു; ഓരോ ആപ്പിനുമുള്ള VPN-ൽ, മറ്റ് ആപ്പുകൾ ആ ടണലിന് പുറത്തായിരിക്കാം.
നില വായിക്കുന്നതിന് മുമ്പ് മുൻഗണനകൾ വീണ്ടും ലോഡ് ചെയ്യുക, കാരണം ടണൽ ഉയരുകയും താഴുകയും ചെയ്യുമ്പോൾ മൂല്യം മാറുന്നു:
let manager = NEVPNManager.shared()
manager.loadFromPreferences { error in
let up = manager.connection.status == .connected
print(up)
}
പ്ലാറ്റ്ഫോം സ്റ്റാറ്റസ് ഫ്ലാഗ് ഇപ്പോഴും ട്രാഫിക് പീയറിലെത്തുന്നു എന്ന് തെളിയിക്കുന്നില്ല. ആ വിടവാണ് റൂട്ട് പരിശോധന മൂടുന്നത്, അതുകൊണ്ടാണ് പിന്തുണയ്ക്ക് ഒരു ബൂളിയൻ മതിയാകാത്തത്.
Windows പ്രൊഫൈലുകൾ യഥാർത്ഥ സ്റ്റാറ്റസ് ഫീൽഡ് വെളിപ്പെടുത്തുന്നു
Windows VPN പ്രൊഫൈലുകൾ അഡാപ്റ്ററുകളിൽ നിന്ന് വേറിട്ട് ട്രാക്ക് ചെയ്യുന്നു, Get-VpnConnection അറിയാവുന്ന ഓരോ പ്രൊഫൈലിനും ConnectionStatus നൽകുന്നു. Windows ക്ലയന്റ് അല്ലെങ്കിൽ പ്രൊവിഷനിംഗ് പാക്കേജ് വഴി സൃഷ്ടിച്ച പ്രൊഫൈലുകൾ ഇവിടെ പ്രത്യക്ഷപ്പെടുന്നു. ഈ cmdlet ഒരു പൊതു ടണൽ ഡിറ്റക്ടറല്ല.
പേരുള്ള പ്രൊഫൈലിനായി ഫീൽഡ് വായിക്കുക, പ്രൊഫൈൽ എല്ലാ ഉപയോക്താക്കൾക്കുമുള്ളതാണെങ്കിൽ -AllUserConnection ചേർക്കുക:
Get-VpnConnection -Name "Fabrikam" | Select-Object Name, ConnectionStatus, ServerAddress
തേർഡ് പാർട്ടി ക്ലയന്റുകൾ അവരുടെ ടണൽ പ്രവർത്തിക്കുമ്പോഴും ഈ cmdlet-ന് അദൃശ്യമായി നിൽക്കാറുണ്ട്, അതിനാൽ ശൂന്യമായ ഫലം അജ്ഞാതം എന്നാണ് അർത്ഥം, വിച്ഛേദിച്ചതല്ല. അഡാപ്റ്റർ ലിസ്റ്റുകളും അത്രതന്നെ തെറ്റിദ്ധരിപ്പിക്കുന്നു: വെണ്ടർ അഡാപ്റ്റർ നിഷ്ക്രിയമായിരിക്കുമ്പോഴും നിലനിൽക്കാം, ചില അഡാപ്റ്ററുകൾ സെഷൻ സമയത്ത് മാത്രം നിലനിൽക്കുന്നു. Windows-ന്റെ ഉടമസ്ഥതയിലുള്ള പ്രൊഫൈലിന് rasdial ശാഖ ചെയ്യാവുന്ന എക്സിറ്റ് കോഡ് റിപ്പോർട്ട് ചെയ്യുന്നു. ഇവയെല്ലാം പ്രാദേശിക വിശ്വാസത്തെ വിവരിക്കുന്നു, പീയർ റീച്ചബിലിറ്റിയെയല്ല.
സ്റ്റാറ്റസ് പ്ലസ് റൂട്ട്: രണ്ട് ഭാഗ പരിശോധന
കണക്റ്റ് ചെയ്ത പ്രൊഫൈൽ പാക്കറ്റുകൾ എവിടേക്ക് പോകുന്നു എന്നതിനെക്കുറിച്ച് ഒന്നും പറയുന്നില്ല. വിഭജിത ടണലിംഗ് ടണൽ സജീവമായി നിർത്തിക്കൊണ്ട് നിങ്ങൾക്ക് പ്രധാനമായ ലക്ഷ്യം ഒഴിവാക്കാം. always-on പ്രൊഫൈലുകൾ ചത്ത സെർവറുമായി കണക്റ്റ് ചെയ്തിരിക്കും, ടണൽ വീഴുമ്പോൾ kill switch ബോധപൂർവ്വം ട്രാഫിക് തടയുന്നു.
രണ്ട് പാളികളും പരീക്ഷിക്കുക: VPN ട്രാൻസ്പോർട്ടോ പ്രൊഫൈലോ സജീവമാണെന്ന് സ്ഥിരീകരിക്കുക, തുടർന്ന് ലക്ഷ്യം ആ പാതയിലൂടെ റിസോൾവ് ചെയ്ത് ഉത്തരം നൽകുന്നുവെന്ന് സ്ഥിരീകരിക്കുക. Linux-ൽ, കേർണലിനോട് ഏത് ഇന്റർഫേസ് ഉപയോഗിക്കുമെന്ന് ചോദിക്കുക:
ip route get 192.0.2.10
resolvectl query intranet.example.test
ക്ലയന്റ് നിങ്ങളുടെ നിയന്ത്രണത്തിന് പുറത്താണെങ്കിൽ, രണ്ട് ഫലങ്ങളും ലോഗ് ചെയ്യുക, പാറ്റേൺ പാളിയിലേക്ക് വിരൽ ചൂണ്ടട്ടെ. കണക്റ്റ് ചെയ്തതും പരാജയപ്പെട്ട റൂട്ട് പരിശോധനയും വിഭജിത ടണലിംഗ്, DNS അല്ലെങ്കിൽ പോളിസി സൂചിപ്പിക്കുന്നു. വിച്ഛേദിച്ചതും പ്രവർത്തിക്കുന്ന റൂട്ട് പരിശോധനയും എന്നാൽ മറ്റൊരു പാത ട്രാഫിക് കൊണ്ടുപോകുന്നു എന്നാണ്.
ക്രമത്തിൽ പ്രവർത്തിപ്പിക്കാവുന്ന ഒരു പരീക്ഷണം
ഏതെങ്കിലും നെറ്റ്വർക്ക് അവസ്ഥ മാറ്റുന്നതിന് മുമ്പ് ആദ്യം പ്ലാറ്റ്ഫോം സ്റ്റാറ്റസ് രേഖപ്പെടുത്തുക. ഹോസ്റ്റ്നെയിം റിസോൾവ് ചെയ്ത് വിലാസ കുടുംബം കുറിക്കുക, കാരണം AAAA റെക്കോർഡ് A റെക്കോർഡിൽ നിന്ന് വ്യത്യസ്ത പാതയിലൂടെ പോകാം. സേവന പോർട്ട് തുറന്ന് വെറും ഹാൻഡ്ഷേക്കിന് പകരം ആപ്ലിക്കേഷൻ മറുപടി ആവശ്യപ്പെടുക. ഓരോ നിരീക്ഷണവും അതിന്റേതായ ലോഗ് ഫീൽഡിൽ സൂക്ഷിക്കുക.
dig ഉം curl ഉം ഉള്ള Linux യന്ത്രത്തിൽ, മൂന്ന് കമാൻഡുകൾ റിസോല്യൂഷൻ, റൂട്ട്, സേവനം എന്നിവ ഉൾക്കൊള്ളുന്നു. ടണൽ ഉയർത്തിയ അവസ്ഥയിലും താഴ്ത്തിയ അവസ്ഥയിലും അവ പ്രവർത്തിപ്പിക്കുക:
dig +short intranet.example.test
ip route get 198.51.100.20
curl -sS -o /dev/null -w "%{http_code}" --max-time 8 https://intranet.example.test/health
നാല് വേറിട്ട ഫീൽഡുകൾ ഒരു ബൂളിയനെക്കാൾ മികച്ചതാണ്, കാരണം സ്റ്റാറ്റസ്, DNS, റൂട്ട്, പോളിസി എന്നിവ സ്വതന്ത്രമായി പരാജയപ്പെട്ട് വ്യത്യസ്ത ടീമുകളിൽ എത്തുന്നു. ടെർമിനലിലെ പിംഗ് നല്ല ഒരു മാനുവൽ പരിശോധനയായി തുടരുന്നു. ഓട്ടോമേഷന് അത് മോശം കണക്റ്റിവിറ്റി നിർവചനമാണ്, അവിടെ പ്ലാറ്റ്ഫോം API-യും റൂട്ട് പരിശോധനയും യഥാർത്ഥ ചോദ്യത്തിന് ഉത്തരം നൽകുന്നു.