Android VPN IPv6-യിൽ പ്രവർത്തിക്കുന്നു, പക്ഷേ ബ്രൗസർ ഇപ്പോഴും IPv4 തിരഞ്ഞെടുക്കുന്നു
സ്വകാര്യ IPv6 വിലാസം അപ്രത്യക്ഷമാകുന്ന നാല് ഘട്ടങ്ങൾ പിന്തുടരുക: റിസോൾവർ, VpnService പ്രഖ്യാപനം, ബ്രൗസറിന്റെ സ്ഥാനാർത്ഥി പരിശോധന, റൂട്ട് ഡെലിവറി.
VPN ഓണാണ്, സ്വകാര്യ വെബ് UI ലാപ്ടോപ്പിൽ നിന്ന് IPv6 വഴി ഉത്തരം നൽകുന്നു, എന്നാൽ Android ഫോൺ അതേ പേജ് ഇപ്പോഴും IPv4 വഴി തുറക്കുന്നു അല്ലെങ്കിൽ ലോഡ് ചെയ്യാൻ വിസമ്മതിക്കുന്നു. AAAA റെക്കോർഡ് നിലവിലുണ്ട്. ടണൽ IPv6 വിലാസം റിപ്പോർട്ട് ചെയ്യുന്നു. ക്ലയന്റിൽ എന്തെങ്കിലും തെറ്റായി തോന്നുന്നില്ല. ഫലം നാല് വ്യത്യസ്ത തീരുമാനങ്ങൾ നിർണ്ണയിക്കുന്നു: ഏത് റിസോൾവർ ഉത്തരം നൽകി, VpnService Android-നോട് എന്ത് പ്രഖ്യാപിച്ചു, ഏത് വിലാസ കുടുംബം പരീക്ഷിക്കാൻ ബ്രൗസർ തയ്യാറായിരുന്നു, പാക്കറ്റിന് അങ്ങോട്ടും ഇങ്ങോട്ടും യാത്ര ചെയ്യാൻ കഴിയുമോ. ഡിഫോൾട്ട് റൂട്ട് ചേർത്ത് ലക്ഷണം മാറുമെന്ന് പ്രതീക്ഷിക്കുന്നതിന് പകരം ഈ ക്രമത്തിൽ അവ കൈകാര്യം ചെയ്യുക.
ഘട്ടം 1: AAAA ചോദ്യത്തിന് ഏത് റിസോൾവർ ഉത്തരം നൽകി എന്ന് തെളിയിക്കുക
Android-ന് ഒരൊറ്റ DNS പാതയില്ല. VPN-ന് അതിന്റെ നെറ്റ്വർക്കിനായി DNS സെർവർ തള്ളാൻ കഴിയും, സിസ്റ്റം യോഗ്യമെന്ന് കരുതുന്ന ഹോസ്റ്റ്നെയിമുകൾക്ക് Private DNS ഉപയോഗിക്കാം, Chrome chrome://settings/security-ൽ നിന്ന് സ്വന്തം എൻക്രിപ്റ്റ് ചെയ്ത റിസോൾവർ പ്രവർത്തിപ്പിക്കാം. ടണൽ 10.61.0.1 തള്ളുന്നുവെങ്കിലും Private DNS ഒരു പൊതു ദാതാവിനെ ചൂണ്ടുന്ന ഫോണിൽ, നിങ്ങളുടെ സ്വകാര്യ സോണിലുള്ള പേര് സോൺ ഉടമസ്ഥതയിലുള്ള യന്ത്രം പരിഹരിക്കുന്നില്ല. ആ പേരിന് അധികാരമില്ലാത്ത റിസോൾവറിൽ നിന്ന് ബ്രൗസറിന് ഉത്തരം ലഭിക്കുന്നു, അത് ഇല്ലാത്തതായി കണക്കാക്കുന്നു, പിശക് എഴുത്തിൽ DNS ഒരിക്കലും പരാമർശിക്കുന്നില്ല.
മറ്റെന്തെങ്കിലും മാറ്റുന്നതിന് മുമ്പ് ടണലിന്റെ റിസോൾവറിനോട് നേരിട്ട് ചോദിക്കുക. ആദ്യ രണ്ട് കമാൻഡുകൾ Android സജീവ നെറ്റ്വർക്കിലേക്ക് ഏത് DNS സെർവറുകൾ ചേർത്തു, Private DNS ഓട്ടോമാറ്റിക് ആണോ കർശനമാണോ എന്ന് കാണിക്കുന്നു; മൂന്നാമത്തേത് ഫോണിൽ നിന്നല്ല, ടണലിനുള്ളിലെ ഏതെങ്കിലും ക്ലയന്റിൽ നിന്ന് പ്രവർത്തിക്കുന്നു.
adb shell dumpsys connectivity | grep -A3 "DnsAddresses"
adb shell settings get global private_dns_mode
nslookup -type=AAAA nas.lan 10.61.0.1
ഘട്ടം 2: VpnService യഥാർത്ഥത്തിൽ എന്ത് പ്രഖ്യാപിച്ചു എന്ന് വായിക്കുക
Android വശം അനുമാനമല്ല, വ്യക്തമാണ്. VpnService.Builder addAddress ഉപയോഗിച്ച് വിലാസങ്ങളും, addRoute ഉപയോഗിച്ച് റൂട്ടുകളും, addDnsServer ഉപയോഗിച്ച് DNS സെർവറുകളും ചേർക്കുന്നു, allowFamily ഉപയോഗിച്ച് മുഴുവൻ ടണലും ഒരു വിലാസ കുടുംബത്തിലേക്ക് പരിമിതപ്പെടുത്താം. allowFamily(AF_INET) വിളിച്ചതിന് ശേഷം IPv6 റൂട്ട് ചേർത്ത ബിൽഡർ സിസ്റ്റത്തോട് പരസ്പരവിരുദ്ധമായ രണ്ട് കാര്യങ്ങൾ പറഞ്ഞു, സിസ്റ്റം നിലനിർത്തുന്നത് കുടുംബ നിയന്ത്രണമാണ്. fd00:61::/64 ഉൾക്കൊള്ളുന്ന റൂട്ട് മറ്റൊരു പ്രിഫിക്സിലെ ഇന്റർഫേസ് വിലാസവുമായി ചേരുമ്പോൾ സമാന കാരണത്താൽ പരാജയപ്പെടുന്നു: വിലാസം നിലവിലുണ്ട്, പക്ഷേ ആ റൂട്ടിന് അത് on-link അല്ല.
ആപ്പിലെ ടോഗിൾ വിശ്വസിക്കുന്നതിന് പകരം പ്രഖ്യാപനം വായിക്കുക. dumpsys netd tun ഇന്റർഫേസുമായി ബന്ധിപ്പിച്ച വിലാസങ്ങളും റൂട്ടുകളും പ്രിന്റ് ചെയ്യുന്നു, dumpsys connectivity-നുള്ളിൽ നെറ്റ്വർക്ക് അനുസരിച്ചുള്ള LinkProperties നെറ്റ്വർക്ക് അവകാശപ്പെടുന്ന കുടുംബങ്ങൾക്കൊപ്പം DNS ലിസ്റ്റ് കാണിക്കുന്നു.
adb shell ip -6 addr show tun0
adb shell ip -6 route show table all | grep tun0
adb shell dumpsys connectivity | grep -E "LinkAddresses|Routes"
tun ഇന്റർഫേസിൽ IPv6 വിലാസം ഉണ്ടെങ്കിലും സേവനത്തിന്റെ പ്രിഫിക്സുമായി ഒരു റൂട്ടും പൊരുത്തപ്പെടുന്നില്ലെങ്കിൽ, ബ്രൗസർ ഇടപെടുന്നതിന് മുമ്പ് തന്നെ IPv6 ഡെലിവറി തകർന്നിരിക്കുന്നു. ഇത് പരീക്ഷിക്കാൻ വിസമ്മതിക്കുന്ന ബ്രൗസറിൽ നിന്ന് വ്യത്യസ്തമായ ബഗ് ആണ്, വ്യത്യസ്തമായ പരിഹാരം ആവശ്യമാണ്.
ഘട്ടം 3: IPv6 പരീക്ഷിക്കണോ എന്ന് ബ്രൗസർ തീരുമാനിക്കുന്നു
Chromium-ന് ലഭിക്കുന്ന ഓരോ AAAA റെക്കോർഡും അത് ഉപയോഗിക്കുന്നില്ല. അതിന്റെ ഹോസ്റ്റ് റിസോൾവറിൽ IPv6 ലഭ്യതാ പരിശോധനകളും സ്ഥാനാർത്ഥി ഫിൽട്ടറിംഗും ഉണ്ട്, നെറ്റ്വർക്ക് അത് വഹിക്കാൻ അശക്തമെന്ന് വിലയിരുത്തുമ്പോൾ അവ IPv6 ഒഴിവാക്കുകയോ മുൻഗണന കുറയ്ക്കുകയോ ചെയ്തേക്കാം, റിസോൾവർ സോഴ്സ് ആ പരിശോധന അതിന് ചുറ്റുമുള്ള വ്യവസ്ഥകളോടൊപ്പം കാണിക്കുന്നു. യുക്തി പതിപ്പിനെയും ഫ്ലാഗുകളെയും ആശ്രയിച്ചിരിക്കുന്നു, അതുകൊണ്ടുതന്നെ ഒരേ ടണലിലെ രണ്ട് ഫോണുകൾ വ്യത്യസ്തമായി പെരുമാറാം. സ്ഥാനാർത്ഥികൾ ഉണ്ടായിക്കഴിഞ്ഞാൽ Happy Eyeballs ഓരോ കണക്ഷനും കുടുംബങ്ങളെ മത്സരിപ്പിക്കുന്നു, അതിനാൽ പതിയെ ഉത്തരം നൽകുന്ന IPv6 പാത വേഗം ഉത്തരം നൽകുന്ന IPv4-നോട് തോൽക്കാം.
തീരുമാനം അനുമാനിക്കുന്നതിന് പകരം നിരീക്ഷിക്കുക. chrome://net-export വഴി റെക്കോർഡ് ചെയ്ത് netlog വ്യൂവറിൽ വീണ്ടും പ്ലേ ചെയ്ത സെഷൻ ഓരോ പരിഹാരവും തിരഞ്ഞെടുത്ത കുടുംബവും കാണിക്കുന്നു; chrome://net-internals/#dns കാഷെ ചെയ്ത ഫലങ്ങൾ കാണിക്കുന്നു. നിങ്ങളുടെ സ്വന്തം റിസോൾവറിൽ AAAA ഉള്ള പേരിന് A റെക്കോർഡുകൾ മാത്രം നൽകുന്ന പരിഹാരം നേരിട്ട് ഈ ഘട്ടത്തെ ചൂണ്ടിക്കാണിക്കുന്നു.
ഘട്ടം 4: പാക്കറ്റിന് അങ്ങോട്ടും ഇങ്ങോട്ടും യാത്ര ചെയ്യാൻ കഴിയുമെന്ന് പരിശോധിക്കുക
വിലാസ തിരഞ്ഞെടുപ്പ് ഡെലിവറി അല്ല. Android നെറ്റ്വർക്ക് അനുസരിച്ചുള്ള റൂട്ടിംഗ് പട്ടികകളും fwmark ഉപയോഗിച്ച് പട്ടിക തിരഞ്ഞെടുക്കുന്ന നയ നിയമങ്ങളും സൂക്ഷിക്കുന്നു, അതിനാൽ പ്രധാന പട്ടികയിൽ കാണുന്ന റൂട്ട് സോക്കറ്റ് ഉപയോഗിക്കുന്ന റൂട്ട് തന്നെയായിരിക്കണമെന്നില്ല. നിയമങ്ങൾ വായിക്കുന്നതും ഉറവിട വിലാസത്തിന് ലക്ഷ്യം പരിഹരിക്കാൻ കേർണലിനോട് ആവശ്യപ്പെടുന്നതും ഇവ രണ്ടിനെയും വേർതിരിക്കുന്നു.
adb shell ip -6 rule show
adb shell ip -6 route get fd00:61::20 from fd00:61::10
ചോദ്യത്തിന് ഉത്തരം നൽകുന്നത് route get-ന്റെ ഔട്ട്പുട്ടാണ്. അത് tun0 എന്ന് പറയുന്നുവെങ്കിലും പാക്കറ്റുകൾ മരിക്കുന്നുവെങ്കിൽ, ഫോണിലേക്ക് തിരികെ പോകുന്നതിന് പകരം ടണലിന്റെ MTU-യിലേക്കും ഗേറ്റ്വേയുടെ IPv6 ഫോർവേഡിംഗിലേക്കും പോകുക.
::/0 ചേർക്കുന്നത് എന്തുകൊണ്ട് സാധാരണയായി കൂടുതൽ വഷളാക്കുന്നു
::/0 ചേർക്കുന്നത് ടണലിന്റെ അവകാശവാദം ഒരു പ്രിഫിക്സിൽ നിന്ന് ഓരോ IPv6 ലക്ഷ്യത്തിലേക്കും മാറ്റുന്നു. ഫോണിൽ അത് ലഭ്യതാ പരിശോധന തൃപ്തിപ്പെടുത്തിയേക്കാം, കാരണം നിങ്ങളുടെ പ്രിഫിക്സിന് പുറത്തുള്ള ഒരു പരീക്ഷണ വിലാസം ഇപ്പോൾ റൂട്ട് ചെയ്യാവുന്നതായി തോന്നുന്നു. എന്നാൽ അത് ഗേറ്റ്വേയിൽ IPv6 അപ്സ്ട്രീം ശേഷി സൃഷ്ടിക്കുന്നില്ല, പല വീട്ടിലെ ഗേറ്റ്വേകൾക്കും പ്രവർത്തിക്കുന്ന IPv6 അപ്ലിങ്ക് തന്നെയില്ല. ഫലം പൊതു IPv6-ന് ഒരു തമോദ്വാരമാണ്: മുമ്പ് IPv4-ലേക്ക് വീണിരുന്ന പേരുകൾ ഇപ്പോൾ തൂങ്ങിക്കിടക്കുന്നു, സ്വകാര്യ പേജ് മികച്ചതായി തോന്നാം കാരണം പരിശോധന മറ്റെന്തോ അളക്കുന്നു എന്ന് മാത്രം.
നയ ചെലവുമുണ്ട്. ടണലിൽ ::/0 ഉണ്ടെങ്കിൽ എല്ലാ IPv6 ട്രാഫിക്കും VPN വഴി പുറത്തുപോകുന്നു, നെറ്റ്വർക്ക് ഉടമ വഹിക്കാൻ ഒരിക്കലും സമ്മതിക്കാത്ത ട്രാഫിക്കും ഉൾപ്പെടെ. ഇത് പേരുള്ള ഉടമയുള്ള വിന്യാസ തീരുമാനമായി കാണുക, രാത്രി 1 മണിക്ക് എടുക്കുന്ന ഡീബഗ്ഗിംഗ് ഘട്ടമായി അല്ല.
ഇത് അവസാനിപ്പിക്കുന്ന ജോലിക്രമം
AAAA ഉത്തരം സോൺ കൈവശമുള്ള റിസോൾവറിൽ നിന്നാണ് വരുന്നതെന്ന് സ്ഥിരീകരിക്കുക, tun ഇന്റർഫേസിനുള്ള VpnService, netd അവസ്ഥ വായിക്കുക, Chromium സ്ഥാനാർത്ഥിയെ ഒഴിവാക്കിയോ എന്ന് കാണാൻ net-export ട്രെയ്സ് എടുക്കുക, പിന്നീട് ip -6 route get ഉപയോഗിച്ച് അങ്ങോട്ടും ഇങ്ങോട്ടുമുള്ള യാത്ര പരീക്ഷിക്കുക. യഥാർത്ഥത്തിൽ പരാജയപ്പെട്ട പാളി ശരിയാക്കുക, സ്പ്ലിറ്റ് നയം വെറുതെ വിടുക. സ്വകാര്യ പേരുകൾക്ക് പൊതു പേരുകളിൽ നിന്ന് വ്യത്യസ്ത ഉത്തരങ്ങൾ വേണമെങ്കിൽ split tunneling അതിനാണ്.
ഫോണിന്റെ build, ബ്രൗസർ പതിപ്പ്, നിങ്ങൾ ചോദിച്ച റിസോൾവർ എന്നിവ കുറിച്ചുവയ്ക്കുക. ആ മൂന്ന് വസ്തുതകൾ "IPv6 is broken" എന്നതിനെ അടുത്ത വ്യക്തിക്ക് പുനരാവിഷ്ക്കരിക്കാവുന്ന ഒന്നാക്കി മാറ്റുന്നു.