OpenVPN-ന്റെ പൂർണ ടണൽ നിങ്ങളുടെ SSH സെഷൻ വിച്ഛേദിക്കുന്നു: മടക്കവഴി ശരിയാക്കുക
ഡിഫോൾട്ട് റൂട്ട് SSH മറുപടികളെ ടണലിലേക്ക് അയയ്ക്കുന്നു. പിയർ പിൻ ചെയ്യുക, redirect-gateway ഫിൽട്ടർ ചെയ്യുക, അല്ലെങ്കിൽ യന്ത്രം നഷ്ടപ്പെടുന്നതിന് മുമ്പ് ഉറവിടം അനുസരിച്ച് റൂട്ട് ചെയ്യുക.
SSH വഴി എത്തുന്ന ഒരു യന്ത്രത്തിൽ പൂർണ ടണൽ OpenVPN ക്ലയന്റ് ഓണാക്കുന്നത് ഒരു സെക്കൻഡിനുള്ളിൽ സെഷൻ വിച്ഛേദിക്കാം, യന്ത്രം ഒന്നും തെറ്റായി ചെയ്യുന്നില്ല. ടണൽ പാക്കറ്റുകൾ സർവറിലേക്ക് എത്തുന്ന രീതി മാറ്റുന്നില്ല; മറുപടികൾ പുറത്തുപോകുന്ന രീതിയാണ് മാറ്റുന്നത്. ഡിഫോൾട്ട് റൂട്ട് tun0-ലേക്ക് ചൂണ്ടുന്ന നിമിഷം, നിങ്ങളുടെ SSH ക്ലയന്റിലേക്കുള്ള മറുപടി ദാതാവിന്റെ നെറ്റ്വർക്കിലേക്ക് പോകുന്നു, അതിന് നിങ്ങളുടെ വിലാസത്തിലേക്ക് തിരികെയുള്ള വഴിയില്ല. കണക്ഷൻ തൂങ്ങിനിൽക്കുന്നു, അടുത്ത ശ്രമം സമയപരിധി കടക്കുന്നു, ഡീമൺ എല്ലാ സമയവും പോർട്ട് 22-ൽ കേൾക്കുന്നു.
VPN ലോഗ് വായിക്കുന്നതിന് മുമ്പ് റൂട്ടിംഗ് പട്ടിക വായിക്കുക. ടണൽ ഉയർന്നു എന്ന് ലോഗ് പറയും, അത് ശരിയാണ്. ഓരോ മറുപടിയും ഏത് ഇന്റർഫേസിന് നൽകുന്നു എന്നതാണ് ചോദ്യം, അത് ടണൽ ഇപ്പോൾ പുനരെഴുതിയ പട്ടികയിൽ ഓരോ പാക്കറ്റിനും നടത്തുന്ന തിരച്ചിലാണ്.
മറുപടി തെറ്റായ വാതിലിലൂടെ പോകുന്നതെന്തുകൊണ്ട്
വരുന്ന പാക്കറ്റുകൾ ഇപ്പോഴും ഭൗതിക ഇന്റർഫേസിൽ എത്തുന്നു, കാരണം ഇന്റർനെറ്റ് നിങ്ങളുടെ സർവറിന്റെ പൊതു വിലാസത്തിൽ എത്തുന്ന രീതി VPN ക്ലയന്റിന് മാറ്റാനാവില്ല. മറുപടികൾ വേറിട്ട തീരുമാനമാണ്: ഓരോ പാക്കറ്റിനും കെർണൽ ലക്ഷ്യം നോക്കുന്നു, --redirect-gateway കഴിഞ്ഞ് ഡിഫോൾട്ട് എൻട്രി ടണൽ എന്ന് പറയുന്നു. ദാതാവിന്റെ എക്സിറ്റ് താൻ സേവിക്കാത്ത ഒരു ലക്ഷ്യം കണ്ട് പാക്കറ്റ് ഉപേക്ഷിക്കുന്നു.
OpenVPN-ന്റെ സ്വന്തം സംരക്ഷണം കൃത്യമായി ഒരു ലക്ഷ്യത്തെ മാത്രം ഉൾക്കൊള്ളുന്നു. 2.6 കൈപ്പുസ്തകം --redirect-gateway-നെ ഒരു ക്രമമായി വിവരിക്കുന്നു: ടണലിന് മുമ്പ് ഉപയോഗിച്ച ഗേറ്റ്വേ വഴി VPN പിയറിന് ഒരു ഹോസ്റ്റ് റൂട്ട് ചേർക്കുന്നു, അങ്ങനെ എൻക്രിപ്റ്റ് ചെയ്ത ട്രാഫിക്കിന് സ്വയം തിരികെ വരാനാവില്ല, തുടർന്ന് ഡിഫോൾട്ട് റൂട്ട് മാറ്റിസ്ഥാപിക്കുന്നു. ആ ഹോസ്റ്റ് റൂട്ട് പിയറിന് മാത്രമാണ്. നിങ്ങളുടെ SSH ക്ലയന്റ് മറ്റൊരു ഇന്റർനെറ്റ് വിലാസം മാത്രമാണ്, ഒരു ഒഴിവാക്കലും ലഭിക്കുന്നില്ല.
ഒരു പ്രിഫിക്സ് തെറ്റ് നേരത്തെ ഒഴിവാക്കുന്നത് നല്ലതാണ്. നീളമില്ലാത്ത ip route add -net 0.0.0.0 gw 10.8.0.1 dev tun0 ഒറ്റ വിലാസമായ 0.0.0.0-മായി പൊരുത്തപ്പെടുന്നു, ഇന്റർനെറ്റിനോടല്ല; അത് 0.0.0.0/0 ആകണം. ഡിഫോൾട്ട് എടുക്കുന്നത് ടണലിന്റെ സ്വന്തം ഗതാഗതം തകർത്താൽ, അന്ത്യബിന്ദുവിനെ ഭൗതിക ഇന്റർഫേസ് വഴി ഹോസ്റ്റ് റൂട്ടായി ചേർക്കുക, ദാതാവിന്റെ യഥാർത്ഥ വിലാസം ഉപയോഗിച്ച്.
ഉടനടി പരിഹരിക്കാൻ നിങ്ങളുടെ SSH ക്ലയന്റ് വിലാസം പിൻ ചെയ്യുക
ഏറ്റവും വേഗതയുള്ള പരിഹാരം ടണൽ ഉണ്ടാകുന്നതിന് മുമ്പ് സർവർ ഉപയോഗിച്ച ഗേറ്റ്വേ വഴി നിങ്ങളുടെ ക്ലയന്റ് വിലാസത്തിന് ഒരു ഹോസ്റ്റ് റൂട്ട് ആണ്. നിങ്ങളുടെ ഭാഗത്തുനിന്ന് സർവർ കാണുന്ന വിലാസം കണ്ടെത്തുക, തുടർന്ന് പഴയ ഗേറ്റ്വേ അറിയാൻ സർവറിന്റെ പട്ടിക വായിക്കുക:
curl -s https://ifconfig.co
ip route
സർവറിൽ, ക്ലയന്റ് ആരംഭിക്കുന്നതിന് മുമ്പ് ഒഴിവാക്കൽ ചേർക്കുക. ഇവിടത്തെ വിലാസങ്ങൾ പ്ലേസ്ഹോൾഡറുകളാണ്; രൂപമാണ് പ്രധാനം:
sudo ip route add 80.128.240.55 via 192.168.178.1
റിപ്പോർട്ട് ചെയ്ത കേസിൽ ഉപയോഗിച്ച പരിഹാരമാണ് ഇത്, അത് ഉടനടി പ്രവർത്തിക്കുന്നു. ഇത് രണ്ട് പ്രവചിക്കാവുന്ന രീതികളിൽ ദുർബലവുമാണ്: റീബൂട്ടിൽ റൂട്ട് അപ്രത്യക്ഷമാകുന്നു, നിങ്ങളുടെ ISP മറ്റൊരു വിലാസം തരുന്ന നിമിഷം അത് തെറ്റാകുന്നു. ഇതിനെ അടിയന്തര നടപടിയായി കാണുക, ബോധപൂർവം ഇതിനെ ശാശ്വതമാക്കുക, ഒരു നെറ്റ്വർക്ക് യൂണിറ്റ് അല്ലെങ്കിൽ ഡിസ്പാച്ചർ ഹുക്ക് വഴി, അല്ലെങ്കിൽ ഇത് താൽക്കാലികമാണെന്ന് സമ്മതിച്ച് വീണ്ടെടുക്കൽ വഴി എഴുതിവയ്ക്കുക.
ക്ലയന്റ് ഡിഫോൾട്ട് എടുക്കുന്നത് തടയുക
കൂടുതൽ വ്യക്തമായ ഓപ്ഷൻ ടണൽ ഡിഫോൾട്ട് റൂട്ട് ഒട്ടും മാറ്റിസ്ഥാപിക്കാതിരിക്കുകയാണ്. route-nopull, --client അല്ലെങ്കിൽ --pull-മായി ഉപയോഗിക്കുമ്പോൾ, റൂട്ടുകൾ, block-outside-dns, DNS സർവറുകൾ പോലുള്ള DHCP ശൈലിയിലുള്ള ഓപ്ഷനുകൾ എന്നിവ ഒഴികെ തള്ളിയ ഓപ്ഷനുകൾ സ്വീകരിക്കുന്നു, അതിനാൽ ആവശ്യമായ പ്രിഫിക്സുകൾ മാത്രം ചേർക്കുന്നു. കൂടുതൽ ഇടുങ്ങിയ ഉപകരണം ഒരു പുൾ ഫിൽട്ടർ ആണ്, അത് ഒരു പ്രശ്നകരമായ നിർദ്ദേശം ഒഴിവാക്കി ബാക്കി നിലനിർത്തുന്നു:
route-nopull
pull-filter ignore "redirect-gateway"
ഒന്നോ മറ്റൊന്നോ ഉപയോഗിക്കുക, രണ്ടും അല്ല, എന്താണ് മാറുന്നതെന്ന് വ്യക്തമായിരിക്കുക. ടണൽ വഴി ഡിഫോൾട്ട് റൂട്ട് ഇല്ലെങ്കിൽ സർവർ ഇനി ദാതാവ് വഴി ഇന്റർനെറ്റ് ബ്രൗസ് ചെയ്യുന്നില്ല; നിങ്ങൾ വ്യക്തമായി റൂട്ട് ചെയ്തതിൽ മാത്രം എത്തുന്നു. പൂർണ ടണൽ ആയിരുന്നു ക്രമീകരണത്തിന്റെ മുഴുവൻ ലക്ഷ്യമെങ്കിൽ, ഇത് തെറ്റായ സ്വിച്ചാണ്, മുകളിലെ ഹോസ്റ്റ് റൂട്ടാണ് ശരി.
മടക്കവഴി ഉറവിടം അനുസരിച്ചോ കണക്ഷൻ അനുസരിച്ചോ വിഭജിക്കുക
വരുന്ന വിലാസം സ്ഥിരമായിരിക്കുമ്പോൾ, ഉറവിട നിയമം ടണലിന്റെ സ്വന്തം റൂട്ടുകളെ സ്പർശിക്കാതെ മറുപടികൾ പ്രാദേശികമായി നിർത്തുന്നു. ഭൗതിക ഇന്റർഫേസിന്റെ വിലാസത്തിന് LAN പ്രിഫിക്സും ഭൗതിക ഡിഫോൾട്ടും ഉള്ള സ്വന്തം പട്ടിക നൽകുക, തുടർന്ന് അവിടെനിന്ന് വരുന്ന ട്രാഫിക്കിന് ആ പട്ടിക തിരഞ്ഞെടുക്കുക:
ip rule add from 192.168.1.11 table 128
ip route add table 128 to 192.168.1.0/24 dev eth0
ip route add table 128 default via 192.168.1.1
ഇത് പ്രവർത്തിക്കുന്നത് വരുന്ന SSH കണക്ഷനുള്ള മറുപടികൾ ക്ലയന്റ് ബന്ധിപ്പിച്ച വിലാസത്തിൽനിന്ന് വരുന്നതുകൊണ്ടാണ്. എല്ലാ വരുന്ന സേവനവും തുടർന്ന് പ്രവർത്തിക്കേണ്ടിയിരുന്ന റിപ്പോർട്ട് ചെയ്ത കേസ് കൃത്യമായി ഈ രൂപമാണ് ഉപയോഗിച്ചത്. വരുന്ന വിലാസം ഒഴുകുന്നതോ വഴി ചലനാത്മകമോ ആണെങ്കിൽ, പകരം കണക്ഷൻ അടയാളപ്പെടുത്തുക: ഭൗതിക ഇന്റർഫേസിൽനിന്ന് വരുന്ന ആദ്യ പാക്കറ്റിൽ ഒരു conntrack അടയാളം ഇടുക, OUTPUT-ൽ മറുപടി പാക്കറ്റുകളിലേക്ക് അത് പകർത്തുക, അടയാളപ്പെടുത്തിയ പാക്കറ്റുകൾ ഭൗതിക ഗേറ്റ്വേയിലേക്ക് ചൂണ്ടുന്ന പട്ടികയിലൂടെ റൂട്ട് ചെയ്യുക.
iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234
iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321
ip route add default via 192.168.1.1 dev eth0 table 3412
ip rule add fwmark 4321 table 3412
പരീക്ഷിക്കുമ്പോൾ കണക്ഷൻ അടയാളം, ഫയർവാൾ അടയാളം, പട്ടിക നമ്പർ എന്നിവ വെവ്വേറെ സൂക്ഷിക്കുക. രണ്ട് റോളുകൾക്ക് ഒരു നമ്പർ വീണ്ടും ഉപയോഗിക്കുന്നത് ശരിയെന്ന് തോന്നുന്നതും തെറ്റായ പാക്കറ്റുകളെ ബാധിക്കുന്നതുമായ ഒരു നിയമം ഉണ്ടാക്കുന്നു. പട്ടികയുടെ ഡിഫോൾട്ട് എൻട്രിക്ക് സാധാരണ Ethernet ലിങ്കിൽ LAN ഗേറ്റ്വേയോടൊപ്പം via കൂടി വേണം; വെറും dev eth0 ഇന്റർഫേസ് പോയിന്റ്-ടു-പോയിന്റ് ആകുമ്പോൾ അല്ലെങ്കിൽ അടുത്ത ഹോപ്പ് മറ്റൊരു രീതിയിൽ പരിഹരിക്കുമ്പോൾ മാത്രം പ്രവർത്തിക്കുന്നു. റിപ്പോർട്ട് ചെയ്ത Jessie ഹോസ്റ്റ് വെറും രൂപം പ്രവർത്തിച്ച ഒരു ലിങ്കിലായിരുന്നു, അത് പകർത്താൻ യോഗ്യമായ ഒരു വിതരണ നിയമമല്ല.
പുറത്ത് പൂട്ടിപ്പോകാതെ പരിശോധിക്കുക
വിച്ഛേദിച്ച് പരീക്ഷിക്കരുത്. ആദ്യ സെഷൻ തുറന്നിടുക, ടണൽ ഉയർത്തുക, നിങ്ങളുടെ സ്വന്തം വിലാസം ഏത് വഴി എടുക്കുമെന്ന് കെർണലിനോട് ചോദിക്കുക:
ip route get 80.128.240.55
മറുപടി ടണലല്ല, ഭൗതിക ഇന്റർഫേസും പഴയ ഗേറ്റ്വേയും പേരിടണം. തുടർന്ന് രണ്ടാമത്തെ SSH കണക്ഷൻ തുറക്കുക; അതാണ് യഥാർത്ഥ പരീക്ഷണം, പഴയ സെഷൻ പുതിയ കണക്ഷന് പുനർനിർമ്മിക്കാനാവാത്ത അവസ്ഥയിൽ അതിജീവിച്ചേക്കാം. രണ്ടാമത്തേത് തൂങ്ങിനിൽക്കുകയും ആദ്യത്തേത് ഇപ്പോഴും മറുപടി നൽകുകയും ചെയ്താൽ, നിയമം പ്രധാനമായ ട്രാഫിക്കിൽ ഒരിക്കലും പൊരുത്തപ്പെട്ടിട്ടില്ല, അടയാളങ്ങളോ ഉറവിട വിലാസമോ ആണ് നോക്കേണ്ട സ്ഥലം.
മുഴുവൻ അഭ്യാസത്തിലും ബാൻഡിന് പുറത്തുള്ള ഒരു കൺസോൾ ലഭ്യമാക്കി വയ്ക്കുക. നിങ്ങൾ ഇപ്പോൾ തകർത്ത ടണൽ മാത്രമാണ് പ്രവേശന മാർഗമായുള്ള സർവർ ആ ടണൽ വഴി നന്നാക്കാനാവില്ല, ചേർത്ത പട്ടിക നമ്പറുകളും പ്രിഫിക്സുകളും എഴുതിവച്ചിട്ടുണ്ടെങ്കിൽ പിന്നോട്ട് മാറ്റുന്നതും എളുപ്പമാണ്.