stunnel-ന് പിന്നിലെ OpenVPN: പോർട്ട് 1194 അല്ല, റാപ്പർ ഫോർവേഡ് ചെയ്യുക
രണ്ട് ലിസണർ, മൂന്ന് പോർട്ട്. ഫോർവേഡ് എവിടെ എത്തുന്നു, റാപ്പർ എവിടെ ബന്ധിക്കുന്നു, എവിടെ ബന്ധിപ്പിക്കുന്നു, പ്രാദേശിക പരിശോധന എന്ത് ഒഴിവാക്കി, രണ്ട് ഐഡന്റിറ്റികളും പരിശോധിക്കുക.
TLS റാപ്പർ OpenVPN മുന്നിൽ വയ്ക്കുമ്പോൾ വിന്യാസത്തിന് രണ്ടാമതൊരു ലിസണർ ലഭിക്കുന്നു; അവയിൽ ഒന്ന് മാത്രമേ ഒരിക്കലും ഇന്റർനെറ്റിന് അഭിമുഖമാകാവൂ. ടണൽ ഒരേ യന്ത്രത്തിൽ നിന്ന് പ്രവർത്തിച്ച് പുറത്തുനിന്ന് പരാജയപ്പെടുമ്പോൾ, ഫോർവേഡ് സാധാരണയായി രണ്ടിൽ തെറ്റായ എവിടേക്കാണ് നീങ്ങുന്നത്. ഒത്തുചേരേണ്ടത് ഒരു ശൃംഖലയാണ്: പൊതു നിയമം റാപ്പറിൽ എത്തുന്നു, റാപ്പറിന്റെ സ്വന്തം ബാക്കെൻഡ് കണക്ഷൻ യഥാർത്ഥ VPN സോക്കറ്റിൽ എത്തുന്നു. നാല് കുതിപ്പുകൾ ഈ ശൃംഖല വഹിക്കുന്നു, അവയിലേതെങ്കിലും അന്വേഷണം നേരത്തേ അവസാനിപ്പിക്കാം.
രണ്ട് സോക്കറ്റ്, രണ്ട് ഉടമ, ഒന്ന് പൊതു
റാപ്പർ പുറം കണക്ഷനുവേണ്ടി TLS അവസാനിപ്പിച്ച്, ഡീക്രിപ്റ്റ് ചെയ്ത ബൈറ്റ് സ്ട്രീം സാധാരണ OpenVPN TCP ലിസണറിലേക്ക് കൈമാറുന്നു. ഇവ വെവ്വേറെ കോൺഫിഗറേഷൻ ഫയലുകളുള്ള വെവ്വേറെ സോക്കറ്റുകൾ ആണ്, അതിനാൽ ഒന്ന് തിരുത്തുമ്പോൾ മറ്റൊന്ന് തൊടാതെയും ഇപ്പോഴും ആരോഗ്യമുള്ളതായി തോന്നുന്നതുമായി തുടരും. ഒന്ന് മറ്റൊന്നില്ലാതെ മാറ്റുമ്പോൾ രണ്ടും അകന്നുപോകാമെന്നും ഇത് അർത്ഥമാക്കുന്നു.
യന്ത്രത്തിൽ നിന്നുതന്നെ പ്രവർത്തിക്കുന്നത് പൊതു പാതയെക്കുറിച്ച് വളരെ കുറച്ചു മാത്രമേ തെളിയിക്കുന്നുള്ളൂ. അടിസ്ഥാന പോർട്ടിലേക്കുള്ള നേരിട്ടുള്ള കണക്ഷൻ റാപ്പറിനെ ഒഴിവാക്കുന്നു, റാപ്പറിന്റെ LAN വിലാസത്തിലേക്കുള്ള കണക്ഷൻ വിവർത്തനം ഒഴിവാക്കുന്നു, പുറത്തുള്ള ഉപയോക്താവ് ചെയ്യുന്നത് ക്ലയന്റ് ഭാഗത്തെ പൂർണ്ണ ക്രമീകരണം മാത്രമാണ് പരിശീലിക്കുന്നത്. പേരുകളും ശ്രദ്ധയോടെ വായിക്കേണ്ടതാണ്, കാരണം localhost ആ ഘടകം പ്രവർത്തിപ്പിക്കുന്ന ഹോസ്റ്റിനെയാണ് അർത്ഥമാക്കുന്നത്, നിങ്ങൾ യാദൃച്ഛികമായി ടൈപ്പ് ചെയ്യുന്ന ഹോസ്റ്റിനെയല്ല. ഈ വ്യത്യാസം നിങ്ങളുടെ കുറിപ്പുകളിൽ സൂക്ഷിക്കുക, കാരണം താൻ ഉൾക്കൊണ്ട കുതിപ്പ് രേഖപ്പെടുത്താതെയുള്ള പരിശോധന രണ്ട് വ്യത്യസ്ത കാര്യങ്ങളെ താരതമ്യം ചെയ്യാൻ ക്ഷണിക്കുന്നു.
ഫോർവേഡ് യഥാർത്ഥത്തിൽ എവിടെ എത്തുന്നു
മൂന്ന് പോർട്ട് നമ്പറുകളേക്കാൾ നാല് കുതിപ്പുകളായി ശൃംഖല പിടിച്ചുനിർത്താൻ എളുപ്പമാണ്, കാരണം ഒരേ നമ്പർ ഓരോ അറ്റത്തും വ്യത്യസ്ത അർത്ഥം നൽകാം. പട്ടിക വരി വരിയായി വായിക്കുക: ഓരോ വരിയും ഒരു കണക്ഷൻ സ്വീകരിച്ച് അടുത്തത് തുറക്കേണ്ട ഒരു സോക്കറ്റാണ്. ഒരു വരി തെറ്റായ പങ്കാളിയെ ലക്ഷ്യമിടുമ്പോൾ, അവസാന നിരയിലെ ലക്ഷണമാണ് ഉപയോക്താവ് റിപ്പോർട്ട് ചെയ്യുന്നത്.
| Hop | Listens on | Must reach | Symptom when it points elsewhere |
|---|---|---|---|
| Client machine | A local plaintext port | The wrapper's public TLS address | Plain text offered to a TLS endpoint |
| Router forward | Public TCP 443 | The wrapper host on its translated port | Wrapper records no connection at all |
| Wrapper, server mode | Its accepted port, 8443 here | The native VPN socket on loopback | Handshake completes, then silence |
| Native VPN listener | Loopback TCP port | Its peer, over TCP only | A UDP socket behind a byte-stream relay |
റാപ്പറിനു പകരം അടിസ്ഥാന VPN പോർട്ട് ലക്ഷ്യമിടുന്ന നിയമം TLS അവസാനിപ്പിക്കൽ പൂർണ്ണമായി ഒഴിവാക്കുന്നു, ഇതാണ് ഈ തെറ്റിന്റെ ഏറ്റവും സാധാരണ രൂപം: ക്ലയന്റ് OpenVPN ഫ്രെയിമിംഗ് പ്രതീക്ഷിക്കുന്ന ലിസണറുമായി ഹാൻഡ്ഷേക്ക് തുറക്കുന്നു, അതിനാൽ കണക്ഷൻ തുറന്ന് പിന്നീട് നിലയ്ക്കാം. വിവർത്തനം ചെയ്ത പോർട്ട് ഓർമ്മയെക്കാൾ റാപ്പറിന്റെ കോൺഫിഗറേഷൻ ഫയലുമായി സ്ഥിരീകരിക്കുക, കാരണം ആ ഫയൽ അടുത്തതായി തിരുത്തുന്ന ആൾ മറ്റൊരു നമ്പർ തിരഞ്ഞെടുത്തിരിക്കാം. താഴെയുള്ള രണ്ട് കമാൻഡുകൾ ആ ചോദ്യത്തിന്റെ രണ്ട് വശങ്ങളും ഒരുമിച്ച് കാണിക്കുന്നു.
grep -nE '^[[:space:]]*(accept|connect)' /etc/stunnel/stunnel.conf
ss -lntp | grep -E ':443|:8443|:1194'
നിങ്ങളെ നിരസിക്കുന്ന ബൈൻഡ് വിലാസം
127.0.0.1 എന്നതിലേക്ക് ബന്ധിച്ച accept വരി ഹോസ്റ്റിനോട് മാത്രമാണ് ഉത്തരം നൽകുന്നത്, അതിനാൽ LAN വിലാസത്തിൽ എത്തുന്ന ഫോർവേഡിന് ബന്ധിപ്പിക്കാനാവില്ല, ക്ലയന്റിന് പാക്കറ്റ് ഫിൽട്ടർ പ്രശ്നം പോലെ തോന്നിക്കുന്ന നിരസിക്കൽ കാണാം. ഫയർവാൾ തൊടുന്നതിന് മുൻപ് സോക്കറ്റ് നോക്കുക, കാരണം സോക്കറ്റാണ് വിലകുറഞ്ഞ ഉത്തരം. ഒന്നുകിൽ ഫോർവേഡ് ലക്ഷ്യമിടുന്ന ഇന്റർഫേസിലേക്ക് റാപ്പർ ബന്ധിക്കുക, അല്ലെങ്കിൽ അത് loopback-ൽ നിർത്തി യഥാർത്ഥത്തിൽ പ്രവർത്തിക്കുന്ന എന്തിലൂടെയെങ്കിലും ഫോർവേഡ് loopback-ൽ എത്തുന്നതാക്കുക. ഇവ രണ്ട് രൂപകൽപ്പനകളാണ്, ഓരോന്നിനും സ്വന്തം നിയമം വേണം.
ഇവ രണ്ടും കൂട്ടിക്കലർത്തുന്നതാണ് പ്രവർത്തിക്കുന്ന റാപ്പർ പുറത്തുനിന്ന് എത്താനാവാത്തതാകാനുള്ള വഴി, എല്ലാ ഫയലും ശരിയായി തോന്നുമ്പോഴും. താഴെയുള്ള പരിശോധന ഒരു കമാൻഡാണ്, ഫയർവാൾ നിയമങ്ങളുടെ അവലോകനത്തിന് ഉത്തരം നൽകാനാവാത്ത ചോദ്യത്തിന് അത് ഉത്തരം നൽകുന്നു. ഔട്ട്പുട്ട് loopback വിലാസം കാണിക്കുമ്പോൾ ഫോർവേഡ് LAN വിലാസം ലക്ഷ്യമിടുന്നുവെങ്കിൽ, തിരുത്തൽ accept വരിയിലാണ്, പാക്കറ്റ് ഫിൽട്ടറിലല്ല.
ss -lntp '( sport = :8443 )'
പ്രാദേശിക പരിശോധന യഥാർത്ഥത്തിൽ എന്ത് തെളിയിച്ചു
താൻ ഉൾക്കൊണ്ട കുതിപ്പ് രേഖപ്പെടുത്താതെയുള്ള വിജയം മറ്റ് കുതിപ്പുകളെക്കുറിച്ചുള്ള തെളിവല്ല. പരിശോധന ഏത് വിലാസം ഉപയോഗിച്ചു, ഏത് പ്രക്രിയയാണ് ഉത്തരം നൽകിയത് എന്ന് എഴുതിവയ്ക്കുക. പിന്നീട് അതേ Wi-Fi-ലെ ഫോണിൽ നിന്നല്ല, നെറ്റ്വർക്കിന് പുറത്തുനിന്ന് ആവർത്തിക്കുക, കാരണം ഹെയർപിൻ സ്വഭാവം റൗട്ടറുകൾക്കിടയിൽ വ്യത്യാസപ്പെടുന്നു, LAN ഒരിക്കലും വിടാത്ത കണക്ഷനും ഫോർവേഡ് ഒട്ടും പങ്കെടുക്കാതെ ക്ലയന്റിനെ തൃപ്തിപ്പെടുത്താം. ആ രണ്ടാം ശ്രമം മാത്രമാണ് അപരിചിതൻ സഞ്ചരിക്കുന്ന വഴി പരിശീലിപ്പിക്കുന്നത്.
ശ്രമം പരാജയപ്പെടുമ്പോൾ, ഒരു കണക്ഷനെ രണ്ട് ലോഗുകളിലും പിന്തുടരുക: റാപ്പറിന്റെ സ്വീകരിച്ചതും ബന്ധിച്ചതുമായ വരികൾ, തുടർന്ന് VPN ഡീമണിന്റെ സ്വന്തം സെഷൻ ലോഗ്. ഒന്നും രേഖപ്പെടുത്താത്ത ആദ്യ അതിർത്തിയാണ് അടുത്ത മാറ്റത്തിന്റെ സ്ഥലം. OpenVPN പങ്കാളിയുടെ ഓപ്ഷനുകൾ താരതമ്യം ചെയ്യാൻ തുടങ്ങുമ്പോൾ, ആ സന്ദേശങ്ങൾ ആ നിർവ്വഹണത്തിന്റെ നിയമങ്ങൾ പ്രകാരം വിലയിരുത്തുക. link-mtu പൊരുത്തക്കേടിന്റെ മുന്നറിയിപ്പ് സ്വയം മാരകമല്ല, link-mtu 1500-ൽ പിന്നിടുന്നത് ശകലനം നിന്നുവെന്ന് തെളിയിക്കുന്നില്ല, ഒപ്പം സൈഫർ ചർച്ച റൗട്ടറിന്റെ ഫോർവേഡിന്റേതല്ല, ഉള്ളിലെ OpenVPN കോൺഫിഗറേഷന്റേതാണ്.
nc -vz 127.0.0.1 1194
journalctl -u stunnel -n 50 --no-pager
ആ പരിശോധനകൾ ബാക്കെൻഡ് സോക്കറ്റും റാപ്പർ ലോഗും ഉൾക്കൊള്ളുന്നു, ഇത് നിരസിക്കപ്പെട്ട ബാക്കെൻഡിനെ നിരസിക്കപ്പെട്ട ഹാൻഡ്ഷേക്കിൽ നിന്ന് വേർതിരിക്കുന്നു. ഒരു ശ്രമം നടക്കുമ്പോൾ അവ പ്രവർത്തിപ്പിക്കുക, പിന്നീടല്ല. ഒരേ ശ്രമത്തിന്റെ സമയമുദ്രകളാണ് താരതമ്യത്തെ വിശ്വസനീയമാക്കുന്നത്.
രണ്ട് ഐഡന്റിറ്റി, രണ്ട് പരാജയ ക്രമം
പുറം സർട്ടിഫിക്കറ്റ് റാപ്പറിന്റേതാണ്, ഉള്ളിലെ ഐഡന്റിറ്റി OpenVPN-ന്റേതാണ്, അവ വ്യത്യസ്ത അധികാരികളിൽ നിന്ന് വരാം. വഴി ആരോഗ്യമുള്ളതായി കാണാൻ രണ്ട് പരിശോധനകളിൽ ഏതെങ്കിലും ഓഫ് ചെയ്യുന്നത് യഥാർത്ഥ സംരക്ഷണത്തെ ബാഹ്യരൂപഫലവുമായി കൈമാറുന്നു. രണ്ട് സ്ഥിരീകരണങ്ങളും നിലനിർത്തി ക്രമത്തിൽ ഡീബഗ് ചെയ്യുക, കാരണം സന്ദേശങ്ങളുടെ ക്രമം പാളിയെ പേരിടുന്നു: റാപ്പർ സർട്ടിഫിക്കറ്റ് പ്രശ്നം ഏതെങ്കിലും VPN ഓപ്ഷൻ ചർച്ചയ്ക്ക് മുൻപ് പ്രത്യക്ഷപ്പെടുന്നു, ഉള്ളിലെ ഐഡന്റിറ്റി പരാജയം സ്ട്രീം സ്ഥാപിച്ചതിന് ശേഷം മാത്രം പ്രത്യക്ഷപ്പെടുന്നു.
stunnel കൈപ്പുസ്തകം accept, connect, ക്ലയന്റ് മോഡ് എന്നിവ കൃത്യമായി നിർവചിക്കുന്നു, ആ വിഭാഗങ്ങൾ ഊഹത്തെക്കാൾ വേഗത്തിൽ സോക്കറ്റ് ചോദ്യത്തിന് ഉത്തരം നൽകുന്നു. ഏത് പാളിയാണ് ഉത്തരം നൽകിയതെന്ന് ഇപ്പോഴും പറയാനാവുന്നില്ലെങ്കിൽ, താഴെയുള്ള കമാൻഡ് ഉപയോഗിച്ച് പൊതു പോർട്ട് അവതരിപ്പിക്കുന്ന സർട്ടിഫിക്കറ്റ് വായിക്കുക. ഔട്ട്പുട്ടിൽ റാപ്പർ സർട്ടിഫിക്കറ്റ് ഉണ്ടെങ്കിൽ ഫോർവേഡ് റാപ്പറിൽ എത്തി, നിശ്ശബ്ദതയോ പ്രോട്ടോക്കോൾ പിശകോ ആണെങ്കിൽ എത്തിയില്ല. ആ ഒരു വ്യത്യാസം ഇവിടെയുള്ള മറ്റേതൊരു പരിശോധനയെക്കാളും സമയം ലാഭിക്കുന്നു.
openssl s_client -connect vpn.example:443 -servername vpn.example </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer