കഴിഞ്ഞ മാസം രണ്ട് പേർ എന്നോട് വിരുദ്ധ ഫലങ്ങൾ ആവശ്യപ്പെട്ടു: ഒരാൾ IPv6 VPN കൊണ്ട് മൂടണമെന്ന് ആഗ്രഹിച്ചു, മറ്റൊരാൾ ഓഫീസ് പ്രിന്റർ പ്രവർത്തിക്കണമെന്ന് ആഗ്രഹിച്ചു. ഒരു ::/0 റൂട്ടിന് രണ്ടും തനിയെ നൽകാൻ കഴിയില്ല. ആ റൂട്ട് ടണലിനുള്ളിൽ വരുമോ എന്നത് മൂന്ന് വ്യവസ്ഥകളെ ആശ്രയിച്ചിരിക്കുന്നു, ആദ്യത്തേത് മിക്ക വാണിജ്യ എക്സിറ്റുകൾക്കും അതിനെ ഒഴിവാക്കുന്നു. എക്സിറ്റ് IPv6 കൊണ്ടുപോകുന്നില്ലെങ്കിൽ, സ്ഥിരസ്ഥിതി റൂട്ട് അങ്ങോട്ട് അയക്കുന്നത് അയക്കാൻ ഇടമില്ലാത്ത ഒരു ടണലിൽ നിങ്ങളുടെ ട്രാഫിക് ഒളിപ്പിക്കുന്നു.

മൂന്ന് വ്യവസ്ഥകളാണ് ഉത്തരം തീരുമാനിക്കുന്നത്

സ്ഥിരസ്ഥിതി റൂട്ട് ഒരു വരിയാണ്, ::/0, കൂടുതൽ നിർദ്ദിഷ്ട റൂട്ട് ഇല്ലാത്ത ഏത് IPv6 ലക്ഷ്യവുമായും അത് യോജിക്കുന്നു (RFC 4291). അത് ഇൻസ്റ്റാൾ ചെയ്യാൻ എളുപ്പമാണ്. നിങ്ങൾ അത് ചെയ്യണോ എന്ന തീരുമാനം മൂന്ന് വ്യവസ്ഥകളിലേക്ക് വരുന്നു.

വ്യവസ്ഥ ഒന്ന്: നിങ്ങൾ ബന്ധിപ്പിക്കുന്ന എക്സിറ്റിൽ പ്രവർത്തിക്കുന്ന IPv6 ഉണ്ട്, അത് കൈമാറാൻ തയ്യാറാണ്. വ്യവസ്ഥ രണ്ട്: നിങ്ങളുടെ ക്ലയന്റിന് ടണലിന്റെ അന്തിമ പോയിന്റിലേക്കുള്ള പാത നിലനിർത്താൻ കഴിയും, അത് സാധാരണയായി നിങ്ങൾ റൂട്ട് ചെയ്യാൻ പോകുന്ന ശ്രേണിയുടെ ഉള്ളിലാണ്. വ്യവസ്ഥ മൂന്ന്: ടണലിന് പുറത്ത് നിൽക്കേണ്ട പ്രാദേശിക IPv6 ലക്ഷ്യങ്ങൾ നിങ്ങൾക്ക് പേരിടാൻ കഴിയും.

ഓരോ വ്യവസ്ഥയും അതിന്റേതായ രീതിയിൽ പരാജയപ്പെടുന്നു, അതുകൊണ്ടാണ് ഊഹിക്കൽ ഒരു മുഴുവൻ വൈകുന്നേരം ചെലവാക്കുന്നത്. പരാജയപ്പെട്ട ആദ്യ വ്യവസ്ഥ നിങ്ങൾക്ക് നിശബ്ദതയും ശരിയായി തോന്നുന്ന റൂട്ട് പട്ടികയും നൽകുന്നു. പരാജയപ്പെട്ട രണ്ടാം വ്യവസ്ഥ തുടങ്ങി കുറച്ച് സെക്കൻഡുകൾക്കുള്ളിൽ ഹാൻഡ്ഷേക്ക് കൊല്ലുന്നു. പരാജയപ്പെട്ട മൂന്നാം വ്യവസ്ഥ പ്രവർത്തിക്കുന്ന ടണലും പ്രിന്ററിനടുത്ത് ഒരു അസന്തുഷ്ട സഹപ്രവർത്തകനും അവശേഷിപ്പിക്കുന്നു.

What you seeDecision
Exit answers IPv6 probes, no local IPv6 devices to protectRoute ::/0 into the tunnel
Exit answers IPv6 probes, printer or NAS reachable by a global addressRoute ::/0, then give those prefixes a route of their own
Exit is IPv4-only inside the tunnelDo not route ::/0; block IPv6 on the client
Endpoint is reached over IPv6 and sits inside ::/0Install a host route for the endpoint first

എക്സിറ്റ് യഥാർത്ഥത്തിൽ IPv6 കൊണ്ടുപോകുന്നുണ്ടോ?

IPv6 വിലാസമുള്ള ടണൽ ഇന്റർഫേസ് മറുവശത്തെക്കുറിച്ച് ഒന്നും തെളിയിക്കുന്നില്ല. പല വാണിജ്യ പ്രൊഫൈലുകളും അകത്ത് IPv4 മാത്രമാണ്: സെർവർ നിങ്ങൾക്ക് v4 വിലാസം നൽകി ബാക്കിയെല്ലാം ഉപേക്ഷിക്കുന്നു. അതിന് മുകളിൽ AllowedIPs ൽ നിന്ന് സ്ഥിരസ്ഥിതി റൂട്ട് ഇട്ടാൽ, കർണൽ സന്തോഷത്തോടെ IPv6 അതിന്റെ പങ്കാളി ഒരിക്കലും കാണാത്ത ഇന്റർഫേസിലേക്ക് അയക്കും.

ടണൽ ഉയർന്നിരിക്കുമ്പോൾ ക്ലയന്റിൽ നിന്ന് പരിശോധിക്കുക. ping -6 -c 3 2001:4860:4860::8888 ഉം ip -6 route get 2001:4860:4860::8888 ഉം വ്യത്യസ്ത ചോദ്യങ്ങൾക്ക് ഉത്തരം നൽകുന്നു: മറുപടി തിരികെ വരുന്നുണ്ടോ, കർണൽ ഏത് ഉപകരണം തിരഞ്ഞെടുത്തു. രണ്ടാമത്തേത് നിങ്ങളുടെ ടണലിനെ പേരിടുകയും ആദ്യത്തേത് ഒന്നും തിരികെ നൽകാതിരിക്കുകയും ചെയ്യുമ്പോൾ, പ്രശ്നം റൂട്ടിലല്ല, എക്സിറ്റിലാണ്.

എക്സിറ്റ് നിങ്ങൾ തന്നെ പ്രവർത്തിപ്പിക്കുകയാണെങ്കിൽ, ക്ലയന്റ് പരിശോധന കടന്നുപോകാം, പാത എന്നിട്ടും അവസാനിക്കാം. ഗേറ്റ്‌വേയിൽ net.ipv6.conf.all.forwarding=1 ഉണ്ടെന്നും അതിന്റെ ഫയർവാൾ ടണലിൽ നിന്ന് കൈമാറുന്ന പാക്കറ്റുകൾ സ്വീകരിക്കുന്നുവെന്നും സ്ഥിരീകരിക്കുക. കൈമാറ്റം നിരസിക്കുന്ന എക്സിറ്റിലേക്ക് ശരിയായി റൂട്ട് ചെയ്ത പാക്കറ്റ് ക്ലയന്റിന്റെ ഭാഗത്തുനിന്ന് കൃത്യമായി ഒരു റൂട്ടിംഗ് ബഗ് പോലെ തോന്നുന്നു.

ക്ലയന്റിന് അന്തിമ പോയിന്റിലേക്കുള്ള പാത നിലനിർത്താമോ?

IPv6 മാത്രമുള്ള WireGuard അന്തിമ പോയിന്റുള്ള ലാപ്‌ടോപ്പിൽ എന്നെ പിടികൂടിയ കേസാണിത്. അന്തിമ പോയിന്റിന്റെ വിലാസം സാധാരണ ആഗോള വിലാസമാണ്, അതിനാൽ അത് ::/0 നുള്ളിൽ വരുന്നു. മുഴുവൻ പ്രിഫിക്സും ഇന്റർഫേസിലേക്ക് റൂട്ട് ചെയ്യുക, ഹാൻഡ്ഷേക്ക് പാക്കറ്റുകൾ അവ ഇപ്പോഴും നിർമ്മിക്കാൻ ശ്രമിക്കുന്ന ടണലിലേക്ക് സ്വയം പായിക്കും. ടണൽ ഒരിക്കലും ഉയരുന്നില്ല, ക്ലയന്റിന്റെ ഔട്ട്‌പുട്ടിൽ എന്തുകൊണ്ടെന്ന് ഒന്നും പറയുന്നില്ല.

wg-quick Linux ൽ ഇത് കൈകാര്യം ചെയ്യുന്നു. അത് AllowedIPs ൽ നിന്ന് റൂട്ടുകൾ ഉരുത്തിരിച്ചെടുക്കുന്നു, അവ സ്വന്തം പട്ടികയിൽ ഇൻസ്റ്റാൾ ചെയ്യുന്നു, അന്തിമ പോയിന്റിലേക്കുള്ള ട്രാഫിക് ആദ്യം പ്രധാന പട്ടികയിലൂടെ പരിഹരിക്കാൻ ഒരു നയ നിയമം ചേർക്കുന്നു: suppress_prefixlength 0 നിയമം, അത് ip -6 rule ൽ കാണാം. അതുകൊണ്ടാണ് wg-quick up, കൈകൊണ്ട് എഴുതിയ ip -6 route add default dev wg0 നിങ്ങളെ മുറിക്കുന്നിടത്ത് വിജയിക്കുന്നത്.

ടണൽ ഉയർത്തുന്നതിന് മുമ്പും ശേഷവും, രണ്ട് അവസ്ഥകളും ip -6 route get <endpoint-v6> ഉപയോഗിച്ച് പരിശോധിക്കുക. ഉത്തരം നിങ്ങളുടെ ടണൽ ഉപകരണത്തിലേക്ക് മാറിയാൽ, ടണലിന് ആവശ്യമായ പാത നിങ്ങൾ നീക്കം ചെയ്തു. റൂട്ടുകൾ നിങ്ങൾ തന്നെ എഴുതുമ്പോൾ, യഥാർത്ഥ ഗേറ്റ്‌വേയിലൂടെ അന്തിമ പോയിന്റിലേക്ക് ഒരു ഹോസ്റ്റ് റൂട്ട് ചേർക്കുക, അല്ലെങ്കിൽ IPv4 വഴി അന്തിമ പോയിന്റിലേക്ക് ബന്ധിപ്പിച്ച് IPv6 പേലോഡിന് വിടുക.

ടണലിന് പുറത്ത് എന്ത് നിൽക്കണം?

കൂടുതൽ നിർദ്ദിഷ്ട റൂട്ടുകൾ സ്ഥിരസ്ഥിതിയെ തോൽപ്പിക്കുന്നു, അതിനാൽ ലിങ്കിലുള്ള പ്രിഫിക്സോ സ്വന്തം റൂട്ടുള്ള ULA ശ്രേണിയോ അധിക പരിശ്രമമില്ലാതെ പ്രവർത്തിക്കുന്നു. ഇതാണ് ധാരാളം പൂർണ്ണ ടണൽ IPv4 ക്രമീകരണങ്ങൾ അതിജീവിക്കുന്നതിന്റെ ശാന്തമായ കാരണം: LAN പ്രിഫിക്സുകൾ സ്ഥിരസ്ഥിതിയെക്കാൾ നിർദ്ദിഷ്ടമാണ്, ഒരിക്കലും ടണലിൽ കയറുന്നില്ല.

പ്രാദേശിക ഉപകരണം ആഗോള വിലാസത്തിലൂടെ എത്താൻ കഴിയുമ്പോൾ ഇത് തകരുന്നു, അത് ഒരേ റൗട്ടർ പൊതു പ്രിഫിക്സ് നൽകിയ പ്രിന്റർ, NAS അല്ലെങ്കിൽ ടെലിവിഷന് സാധാരണമാണ്. ആ വിലാസങ്ങൾ ::/0 മായി മാത്രം യോജിക്കുന്നു, മറ്റൊന്നുമായി യോജിക്കുന്നില്ല, അതിനാൽ അവ ബാക്കിയെല്ലാത്തിനോടൊപ്പം ടണലിലേക്ക് മാറി അപ്രത്യക്ഷമാകുന്നു.

പ്രോട്ടോക്കോൾ അനുസരിച്ചല്ല, ലക്ഷ്യം അനുസരിച്ച് തീരുമാനിക്കുക. രണ്ടോ മൂന്നോ പ്രാദേശിക ഹോസ്റ്റുകൾ പ്രധാനമെങ്കിൽ, അവയുടെ പ്രിഫിക്സുകൾക്ക് ഭൗതിക ഇന്റർഫേസിലൂടെ പുറത്തേക്കുള്ള റൂട്ട് നൽകുക, അല്ലെങ്കിൽ ചർച്ച ചെയ്ത ഗണത്തിൽ നിന്ന് ഒഴിവാക്കുക. പട്ടിക വളർന്നുകൊണ്ടിരിക്കുകയാണെങ്കിൽ, സത്യസന്ധമായ ഉത്തരം രേഖാമൂലമുള്ള ഒഴിവുകൾ പട്ടികയോടെ IPv6 നുള്ള സ്പ്ലിറ്റ് ടണലിംഗ് ആണ്, നിങ്ങൾ തുടർച്ചയായി പാച്ച് ചെയ്യുന്ന സ്ഥിരസ്ഥിതിയല്ല.

ഉത്തരം ഇല്ലെങ്കിൽ, അത് തടയുക

IPv6 റൂട്ട് ഇല്ലാതെ വിടുന്നത് അതിനെ വെറുതെ വിടുന്നതിന് തുല്യമല്ല. പ്രവർത്തിക്കുന്ന IPv6 സ്ഥിരസ്ഥിതിയുള്ള ഹോസ്റ്റ് ടണൽ IPv4 കൊണ്ടുപോകുമ്പോഴും അത് ഉപയോഗിക്കുന്നു, അതിനാൽ ട്രാഫിക് VPN ന് അരികിലൂടെ പുറത്തുപോകുന്നു, IPv6 തിരഞ്ഞെടുക്കുന്ന ഓരോ സേവനവും നിങ്ങളുടെ യഥാർത്ഥ വിലാസം കാണുന്നു. അത് ഒരു ചോർച്ചയാണ്, സ്പ്ലിറ്റ് ടണൽ അല്ല.

ഒന്ന് തിരഞ്ഞെടുത്ത് ഏതാണ് തിരഞ്ഞെടുത്തതെന്ന് എഴുതുക. സ്ഥിരസ്ഥിതി റൂട്ട് ചെയ്ത് മുകളിലെ വിട്ടുവീഴ്ചകൾ സ്വീകരിക്കുക, അല്ലെങ്കിൽ ടണൽ നിലനിൽക്കുന്ന കാലത്തേക്ക് IPv6 പ്രവർത്തനരഹിതമാക്കുക. AllowedIPs ൽ നിന്ന് പ്രിഫിക്സ് ഒഴിവാക്കുന്നത് മാത്രം മതിയാകില്ല, കാരണം ഓപ്പറേറ്റിംഗ് സിസ്റ്റം അതിന്റേതായ സ്ഥിരസ്ഥിതി സൂക്ഷിക്കുന്നു. Linux ൽ പരുക്കൻ പതിപ്പ് sysctl -w net.ipv6.conf.all.disable_ipv6=1 ആണ്; സൂക്ഷ്മമായ പതിപ്പ് ഫയർവാൾ നിയമം കൊണ്ട് IPv6 ടണലിന് പുറത്ത് വീഴ്ത്തുന്നു. ഫോൺ ക്ലയന്റുകളിൽ അതേ ജോലി ചെയ്യുന്ന വ്യക്തമായ IPv6 തടയൽ ടോഗിൾ ഉണ്ട്.

ചോർച്ചയെപ്പോലെ പരിശോധിക്കുക

ടണൽ ഉയർത്തി ടോഗിളിൽ വിശ്വസിക്കുന്നതിന് പകരം അവസ്ഥ വായിക്കുക. ip -6 route show default ഒരു സ്ഥിരസ്ഥിതി കാണിക്കണം, നിങ്ങളുടെ LAN ന് പുറത്തുള്ള ലക്ഷ്യത്തിന് ip -6 route get ടണൽ ഉപകരണത്തിന്റെ പേര് പറയണം. വിച്ഛേദത്തിന് ശേഷം രണ്ടും ആവർത്തിക്കുക: ടണലിനെ അതിജീവിക്കുന്ന സ്ഥിരസ്ഥിതിയാണ് നിങ്ങൾ തിരയുന്ന ബഗ്.

പിന്നീട് എതിർ ദിശ പരിശോധിക്കുക. പ്രാദേശിക നെറ്റ്‌വർക്കിലെ ഒരു ഹോസ്റ്റിൽ നിന്ന്, ക്ലയന്റിനെ അതിന്റെ പ്രാദേശിക IPv6 വിലാസത്തിൽ എത്തുക. അത് പ്രവർത്തിക്കുന്നത് നിർത്തിയാൽ, അപ്പോൾ റൂട്ട് പട്ടിക എന്ത് പറഞ്ഞാലും, മൂന്നാം വ്യവസ്ഥ ഒരിക്കലും പാലിച്ചിട്ടില്ല.

ഫലം അടുത്ത വ്യക്തി കാണുന്നിടത്ത് എഴുതുക: ഏത് പ്രിഫിക്സുകൾ പ്രാദേശികമായി തുടരുന്നു, എന്തുകൊണ്ട്, വിച്ഛേദത്തിന് ശേഷം ക്ലയന്റ് എന്ത് ചെയ്യുന്നു. runbook ലെ രണ്ട് വരികൾ അടുത്ത എഞ്ചിനീയറെ അർദ്ധരാത്രിയിൽ അന്തിമ പോയിന്റ് ലൂപ്പ് വീണ്ടും കണ്ടെത്തുന്നതിൽ നിന്ന് രക്ഷിക്കുന്നു.

അനുബന്ധ ലേഖനങ്ങൾ