കാരിയർ NAT-ന് പിന്നിലുള്ള ലാപ്ടോപ്പിനും ഒരു സഹപ്രവർത്തകനെ സേവിക്കാൻ കഴിയും, VPN സർവർ കൂടിച്ചേരൽ സ്ഥലമായി പ്രവർത്തിച്ചാൽ മതി. അങ്ങോട്ട് എത്താൻ രണ്ട് സംവിധാനങ്ങളുണ്ട്: ക്ലയന്റ് പുറത്തേക്ക് ഡയൽ ചെയ്ത് സർവറിനോട് ഒരു കേൾവി പോർട്ട് സൂക്ഷിക്കാൻ ആവശ്യപ്പെടുന്നു, അല്ലെങ്കിൽ സർവർ ഒരു പോർട്ട് പ്രസിദ്ധീകരിച്ച് അതിനെ ടണലിലേക്ക് വിവർത്തനം ചെയ്യുന്നു. രണ്ടും ഒരേ എത്തിച്ചേരൽ പ്രശ്നം പരിഹരിക്കുന്നു, പരാജയം, മേൽനോട്ടം, ലോഗിംഗ് എന്നിവയിൽ വ്യത്യസ്തമായി പെരുമാറുന്നു. നിങ്ങളുടെ സജ്ജീകരണത്തിന് ഏതാണ് യോജിക്കുന്നതെന്ന് മൂന്ന് വ്യവസ്ഥകൾ നിർണ്ണയിക്കുന്നു.

രണ്ട് രൂപങ്ങൾ, ഒരു കൂടിച്ചേരൽ സ്ഥലം

ആദ്യ രൂപത്തിൽ ക്ലയന്റ് പുറത്തേക്ക് ഒരു SSH സെഷൻ തുറന്ന് സർവറിനോട് തിരഞ്ഞെടുത്ത പോർട്ടിൽ കേൾക്കാൻ ആവശ്യപ്പെടുന്നു, ഓരോ കണക്ഷനും ആ സെഷനിലൂടെ തിരികെ അയയ്ക്കുന്നു. സർവറിൽ ഒന്നും ഫോർവേഡ് ചെയ്യുന്നില്ല, പാക്കറ്റ് വിവർത്തനവും നടക്കുന്നില്ല, അതിനാൽ ഏക ആവശ്യകതകൾ SSH അക്കൗണ്ട്, അനുവദിച്ച ഫോർവേഡിംഗ്, പോർട്ടിനുള്ള ഫയർവാൾ നിയമം എന്നിവയാണ്. സേവനം ക്ലയന്റിലെ ലൂപ്പ്ബാക്കിലേക്ക് ബന്ധിക്കപ്പെട്ടിരിക്കുന്നു, സാധാരണയായി അതാണ് നിങ്ങൾക്ക് വേണ്ടത്.

ssh -N -R 8081:127.0.0.1:8080 -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 [email protected]

രണ്ടാം രൂപത്തിൽ പൊതു പോർട്ട് സർവറിന്റേതാണ്, ഓരോ കണക്ഷനെയും ക്ലയന്റിന്റെ ടണൽ വിലാസത്തിലേക്ക് വീണ്ടും എഴുതുന്നു. അതിന് IP ഫോർവേഡിംഗ് പ്രവർത്തനക്ഷമമായിരിക്കണം, കടക്കുമ്പോൾ ലക്ഷ്യ വിവർത്തനവും പുറത്തുപോകുമ്പോൾ ഉറവിട വിവർത്തനവും വേണം, SSH സെഷൻ ഇല്ലാത്തപ്പോഴും ഇത് പ്രവർത്തിക്കുന്നു. പോർട്ട് സെഷന്റേതല്ല, സർവറിന്റേതാണ്, ആ ഗുണമാണ് മിക്ക യഥാർത്ഥ കേസുകളും നിർണ്ണയിക്കുന്നത്.

രണ്ട് രൂപങ്ങളും ഘടനയാൽ സുരക്ഷിതമല്ല. രണ്ടും ഒരു സേവന പോർട്ട് സർവറിന്റെ പൊതു വിലാസത്തിൽ എത്താൻ കഴിയുന്ന എല്ലാവർക്കും തുറന്നുകൊടുക്കുന്നു, രണ്ടും ഇപ്പോഴും സേവനത്തിന്റെ സ്വന്തം പ്രാമാണീകരണത്തെ ആശ്രയിക്കുന്നു.

ഒന്നാം വ്യവസ്ഥ: പോർട്ട് സെഷനെക്കാൾ കൂടുതൽ കാലം ജീവിക്കണമോ

റിവേഴ്സ് ഫോർവേഡിംഗ് അത് സൃഷ്ടിച്ച SSH സെഷൻ എത്ര കാലം നിലനിൽക്കുന്നുവോ അത്രയും കാലം മാത്രം നിലനിൽക്കുന്നു. ലിങ്ക് വീഴുമ്പോൾ കേൾക്കുന്നവൻ അപ്രത്യക്ഷമാകുന്നു, സഹപ്രവർത്തകൻ മന്ദഗതിയിലുള്ള പാതയ്ക്ക് പകരം നിരസിച്ച കണക്ഷൻ കാണുന്നു. systemd യൂണിറ്റും റീസ്റ്റാർട്ട് നയവും ഉപയോഗിച്ച് കമാൻഡ് മേൽനോട്ടം ചെയ്യുന്നത് ഇത് പരിഹരിക്കുന്നു, ExitOnForwardFailure=yes പരാജയപ്പെട്ട ബൈൻഡിംഗ് ഉടൻ ദൃശ്യമാക്കുന്നു, ഫോർവേഡിംഗ് ഇല്ലാതെ പ്രവർത്തിക്കുന്ന സെഷൻ വിട്ടേക്കുന്നതിന് പകരം.

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

സേവനം രാത്രി മൂന്ന് മണിക്ക് ആരും നോക്കാതെ ഉത്തരം നൽകേണ്ടതുണ്ടെങ്കിൽ, സർവർ പ്രസിദ്ധീകരിച്ച പോർട്ടുള്ള രൂപത്തിന് ചലിക്കുന്ന ഭാഗങ്ങൾ കുറവാണ്, കാരണം നിലനിർത്തേണ്ട ഒരേയൊരു പ്രോസസ്സ് ടണൽ തന്നെയാണ്.

രണ്ടാം വ്യവസ്ഥ: ഫയർവാളും ലോഗുകളും ആരുടേതാണ്

റിവേഴ്സ് രൂപം മുഴുവൻ നയവും രണ്ടിടത്ത് സൂക്ഷിക്കുന്നു. sshd AllowTcpForwarding വഴി വിദൂര ഫോർവേഡിംഗ് ഒട്ടും അനുവദനീയമാണോ എന്ന് തീരുമാനിക്കുന്നു, GatewayPorts കേൾക്കുന്നവൻ ലൂപ്പ്ബാക്കിലേക്കാണോ എല്ലാ വിലാസങ്ങളിലേക്കാണോ ബന്ധിക്കുന്നതെന്ന് തീരുമാനിക്കുന്നു. സ്ഥിരസ്ഥിതി no ഉള്ളപ്പോൾ ഫോർവേഡിംഗ് വിജയിച്ചാലും സർവറിന് പുറത്തുള്ള സഹപ്രവർത്തകന് പോർട്ടിൽ എത്താൻ കഴിയില്ല, അത് കേടായ ടണലിനെപ്പോലെ തോന്നിക്കുന്നു, യഥാർത്ഥത്തിൽ അത് ബൈൻഡിംഗ് വിലാസമാണ്.

sudo ss -ltn '( sport = :8081 )'
sudo grep -E '^(GatewayPorts|AllowTcpForwarding)' /etc/ssh/sshd_config

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

sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 8081 -j DNAT --to-destination 10.88.0.6:8080
sudo iptables -t nat -A POSTROUTING -o tun0 -m conntrack --ctstate DNAT -j SNAT --to-source 10.88.0.1

ആ വീണ്ടും എഴുത്ത് ആരോപണവും നശിപ്പിക്കുന്നു. അതിന് ശേഷം ക്ലയന്റ് ഓരോ വിളിക്കുന്നവനെയും സർവറിന്റെ ടണൽ വിലാസമായി കാണുന്നു, ഇത് ഓരോ വിലാസത്തിനുമുള്ള നിരക്ക് പരിധിയെ ഒരു തൊട്ടിയിലേക്ക് ചുരുക്കി ആരു എന്ത് അയച്ചുവെന്ന് മറയ്ക്കുന്നു. ആരോപണം പ്രധാനമെങ്കിൽ കണക്ഷൻ സർവറിൽ അവസാനിപ്പിക്കുകയോ അനുമതിയുടെ തീരുമാനം അവിടെ സൂക്ഷിച്ച് സേവനം വിശ്വസിക്കുന്ന ഹെഡറിൽ ഐഡന്റിറ്റി കൈമാറുകയോ ചെയ്യുക. ഈ രണ്ട് പരിഹാരങ്ങളിൽ ഏത് തിരഞ്ഞെടുക്കണം എന്നത് സേവനം പ്രോക്സി ഹെഡർ വായിക്കുന്നുണ്ടോ എന്നതിനെ ആശ്രയിച്ചിരിക്കുന്നു.

മൂന്നാം വ്യവസ്ഥ: ഒരു പോർട്ടോ പലതോ, പേര് ആരുടേതാണ്

ഒരു പോർട്ടിൽ ഒരു സേവനം എന്നത് പ്രയത്നത്തിൽ റിവേഴ്സ് ഫോർവേഡിംഗ് വിജയിക്കുന്ന സന്ദർഭമാണ്. ഒരു കമാൻഡ്, ഒരു അക്കൗണ്ട്, ഒരു ഫയർവാൾ നിയമം എന്നിവ വേണം, ശുചീകരണം സെഷൻ കൊല്ലുകയാണ്. ഒരേ പൊതു വിലാസത്തിൽ ഒന്നിലധികം സേവനങ്ങൾ നിങ്ങളെ സർവർ പ്രസിദ്ധീകരിച്ച രൂപത്തിലേക്ക് തള്ളുന്നു, കാരണം ഓരോ റിവേഴ്സ് ഫോർവേഡിംഗിനും സ്വന്തം സർവർ പോർട്ട് വേണം, ഓരോ സേവനത്തോടും കൂടെ ഗണം വളരുന്നു.

പേരുകൾ ഇത് കൂടുതൽ സങ്കീർണ്ണമാക്കുന്നു. SNI അനുസരിച്ച് റൂട്ട് ചെയ്യുന്ന TCP പ്രോക്സിക്ക് പിന്നിൽ റിവേഴ്സ് ഫോർവേഡിംഗ് ഇരിക്കാം, പരിഭാഷപ്പെടുത്തിയ പോർട്ട് സാധാരണയായി ഓരോ സേവനത്തിനും ഒരു പോർട്ടാണ്. സേവനം സ്വയം TLS അവസാനിപ്പിച്ച് യഥാർത്ഥ ഹോസ്റ്റ്നാമം ആവശ്യമാണെങ്കിൽ, പ്രോക്സി സമീപനം അത് സംരക്ഷിക്കുന്നു, DNAT സമീപനം സേവനം ആ പോർട്ടിൽ ആ പേര് സ്വീകരിച്ചാൽ മാത്രം സംരക്ഷിക്കുന്നു.

മൂന്ന് വ്യവസ്ഥകളിൽ ഏതാണ് രൂപം നിർണ്ണയിച്ചതെന്ന് എഴുതിവയ്ക്കുക. അല്ലെങ്കിൽ രണ്ടാം സേവനം ചേർക്കുന്ന അടുത്ത വ്യക്തി കുറഞ്ഞ സന്ദർഭത്തോടെ അതേ താരതമ്യം വീണ്ടും തുറക്കും.

തീരുമാനിക്കുക, പിന്നീട് പുറത്തുനിന്ന് പരീക്ഷിക്കുക

ലാപ്ടോപ്പിലേക്ക് ഒരു റൂട്ടുമില്ലാത്ത നെറ്റ്വർക്കിൽ നിന്ന് പാത പരീക്ഷിക്കുക, അഭ്യർത്ഥന നടക്കുമ്പോൾ സർവറിലെ കൗണ്ടറുകൾ നിരീക്ഷിക്കുക. സർവറിൽ നിന്ന് അതിന്റെ സ്വന്തം പൊതു വിലാസത്തിലേക്ക് പരീക്ഷിക്കുന്നത് ഇവിടെ ഒന്നും തെളിയിക്കുന്നില്ല, കാരണം പാക്കറ്റ് പ്രാദേശികമായി സൃഷ്ടിക്കപ്പെടുകയും ഇൻകമിംഗ് വിവർത്തന ഹുക്കിൽ എത്താതിരിക്കുകയും ചെയ്യുന്നു, അതിനാൽ യഥാർത്ഥ പാത കേടായിരിക്കുമ്പോൾ പരീക്ഷണം വിജയിച്ചേക്കാം.

sudo iptables -t nat -L PREROUTING -n -v
sudo tcpdump -ni any 'tcp port 8081' -c 20

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

രൂപം പ്രവർത്തിച്ചുതുടങ്ങിയാൽ പോർട്ട്, ഉടമ, മേൽനോട്ട രീതി എന്നിവ ടണൽ കോൺഫിഗറേഷന് അരികിൽ രേഖപ്പെടുത്തുക. ആരുടെയെങ്കിലും ഷെൽ ചരിത്രത്തിൽ മാത്രം നിലനിൽക്കുന്ന എത്തിച്ചേരൽ പരിഹാരം ഒരു റീബൂട്ട് അകലെയുള്ള ആവർത്തിച്ച സംഭവമാണ്.

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