CGNAT-ന് പിന്നിൽ നിന്ന് VPN ക്ലയന്റ് പോർട്ട് പ്രസിദ്ധീകരിക്കുക: ചെക്ക്ലിസ്റ്റ്
ഡെസ്റ്റിനേഷൻ NAT നിയമം മാത്രം പകുതി തുറന്ന കണക്ഷനുകൾ നൽകുന്നു. ടണലിന്റെ വിലാസം ഉറപ്പിക്കുക, ഇരു ദിശകളിലും വിവർത്തനം ചെയ്യുക, പരിശോധനയ്ക്ക് മുൻപ് മറുപടിയുടെ പാത സ്ഥിരീകരിക്കുക.
ഒരു സേവനം കാരിയർ-ഗ്രേഡ് NAT-ന് പിന്നിലുള്ള ലാപ്ടോപ്പിൽ വയ്ക്കുക, ആ ലാപ്ടോപ്പ് VPN വഴി ഒരു VPS-ലേക്ക് തിരിക്കുക, പുറത്തുനിന്ന് ആർക്കും അതിൽ എത്താൻ കഴിയില്ല. VPS-ൽ ഒരു ഡെസ്റ്റിനേഷൻ NAT നിയമം ചേർക്കുമ്പോൾ നിശ്ശബ്ദതയെക്കാൾ മോശമായ ഒന്ന് ലഭിക്കുന്നു: കണക്ഷനുകൾ തുറന്ന് പിന്നീട് നിലയ്ക്കുന്നു. മറുപടി കാണാതായിട്ടില്ല, അത് ക്ലയന്റിന്റെ സ്വന്തം ഡിഫോൾട്ട് റൂട്ടിലൂടെ പുറത്തുപോകുന്നു, അതായത് സർവർ അത് ഒരിക്കലും കാണുന്നില്ല. ഈ അഞ്ച് പരിശോധനകൾ ക്രമത്തിൽ ചെയ്ത് ആദ്യം പിഴയ്ക്കുന്നിടത്ത് നിർത്തുക.
സർവർ ഒട്ടുമേ കൈമാറുമോ എന്ന് സ്ഥിരീകരിക്കുക
ഒരു വിവർത്തനം പോലും എഴുതുന്നതിന് മുൻപ് ഈ കളം ടിക്ക് ചെയ്യുക. കേർണൽ കൈമാറ്റം നിരസിക്കുന്ന പാക്കറ്റിനുള്ള DNAT നിയമം നിയമ പാഴ്സർ സ്വീകരിക്കുന്നു, പിന്നീട് ഫോർവേഡ് പാത അത് ഉപേക്ഷിക്കുന്നു, ഇത് ഫയർവാൾ പ്രശ്നം പോലെ തോന്നുന്ന ഒരു ടൈംഔട്ട് സൃഷ്ടിക്കുന്നു.
sysctl net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=1
പ്രവർത്തിക്കുന്ന കേർണലിൽ ഇത് സജ്ജമാക്കുന്നത് റീബൂട്ടിനിടയിൽ സജ്ജമാക്കുന്നതിന് തുല്യമല്ല. net.ipv4.ip_forward=1 എന്നത് /etc/sysctl.d/-ന് കീഴിലുള്ള ഒരു ഫയലിൽ എഴുതുക, sysctl --system പ്രവർത്തിപ്പിക്കുക, എന്നിട്ട് ഫയൽ എടുത്തുവെന്ന് വിശ്വസിക്കുന്നതിന് പകരം മൂല്യം വീണ്ടും വായിക്കുക. സ്വന്തം നെറ്റ്വർക്ക് നാമസ്ഥലം കൈകാര്യം ചെയ്യുന്ന ഒരു കണ്ടെയ്നറിന് ആ സ്ഥലത്തിനുള്ളിൽ അതേ മൂല്യം വേണം, ഹോസ്റ്റിൽ മാത്രമല്ല.
വീണ്ടും വായിക്കുമ്പോഴും പൂജ്യമാണെങ്കിൽ ഇവിടെ നിർത്തുക. താഴെ ഒന്നും പ്രവർത്തിക്കില്ല.
ഏതെങ്കിലും നിയമം അതിനെ പരാമർശിക്കുന്നതിന് മുൻപ് ടണൽ വിലാസം ഉറപ്പിക്കുക
പൂൾ കണക്ഷൻ ക്രമത്തിൽ വിലാസങ്ങൾ നൽകുന്നു, അതിനാൽ ഇന്നത്തെ ലീസിനായി എഴുതിയ ഒരു നിയമം അടുത്ത ആഴ്ച മറ്റൊരു ക്ലയന്റിലേക്ക് ശബ്ദമില്ലാതെ ചൂണ്ടാം. വിലാസം വരവിന്റെ ക്രമത്തിനല്ല, സർട്ടിഫിക്കറ്റിന്റെ ഐഡന്റിറ്റിയിലേക്ക് ബന്ധിക്കുക.
client-config-dir /etc/openvpn/ccd
ifconfig-push 10.77.0.14 10.77.0.13
ആ ജോടി പോയിന്റ്-ടു-പോയിന്റ് ടണലിന്റെ ക്ലയന്റ് അറ്റവും പിയർ അറ്റവുമാണ്, സർവർ സർട്ടിഫിക്കറ്റിന്റെ പൊതുനാമത്തിലാണ് കീ ചെയ്തിരിക്കുന്നത്. സബ്നെറ്റ് ടോപ്പോളജിയിൽ രണ്ടാമത്തെ മൂല്യം പകരം നെറ്റ്മാസ്കായി വായിക്കുന്നു, അതിനാൽ ഉപയോഗത്തിലുള്ള ടോപ്പോളജിയുമായി ഒത്തുപോകുന്ന രൂപം എഴുതുക. തുടർന്ന് ക്ലയന്റ് വീണ്ടും ബന്ധിപ്പിച്ച് വിലാസം ക്ലയന്റിൽ തന്നെ വായിക്കുക, കാരണം പൂളിനെക്കുറിച്ചുള്ള സർവറിന്റെ കാഴ്ച ക്ലയന്റ് എന്ത് കോൺഫിഗർ ചെയ്തു എന്നതിന് തെളിവല്ല.
വീണ്ടും ബന്ധിപ്പിച്ചതിന് ശേഷം വിലാസം മാറിയാൽ നിർത്തുക. ചലിക്കുന്ന ലക്ഷ്യത്തെ പിന്തുടരുന്ന NAT നിയമം ഇടയ്ക്കിടെ പരാജയപ്പെടും, നിങ്ങൾക്ക് ഒന്നും പഠിപ്പിക്കില്ല.
ഇരു ദിശകളിലും വിവർത്തനം ചെയ്യുക
ഡെസ്റ്റിനേഷൻ വിവർത്തനം വരുന്ന പാക്കറ്റ് ക്ലയന്റിലേക്ക് അയയ്ക്കുന്നു. സോഴ്സ് വിവർത്തനമാണ് ക്ലയന്റിനെ യഥാർത്ഥ അയച്ചയാളല്ല, സർവറിനോട് മറുപടി പറയാൻ പ്രേരിപ്പിക്കുന്നത്, അതാണ് ആളുകൾ വിട്ടുപോകുന്ന നിയമം.
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 29443 -j DNAT --to-destination 10.77.0.14:29443
iptables -t nat -A POSTROUTING -d 10.77.0.14 -p tcp --dport 29443 -j SNAT --to-source 10.77.0.13
രണ്ടാമത്തെ നിയമമില്ലാതെ ക്ലയന്റ് തന്റെ ISP അപ്ലിങ്കിലൂടെ മറുപടി നൽകുന്നു, അതിനാൽ വിദൂര പിയർ ഒരിക്കലും സംസാരിക്കാത്ത ഒരു സോഴ്സ് വിലാസം കാണുന്നു, അതേസമയം സർവറിന് മറുപടിക്കായി ഒരു ട്രാക്കിംഗ് എൻട്രിയുമില്ല. പുറത്തുള്ള നിരീക്ഷകൻ പകുതി പൂർത്തിയാകുന്ന ഒരു ഹാൻഡ്ഷേക്ക് കാണുന്നു, അതാണ് ഇല്ലാത്ത ഒരു ഫയർവാൾ ബഗ് തേടാൻ ആളുകളെ അയയ്ക്കുന്ന ലക്ഷണം.
iptables -t nat -S ഉപയോഗിച്ച് രണ്ട് നിയമങ്ങളും വീണ്ടും വായിക്കുക, ഇന്റർഫേസിന്റെ പേര് പൊതു വിലാസം വഹിക്കുന്നതാണോ എന്ന് സ്ഥിരീകരിക്കുക. ഇപ്പോൾ തന്നെ nftables ഉപയോഗിച്ച് ഫിൽട്ടർ ചെയ്യുന്ന ഹോസ്റ്റിൽ ഉപകരണങ്ങൾ കലർത്തുന്നതിന് പകരം യോജിക്കുന്ന വിലാസ കുടുംബത്തിന്റെ nftables NAT ചെയിനിൽ വിവർത്തനം എഴുതുക.
ഫിൽട്ടർ പട്ടിക കടന്നുപോകാൻ അനുവദിക്കുക
NAT പട്ടികകൾ ഹെഡറുകൾ വീണ്ടും എഴുതുന്നു, അവ അനുമതി നൽകുന്നില്ല. ഡിഫോൾട്ട് DROP നയത്തിൽ ഫോർവേഡ് ചെയ്യപ്പെടുന്ന ഫ്ലോയ്ക്ക് സ്വന്തം അനുമതി വേണം, കൂടാതെ മടങ്ങിവരുന്ന ദിശ മിക്ക നയങ്ങളും ഇതിനകം established,related നിയമം കൊണ്ട് മൂടുന്നു.
iptables -A FORWARD -i eth0 -o tun0 -p tcp --dport 29443 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
എന്തെങ്കിലും ചേർക്കുന്നതിന് മുൻപ് FORWARD ചെയിനിന്റെ നയം പരിശോധിക്കുക, കാരണം നേരത്തെയുള്ള DROP ന്റെ ക്രമം നിങ്ങളുടെ നിയമം ഒട്ടും പരിഗണിക്കപ്പെടുമോ എന്ന് തീരുമാനിക്കുന്നു. ഫിൽട്ടറിംഗ് nftables-ൽ കഴിയുന്ന ഹോസ്റ്റിൽ, തുല്യമായ നിയമം inet പട്ടികയുടെ forward ഹൂക്കിലേക്ക് ചേർത്ത്, അടിസ്ഥാന ചെയിൻ പ്രാദേശിക ഇൻപുട്ട് മാത്രമല്ല, യഥാർത്ഥത്തിൽ ഫോർവേഡ് ചെയ്യപ്പെടുന്ന ട്രാഫിക്ക് കാണുന്നുണ്ടെന്ന് സ്ഥിരീകരിക്കുക. പുതിയ നിയമത്തിലെ പാക്കറ്റ് കൗണ്ടർ പൂജ്യത്തിൽ നിൽക്കുമ്പോൾ NAT കൗണ്ടറുകൾ ഉയരുകയാണെങ്കിൽ, പാക്കറ്റ് നിങ്ങളുടെ നിയമത്തിന് മുൻപേ ഉപേക്ഷിക്കപ്പെടുന്നു. അത് ചെയിനുകളുടെ ക്രമം വായിക്കാനുള്ള സൂചനയാണ്, അതേ നിയമത്തിന്റെ രണ്ടാം പകർപ്പ് ചേർക്കാനല്ല.
പുറത്തുള്ള നെറ്റ്വർക്കിൽ നിന്ന് ഇത് തെളിയിക്കുക
ബന്ധമില്ലാത്ത ഒരു നെറ്റ്വർക്കിൽ നിന്ന് പരീക്ഷിക്കുക. അതേ LAN-ലുള്ള മറ്റൊരു മെഷീനിൽ നിന്നുള്ള പരിശോധന hairpin NAT പിന്തുണയിലൂടെ കടന്നുപോകാം, വിദൂര ക്ലയന്റ് ഉപയോഗിക്കുന്ന പാത ഒരിക്കലും അഭ്യസിക്കുന്നുമില്ല, അതിനാൽ അവിടത്തെ പച്ചഫലം തെറ്റായ കാര്യം തെളിയിക്കുന്നു.
tcpdump -ni any port 29443
conntrack -L | grep 29443
സർവറിലും ക്ലയന്റിലും ഒരേ സമയം ക്യാപ്ചർ പ്രവർത്തിപ്പിക്കുക. സർവറിലെ ക്യാപ്ചർ വിവർത്തനം ചെയ്ത പാക്കറ്റ് ടണലിലേക്ക് പുറപ്പെടുന്നുണ്ടോ എന്ന് കാണിക്കുന്നു; ക്ലയന്റിലെ ക്യാപ്ചർ അഭ്യർത്ഥന എത്തുന്നുണ്ടോ, മറുപടി എവിടേക്കാണ് അഡ്രസ് ചെയ്തിരിക്കുന്നത് എന്ന് കാണിക്കുന്നു. conntrack -L-ലെ വിവർത്തന എൻട്രി നിയമം ഒത്തുപോയി എന്ന് തെളിയിക്കുന്നു, അതിന്റെ അഭാവം പാക്കറ്റ് ഒരിക്കലും NAT ചെയിനിൽ എത്തിയില്ല എന്ന് തെളിയിക്കുന്നു.
പോർട്ട് സ്കാനറുകൾ ദുർബലമായ തെളിവാണ്. ആപ്ലിക്കേഷൻ ബൈൻഡ് ചെയ്ത് കേൾക്കുന്നതുവരെ അവർ പോർട്ട് അടച്ചതായി റിപ്പോർട്ട് ചെയ്യുന്നു, അതിനാൽ യഥാർത്ഥ സേവനത്തിലേക്ക് യഥാർത്ഥ കണക്ഷൻ ഉപയോഗിക്കുക. ഒടുവിൽ പ്രവർത്തിക്കുമ്പോൾ, എക്സ്പോഷർ ആ ഒരു പോർട്ടിൽ മാത്രം നിർത്തുക: ആദ്യ നിയമം മുഴച്ചിലായി തോന്നിയതിനാൽ SSH അല്ലെങ്കിൽ അഡ്മിൻ പാനൽ കൈമാറുന്നത് ഒരു സേവനം പ്രസിദ്ധീകരിക്കുന്നതിനെക്കാൾ വലിയ തീരുമാനമാണ്.