ഒരു യന്ത്രത്തിന് മൂന്ന് ആവശ്യങ്ങളും ഒരുമിച്ച് നിറവേറ്റാം: ടണലുകൾ അവസാനിപ്പിക്കുക, HTTPS-ന് ഉത്തരം നൽകുക, രണ്ട് സ്വകാര്യ LAN-നിടയിൽ ഫോർവേഡ് ചെയ്യുക. അത് യുക്തിസഹമാണോ എന്നത് കടലാസിൽ തീരുമാനിക്കാവുന്ന മൂന്ന് കാര്യങ്ങളെ ആശ്രയിച്ചിരിക്കുന്നു: പൊതു വിലാസം ആരുടേതാണ്, ഓരോ പോർട്ട്, പ്രോട്ടോക്കോൾ ജോഡി ആരുടേതാണ്, ഏത് പ്രോസസ്സിനാണ് പാക്കറ്റുകൾ ഫോർവേഡ് ചെയ്യാൻ അനുവാദമുള്ളത്. ഇവ ശരിയാണെങ്കിൽ പങ്കിട്ട ഹോസ്റ്റ് പ്രത്യേകതയില്ലാത്തതാണ്. തെറ്റാണെങ്കിൽ വൃത്തിയായി ആരംഭിച്ച് ഒരിക്കലും ഉത്തരം നൽകാത്ത ഒരു സേവനത്തിൽ വാരാന്ത്യം ചെലവാക്കും.

തുടർന്നുള്ളത് ഒരു തീരുമാന നടപടിക്രമമാണ്, നിർമ്മാണ ഷീറ്റല്ല. ഓരോ ഘട്ടവും ഇപ്പോൾ ചേർത്ത റോൾ യഥാർത്ഥത്തിൽ വേർതിരിക്കപ്പെട്ടതാണെന്ന് തെളിയിക്കുന്ന പരിശോധനയോടെ അവസാനിക്കുന്നു.

പോർട്ടുകൾക്ക് മുമ്പ് വിലാസത്തിന്റെ ഉടമയെ തിരഞ്ഞെടുക്കുക

ടണലിന്റെ അന്ത്യബിന്ദുവും വെബ് സർവറും ഒരേ കേർണൽ പങ്കിടാം; ഒരേ സമയം ഒരു വിലാസവും പോർട്ടും പ്രോട്ടോക്കോളും പങ്കിടുന്നതാണ് പരാജയപ്പെടുന്നത്. WireGuard സാധാരണയായി UDP 51820 ഉപയോഗിക്കുന്നു, OpenVPN UDP 1194 അല്ലെങ്കിൽ TCP 443 ഉപയോഗിക്കുന്നു, വെബ് സർവർ TCP 443 ഉപയോഗിക്കുന്നു. വേദനിപ്പിക്കുന്ന ജോഡി HTTPS-ന്റെ അടുത്ത് TCP 443-ൽ OpenVPN ആണ്, കാരണം രണ്ടും ഒരേ സോക്കറ്റ് ആഗ്രഹിക്കുന്നു, കേർണൽ അത് ആദ്യം ബൈൻഡ് ചെയ്തവന് നൽകുന്നു. മുന്നിലുള്ള ഡീമൾട്ടിപ്ലക്സർ മാത്രം, ഉദാഹരണത്തിന് sslh അല്ലെങ്കിൽ TLS മനസ്സിലാക്കുന്ന പ്രോക്സി, അവരെ ആ പോർട്ട് പങ്കിടാൻ അനുവദിക്കുന്നു, അത് ഫയർവാൾ പ്രശ്നത്തിന് സമാനമായി കാണപ്പെടുന്ന ഒരു ഘടകം ചേർക്കുന്നു.

എന്തെങ്കിലും മാറ്റുന്നതിന് മുമ്പ് ഉടമകളെ നോക്കുക: ss -lntup കേൾക്കുന്ന ഓരോ സോക്കറ്റിന്റെയും പ്രാദേശിക വിലാസം, പോർട്ട്, പ്രോസസ്സ് എന്നിവ പ്രിന്റ് ചെയ്യുന്നു. കാണിക്കുന്ന രണ്ട് വരികൾ 0.0.0.0:443 എന്നാൽ രണ്ടാമത്തെ സേവനം ഒരിക്കലും ബൈൻഡ് ചെയ്തിട്ടില്ല എന്നാണ് അർത്ഥം, അതിന്റെ init സ്ക്രിപ്റ്റ് എത്ര സന്തോഷകരമായിരുന്നാലും. ബ്രിഡ്ജിംഗും ഉടമയെ നീക്കുന്നു. എപ്പോൾ eth0 എന്നതിലേക്ക് ചേരുന്നു br0, IP br0 ലേക്ക് പോകുന്നു, eth0 എന്ന് പേരിടുന്ന ഓരോ ഫയർവാൾ നിയമവും പൊരുത്തപ്പെടുന്നത് നിർത്തുന്നു, അതിനാൽ സേവനങ്ങൾ ബ്രിഡ്ജിൽ ബൈൻഡ് ചെയ്ത് ip -br addr ഉപയോഗിച്ച് സ്ഥിരീകരിക്കുക.

അതേ ഉടമസ്ഥതാ നിയമം വെർച്വൽ മെഷീനുകളിൽ വരുന്ന ഒരു അത്ഭുതം വിശദീകരിക്കുന്നു. അതേ LAN-ലെ ഗസ്റ്റിനുള്ളിൽ പ്രവർത്തിക്കുന്ന ടണൽ സർവർ ഗസ്റ്റിന്റെ വിലാസം നിലനിർത്തുന്നു, അതിനാൽ ഹോസ്റ്റിന്റെ സ്വന്തം വിലാസത്തിലേക്കുള്ള കണക്ഷനുകൾ ഹോസ്റ്റിൽ തന്നെ നിൽക്കുന്നു, ഗസ്റ്റിന്റെ ടണൽ അവ ഒരിക്കലും കാണുന്നില്ല, ക്ലയന്റ് പ്രൊഫൈൽ എന്ത് പറഞ്ഞാലും.

രണ്ട് LAN-നിടയിൽ റൂട്ട് ചെയ്യുക അല്ലെങ്കിൽ ഒരു വശം NAT ചെയ്യുക

ഒന്നൊന്നും കാണാത്ത രണ്ട് LAN-ന് ഓരോന്നിനും പൊതു ഹോസ്റ്റിനെ വിളിക്കാം, അത് പിന്നീട് ടണലുകൾക്കിടയിൽ ഫോർവേഡ് ചെയ്യുന്നു. ആ റൂട്ടഡ് ഡിസൈനിന് മൂന്ന് കാര്യങ്ങൾ വേണം: ഫോർവേഡിംഗ് ഓൺ, ഓരോ ദൂരെയുള്ള പ്രിഫിക്സിലേക്കും ഒരു റൂട്ട്, ട്രാൻസിറ്റ് കടത്തിവിടുന്ന ഫോർവേഡിംഗ് നയം. sysctl -w net.ipv4.ip_forward=1 ആദ്യത്തേത് ഉൾക്കൊള്ളുന്നു, ip route add 10.20.0.0/24 dev wg1 രണ്ടാമത്തേത്, nftables വരി nft add rule inet filter forward iifname "wg0" oifname "wg1" accept മൂന്നാമത്തേത്.

സ്രോതസ്സ് NAT ചേർക്കാൻ എളുപ്പവും ഡീബഗ് ചെയ്യാൻ ബുദ്ധിമുട്ടുമാണ്. മാസ്ക്വെറേഡിംഗ് ക്ലയന്റിന്റെ വിലാസം വീണ്ടും എഴുതുന്നു, അതിനാൽ ദൂരെയുള്ള വശം യഥാർത്ഥ ഹോസ്റ്റിനെയല്ല, ഹബ്ബിനെ കാണുന്നു, അതിന്റെ ആക്സസ് നിയമങ്ങളും ലോഗുകളും ആട്രിബ്യൂഷന് ഉപയോഗശൂന്യമാകുന്നു. രണ്ട് നെറ്റ്വർക്കുകളും നിങ്ങളുടേതാണെങ്കിൽ റൂട്ട് ചെയ്യുക. ഒരു വശം തിരിച്ചുള്ള റൂട്ട് ചേർക്കാത്ത മൂന്നാം കക്ഷിയുടേതാണെങ്കിൽ, NAT ആണ് ഈ ആഴ്ച പുറത്തിറങ്ങുന്ന ഓപ്ഷൻ. ഏതായാലും വിലാസ പ്ലാൻ എഴുതിവയ്ക്കുക, കാരണം രണ്ട് ഓവർലാപ്പിംഗ് /24 ഏത് കോൺഫിഗറേഷനും റൂട്ട് ചെയ്യാനാവില്ല.

ലാപ്ടോപ്പിനുള്ള ഇന്റർനെറ്റ് എക്സിറ്റായി പ്രവർത്തിക്കുന്നതിൽ ഒന്നും അതേ ബോക്സ് വരുന്ന ടണലുകൾ അവസാനിപ്പിക്കുന്നതിൽ നിന്ന് തടയുന്നില്ല. ഓവർലാപ്പിംഗ് വിലാസങ്ങൾ മാത്രമാണ് തടയുന്നത്, അതുകൊണ്ടാണ് വിലാസ പ്ലാൻ പ്രധാനപ്പെട്ട രേഖ.

രണ്ട് റോളുകൾ നിർത്തിയിരിക്കുമ്പോൾ വിഭജനം പരീക്ഷിക്കുക

ഉപയോഗപ്രദമായ പരീക്ഷ കുറയ്ക്കലാണ്: രണ്ട് റോളുകൾ നിർത്തി മൂന്നാമത്തേത് ഇപ്പോഴും ഉത്തരം നൽകുന്നുവെന്ന് സ്ഥിരീകരിക്കുക. ടണൽ സേവനം ഓഫായിരിക്കുമ്പോൾ വെബ് അഭ്യർത്ഥന പൂർത്തിയാകണം, വെബ് സർവർ നിർത്തിയിരിക്കുമ്പോൾ ടണൽ ഹാൻഡ്ഷേക്ക് പൂർത്തിയാകണം. എല്ലാം പ്രവർത്തിക്കുമ്പോൾ മാത്രം രണ്ടും പ്രവർത്തിക്കുന്നെങ്കിൽ, പങ്കിട്ട ഫയർവാൾ പട്ടിക, വഴിതെറ്റിയ റൂട്ട്, തെറ്റായ വിലാസത്തിലേക്ക് ചൂണ്ടുന്ന പേര് പോലെ ഒരു യാദൃച്ഛിക ആശ്രിതത്വം ഉണ്ട്.

മൂന്ന് കമാൻഡുകൾ ആ പരീക്ഷയെ മൂർത്തമാക്കുന്നു. curl -sk --resolve example.test:443:203.0.113.10 https://example.test/ ബാഹ്യ DNS ഇല്ലാതെ പ്രാദേശിക ലിസണർ ഉത്തരം നൽകുന്നുവെന്ന് തെളിയിക്കുന്നു, wg show ക്ലയന്റിൽ ഹാൻഡ്ഷേക്ക് പൂർത്തിയായെന്ന് തെളിയിക്കുന്നു, tcpdump -ni any port 51820 ഹബ്ബിൽ റൂട്ടിംഗ് പ്രശ്നത്തെ കീ പ്രശ്നത്തിൽ നിന്ന് വേർതിരിക്കുന്നു. ക്യാപ്ചറിൽ ഒരിക്കലും പ്രത്യക്ഷപ്പെടാത്ത ഹാൻഡ്ഷേക്ക് ഹോസ്റ്റിന് മുമ്പ് മരിച്ചു: ദാതാവിന്റെ ഫയർവാൾ, തെറ്റായ പൊതു വിലാസം അല്ലെങ്കിൽ വഴിയിലെ NAT നിയമം.

ഫോർവേഡ് ചെയ്യുന്ന LAN-നും കുറയ്ക്കൽ ആവർത്തിക്കുക. ഒരു പിയർ വിച്ഛേദിക്കുമ്പോൾ ഹബ്ബിലൂടെയുള്ള പിംഗ് പരാജയപ്പെടണം; വീണ്ടും ബന്ധിപ്പിക്കുമ്പോൾ ഒരു നിയമവും തൊടാതെ പിംഗ് തിരികെ വരണം. ടണൽ പുനരാരംഭിച്ചതിന് ശേഷം മാത്രം തിരികെ വരുന്ന പിംഗ് ലഭ്യതയല്ല, നയത്തിലേക്കാണ് ചൂണ്ടുന്നത്, അത് മറ്റൊരു പരിഹാരമാണ്.

റോളുകൾ കുറയ്ക്കുമ്പോൾ നിയമ കൂട്ടം വായനാക്ഷമമായി സൂക്ഷിക്കുക. nft list ruleset യഥാർത്ഥത്തിൽ ആവശ്യമുള്ള ഓരോ ദിശയ്ക്കും ഒരു സ്വീകരണ നിയമം കാണിക്കണം, എല്ലാം സ്വീകരിക്കുന്ന ഫോർവേഡിംഗ് ശൃംഖല വിഭജനമല്ല, അത് പ്രവർത്തിക്കുന്ന ഡെമോയാണ്.

IPv6 മാത്രം പ്രവേശന ലൈനുകളും IPv4 സേവനങ്ങളും

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

ഓരോ കുടുംബവും വെവ്വേറെ പരീക്ഷിക്കുക curl -4 ഉം curl -6 ഉം ഉപയോഗിച്ച്, കാരണം ഒരു വിജയകരമായ അഭ്യർത്ഥന നിങ്ങൾ പരീക്ഷിക്കാത്ത പാതയെക്കുറിച്ച് ഒന്നും പറയുന്നില്ല. പോർട്ട് ഉടമസ്ഥത കുടുംബങ്ങൾക്കിടയിൽ മാറുന്നില്ല, പക്ഷേ ലിസണർ മാറുന്നു: ss -lntup IPv4, IPv6 സോക്കറ്റുകൾ വെവ്വേറെ വരികളായി ലിസ്റ്റ് ചെയ്യുന്നു, 0.0.0.0:443 ഉൾക്കൊള്ളുന്നില്ല [::]:443 എന്നതിനെ, പ്രോസസ്സ് dual-stack സോക്കറ്റ് ആവശ്യപ്പെട്ടില്ലെങ്കിൽ.

ഒരു കുടുംബത്തിൽ ഉത്തരം നൽകി മറ്റേതിൽ നിരസിക്കുന്ന സേവനം സാധാരണയായി ലിസണർ പ്രശ്നമാണ്, റൂട്ടിംഗ് അല്ല. ഡിസൈൻ പൂർത്തിയായി പ്രഖ്യാപിക്കുന്നതിന് മുമ്പ് ഓരോ റോളിനും സ്വന്തം വിലാസമോ പോർട്ടോ ഉണ്ടെന്ന്, ഫോർവേഡിംഗ് ഓണും അനുവദനീയവുമാണെന്ന്, ബാക്കിയുള്ള രണ്ടും നിർത്തിയിരിക്കുമ്പോഴും ഓരോ റോളും ഉത്തരം നൽകുന്നുവെന്ന് സ്ഥിരീകരിക്കുക.

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