Android OpenVPN ടണൽ വിലാസമില്ലാതെ റൂട്ട് ചേർക്കുന്നില്ല
ഫോണിൽ ടണൽ വിലാസം ഉണ്ടാകുന്നതുവരെ Android OpenVPN ക്ലയന്റുകൾക്ക് റൂട്ടുകൾ ചേർക്കാനാവില്ല. ആരാണ് അത് അനുവദിക്കുന്നത്, ഏത് pull ഫിൽട്ടറുകളാണ് അത് ഒഴിവാക്കുന്നത്, എപ്പോൾ നിങ്ങൾ തന്നെ ടൈപ്പ് ചെയ്യണം എന്നിവ പരിശോധിക്കുക.
നിങ്ങളുടെ Android OpenVPN പ്രൊഫൈലിന് റൂട്ട് ചേർക്കാനാവുന്നില്ല, കാരണം ഫോണിന് വെർച്വൽ ഇന്റർഫേസിൽ വിലാസമില്ല, അതിനാൽ റൂട്ട് ചൂണ്ടിക്കാണിക്കാൻ ഒന്നുമില്ല. റൂട്ടുകൾ പാക്കറ്റുകൾ എവിടെ പോകണം എന്നതിന് മാത്രം ഉത്തരം നൽകുന്നു. ടണലിനുള്ളിൽ ഫോൺ ആരാണെന്നതിന് ടണൽ വിലാസം ഉത്തരം നൽകുന്നു, ഇന്റർഫേസ് നിലനിൽക്കുന്നതിന് മുൻപ് ക്ലയന്റ് ഒന്ന് നൽകണം. താഴെയുള്ള നാല് പരിശോധനകൾ ക്രമത്തിൽ ചെയ്ത് ആദ്യ പരാജയത്തിൽ നിർത്തുക, കാരണം വിലാസം ഉണ്ടാകുന്നതിന് മുൻപ് റൂട്ടുകൾ തിരുത്തുന്നത് യഥാർത്ഥ പ്രശ്നം മറയ്ക്കുന്നു.
ക്ലയന്റ് പ്രവർത്തിപ്പിക്കുന്ന ക്രമത്തിൽ തന്നെ പരാജയം വായിക്കുക
Android-ന്റെ VpnService.Builder രണ്ട് ആശയങ്ങളും വേർതിരിച്ച് സൂക്ഷിക്കുന്നു: addAddress() ആപ്പ് നിർമ്മിക്കുന്ന ഇന്റർഫേസിൽ വിലാസം ഇടുന്നു, addRoute() ലക്ഷ്യ പ്രിഫിക്സ് ചേർക്കുന്നു, establish() കുറഞ്ഞത് ഒരു വിലാസം ചേർക്കുന്നതുവരെ ഇന്റർഫേസ് സൃഷ്ടിക്കാൻ വിസമ്മതിക്കുന്നു. OpenVPN ക്ലയന്റ് പ്രൊഫൈലും സർവർ അയക്കുന്ന ഓപ്ഷനുകളും കൃത്യമായി ആ കോളുകളിലേക്ക് മാപ്പ് ചെയ്യുന്നു, അതിനാൽ വിലാസം ഒരിക്കലും പാഴ്സ് ചെയ്യാത്ത കണക്ഷന് ഇന്റർഫേസ് നിർമ്മിക്കാനേ കഴിയില്ല.
നിങ്ങൾ വായിക്കുന്ന ലോഗ് വരി റൂട്ടിനെ പേരെടുത്ത് പറയാമെങ്കിലും കാരണം ഒരു ഘട്ടം മുൻപാണെന്നതിന് കാരണം ഇതാണ്. ഇന്റർഫേസ് ഉണ്ടായതിന് ശേഷം മാത്രമാണ് ക്ലയന്റ് റൂട്ട് ഘട്ടത്തിൽ എത്തുന്നത്; വിലാസമില്ലെങ്കിൽ റൂട്ട് കോൾ ഉടൻ പരാജയപ്പെടുന്നു അല്ലെങ്കിൽ ഒരിക്കലും പ്രവർത്തിക്കുന്നില്ല. ലോഗ് റൂട്ട് ചേർക്കാനാവില്ല എന്ന് പറയുമ്പോൾ, റൂട്ട് സിന്റാക്സിൽ നിന്നല്ല, വിലാസത്തിൽ നിന്ന് തുടങ്ങുക.
പരിശോധന 1: സർവർ മറുപടിയിൽ വിലാസം ഇടുന്നുണ്ടോ?
റൂട്ട് ചെയ്ത OpenVPN സേവനത്തിൽ വിലാസം സർവർ പൂളിൽ നിന്നോ ഓരോ ക്ലയന്റിനുള്ള അനുവദനത്തിൽ നിന്നോ വരുന്നു, അതിന്റെ രൂപം ടോപ്പോളജി തീരുമാനിക്കുന്നു. OpenVPN 2.4 അല്ലെങ്കിൽ പുതിയ സർവറിൽ, സബ്നെറ്റ് ടോപ്പോളജിയുള്ള സേവനം ഇങ്ങനെ കാണാം:
topology subnet
server 10.8.0.0 255.255.255.0
client-config-dir ccd
ആ രൂപത്തിൽ സർവർ ifconfig 10.8.0.6 255.255.255.0 പോലുള്ള ഒന്ന് അയക്കുന്നു. പഴയ topology net30 വിന്യാസം പകരം പിയർ വിലാസം അയക്കുന്നു, ഉദാഹരണത്തിന് ifconfig 10.8.0.6 10.8.0.5, അതിനാൽ രണ്ട് മാതൃകകൾക്കിടയിൽ മാറ്റിയ പ്രൊഫൈൽ ശരിയായി തോന്നാമെങ്കിലും തെറ്റായ നെറ്റ്മാസ്ക് വഹിക്കുന്നു.
ക്ലയന്റ് കണക്ഷൻ ലോഗിൽ അയച്ച ഓപ്ഷനുകളുടെ കൂട്ടം തിരയുക. അതിൽ ifconfig വരി ഒന്നുമില്ലെങ്കിൽ, സർവർ ഒരിക്കലും വിലാസം അയച്ചിട്ടില്ല അല്ലെങ്കിൽ ക്ലയന്റ് ഓപ്ഷൻ നിരസിച്ചു. client-config-dir ഉപയോഗിക്കുന്ന സർവറിൽ, സർട്ടിഫിക്കറ്റിന്റെ common name പേരിലുള്ള ഫയൽ ഉണ്ടായിരിക്കണം, അനുവദനം വഹിക്കണം:
# ccd/phone-anna
ifconfig-push 10.8.0.6 255.255.255.0
പരിശോധന 2: ലഭിച്ച വിലാസം ക്ലയന്റ് നിലനിർത്തുന്നുണ്ടോ?
വളരെ വീതിയുള്ള ഫിൽട്ടർ രണ്ടാമത്തെ സാധാരണ കാരണമാണ്. pull-filter OpenVPN 2.4-ലും പുതിയതിലും ഉണ്ട്, ഒരേ ഓപ്ഷനോട് പല ഫിൽട്ടറുകൾ ഒത്തുപോയാൽ അവസാനം ഒത്തത് ജയിക്കുന്നു, അതിനാൽ അവസാനം വിടുന്ന catch-all പിശകില്ലാതെ വിലാസം നീക്കിക്കളയുന്നു:
# removes every pushed option, including the address
pull-filter ignore "ifconfig"
pull-filter ignore "route"
നിങ്ങൾക്ക് ശരിക്കും ഒഴിവാക്കേണ്ട ഓപ്ഷനിലേക്ക് ഫിൽട്ടർ ചുരുക്കി വിലാസം വിടുക:
# keeps the pushed address, drops one unwanted LAN route
pull-filter ignore "route 10.60.0.0"
എല്ലാ pull-ഉം ഓഫ് ചെയ്യാനുള്ള ഉപദേശം സാധാരണയായി ഒരു റൂട്ട് മാത്രം ഒഴിവാക്കാൻ ആഗ്രഹിക്കുന്നയാളിൽ നിന്നാണ് വരുന്നത്. route-nopull കൂടുതൽ ഇടുങ്ങിയ സ്വിച്ചാണ്: ifconfig-ഉം മറ്റ് അയച്ച ഓപ്ഷനുകളും നിലനിർത്തി അയച്ച റൂട്ടുകളും DHCP ശൈലിയിലുള്ള ഓപ്ഷനുകളും നിരസിക്കുന്നു. അതു തന്നെയാണ് വേണ്ടതെങ്കിൽ മാത്രം ഉപയോഗിക്കുക, വിലാസത്തിന്റെ ചോദ്യം വേറെ കൈകാര്യം ചെയ്യുക.
പരിശോധന 3: വിലാസം നിങ്ങൾക്ക് ടൈപ്പ് ചെയ്യാവുന്നതാണോ?
കൈമാനുവൽ വിലാസനൽകൽ ഓപ്പറേറ്റർ നിങ്ങൾക്ക് മൂല്യം നൽകുമ്പോൾ മാത്രമാണ് ന്യായമായത്. നിങ്ങൾ തന്നെ ടൈപ്പ് ചെയ്യുന്നുവെങ്കിൽ അത് VPN ക്ലയന്റ് സബ്നെറ്റിൽ നിന്ന് വരണം, സജീവ സെഷനുകൾക്കിടയിൽ അദ്വിതീയമായിരിക്കണം, സർവർ പ്രവർത്തിപ്പിക്കുന്ന ടോപ്പോളജിയുമായി ഒത്തുപോകണം. ഡെസ്ക്ടോപ്പ് ബ്രിഡ്ജിന്റെയോ ദൂരെയുള്ള LAN-ലെ ഹോസ്റ്റിന്റെയോ വിലാസം പകർത്തുന്നത് രണ്ടിലും പരാജയപ്പെടുന്നു: ഫോൺ മറ്റെവിടെയോ ഉള്ള വിലാസം അവകാശപ്പെടും, ഗേറ്റ്വേയ്ക്ക് അതിലേക്ക് തിരിച്ചുവരവ് വഴിയുണ്ടാകില്ല.
റൂട്ടിലെ ദൂരെയുള്ള LAN പ്രിഫിക്സ് ലക്ഷ്യമാണ്, ഒരിക്കലും ഫോണിന്റെ ഐഡന്റിറ്റിയല്ല. 10.60.0.0/24-നുള്ള റൂട്ട് പറയുന്നത് ആ നെറ്റ്വർക്കിൽ ടണൽ വഴി എത്തുക എന്നാണ്; ഫോൺ ഏത് 10.60.0.x വിലാസം വഹിക്കണം എന്ന് അത് പറയുന്നില്ല, ഫോൺ അവയൊന്നും വഹിക്കരുത്. സ്ഥിര അനുവദനങ്ങൾ ഡൈനാമിക് പൂളുമായി കൂട്ടിയിടിക്കാനാവാത്ത സർവർ വശത്തിനാണ്.
ഒരു ഐഡന്റിറ്റിയിൽ രണ്ട് സെഷനുകൾ അതേ കൂട്ടിയിടി തുറന്നുകാട്ടുന്നു. ഒരേ സർട്ടിഫിക്കറ്റ് രണ്ടുതവണ ബന്ധിപ്പിക്കുകയും സർവർ രണ്ടിനും ഒരേ സ്ഥിര വിലാസം അയക്കുകയും ചെയ്താൽ, രണ്ടാം സെഷൻ ആദ്യത്തേത് തനിപ്പകർപ്പാക്കുന്നു, പരിഹാരം ക്ലയന്റ് ഭാഗത്തെ തിരുത്തലല്ല, പ്രത്യേക ഐഡന്റിറ്റികളോ പ്രത്യേക അനുവദനങ്ങളോ ആണ്.
പരിശോധന 4: മറ്റെന്തെങ്കിലും ടണൽ സ്ഥാനം പിടിച്ചിരിക്കുന്നുണ്ടോ?
Android ഒരു സമയത്ത് ഒരു സജീവ VPN സേവനം മാത്രമേ അനുവദിക്കൂ. മറ്റൊരു VPN ആപ്പോ, ഇനി പ്രവർത്തിക്കാത്ത പ്രൊഫൈലിനായി ഓണാക്കി വിട്ട എപ്പോഴും-ഓൺ VPN എൻട്രിയോ നിങ്ങളുടെ OpenVPN ക്ലയന്റ് establish() വിളിക്കുന്നതിന് മുൻപ് ആ സ്ഥാനം എടുക്കാം. അപ്പോൾ പ്രൊഫൈൽ സാധുവാണെങ്കിലും ഇന്റർഫേസ് കാണുന്നില്ല, അതിനാൽ മറ്റേ VPN വിച്ഛേദിച്ച്, എപ്പോഴും-ഓൺ ക്രമീകരണം ഓഫ് ചെയ്ത്, പ്രൊഫൈൽ തൊടുന്നതിന് മുൻപ് വീണ്ടും ബന്ധിപ്പിക്കുക.
എതർനെറ്റ് ബ്രിഡ്ജിംഗ് വാശിപിടിക്കുന്ന സേവനം മറ്റൊരു അറ്റവുമില്ലാത്ത വഴിയാണ്. root ഇല്ലാത്ത Android ആപ്പിന് IP ടണൽ സൃഷ്ടിക്കാം, ബ്രിഡ്ജ് ചെയ്ത എതർനെറ്റ് സെഗ്മെന്റല്ല, അതിനാൽ നിങ്ങൾ ടൈപ്പ് ചെയ്യുന്ന ഏത് വിലാസവും dev tap സർവറിനെ പ്രവർത്തിപ്പിക്കില്ല; ഓപ്പറേറ്റർ റൂട്ട് ചെയ്ത സേവനം വാഗ്ദാനം ചെയ്യണം. പ്രശ്നം റിപ്പോർട്ട് ചെയ്യുമ്പോൾ ക്ലയന്റിന്റെ പേരും പതിപ്പും, അയച്ച ഓപ്ഷൻ കൂട്ടവും, ടോപ്പോളജിയും, വിലാസം പ്രത്യക്ഷപ്പെടേണ്ടിയിരുന്ന കൃത്യമായ ഘട്ടവും ഉൾപ്പെടുത്തുക.
നാല് പരിശോധനകളും കടന്ന് വിലാസം നിലവിലുണ്ടെങ്കിൽ, അദ്വിതീയവും ശരിയായി മാസ്ക് ചെയ്തതുമാണെങ്കിൽ, റൂട്ട് ചോദ്യം സാധാരണ ചോദ്യമാകുന്നു: സർവർ ഏത് പ്രിഫിക്സുകൾ അനുവദിക്കുന്നു, ക്ലയന്റ് അവ എങ്ങനെ പരിധി നിർണ്ണയിക്കണം. മറ്റെന്തെങ്കിലും മാറ്റുന്നതിന് മുൻപ് ടണൽ വിലാസവും അതിന്റെ നെറ്റ്മാസ്കും ടോപ്പോളജിയും എഴുതിവെക്കുക, കാരണം സർവർ കാഴ്ചയുമായി താരതമ്യം ചെയ്യാൻ ഓപ്പറേറ്റർക്ക് വേണ്ടത് ഈ മൂന്ന് മൂല്യങ്ങളാണ്.