സെർവറിന്റെ IP മാറിയതിനു ശേഷവും SNAT നിയമം പഴയതിനെ തന്നെ പേരിടുന്നു
ടണൽ കണക്ട് ചെയ്യാം, പക്ഷേ ഫോർവേഡ് ചെയ്യുന്ന ഓരോ പാക്കറ്റും നിന്നുപോകുന്നു, കാരണം വിവർത്തന നിയമം ഇപ്പോഴും ഹോസ്റ്റിന് ഇല്ലാത്ത വിലാസത്തിലേക്ക് വീണ്ടും എഴുതുന്നു.
സെർവർ പുതിയ വിലാസത്തിലേക്ക് മാറി, ക്ലയന്റുകൾ ഇപ്പോഴും കണക്ട് ചെയ്യുന്നു, അവർ അയക്കുന്നതിൽ ഒന്നും ഇന്റർനെറ്റിൽ എത്തുന്നില്ല. ആ വിഭജനമാണ് സൂചന: കേൾക്കുന്ന സോക്കറ്റും പോർട്ട് ഫോർവേഡിംഗും മാറ്റത്തെ അതിജീവിച്ചു, അതിനാൽ ടണൽ ഉയരുന്നു, എന്നാൽ ഫോർവേഡ് ചെയ്ത പാക്കറ്റുകൾക്ക് പ്രയോഗിക്കുന്ന ഉറവിട വിവർത്തനം ഇപ്പോഴും ഹോസ്റ്റിന് ഇല്ലാത്ത വിലാസത്തെ പേരിടുന്നു. വീണ്ടും എഴുതിയ ആ പാക്കറ്റുകൾക്കുള്ള മറുപടികൾ ഇനി ഇല്ലാത്ത ഒരു യന്ത്രത്തിലേക്ക് പോകുന്നു.
കണക്ഷനും ഫോർവേഡിംഗും വ്യത്യസ്ത ഇടങ്ങളിൽ പരാജയപ്പെടുന്നു
സ്ഥാപനം ക്ലയന്റുകൾക്ക് ഇതിനകം അറിയാവുന്ന അന്ത്യബിന്ദുവിനെ ആശ്രയിച്ചിരിക്കുന്നു: പൊതു വിലാസം, അതിനു മുന്നിലുള്ള പോർട്ട് ഫോർവേഡിംഗ്, അകത്തുള്ള ശ്രോതാവ്. ഫോർവേഡ് ചെയ്ത ട്രാഫിക് പാക്കറ്റ് ടണലിൽ പ്രവേശിച്ചതിനു ശേഷം എടുക്കുന്ന രണ്ടാം തീരുമാനത്തെ ആശ്രയിച്ചിരിക്കുന്നു, അപ്പോൾ ഹോസ്റ്റ് തന്റെ ഉറവിടം വീണ്ടും എഴുതുന്നു, മറുപടികൾക്ക് തിരികെയുള്ള വഴി കണ്ടെത്താൻ.
വിലാസ മാറ്റം രണ്ടാം തീരുമാനത്തെ മാത്രം തകർക്കുന്നു, അതുകൊണ്ടാണ് ലക്ഷണം "കണക്ട് ചെയ്തു, പക്ഷേ ഇന്റർനെറ്റ് ഇല്ല" എന്ന് വായിക്കുന്നത്. ക്ലയന്റ് വശത്തെ സാധാരണ പരിശോധനകൾ ആരോഗ്യകരമായി കാണപ്പെടുന്നതിന്റെ കാരണവും ഇതാണ്: ഹാൻഡ്ഷേക്ക് പൂർത്തിയാകുന്നു, ക്ലയന്റിന് വിലാസം ലഭിക്കുന്നു, സെർവറിന്റെ ടണൽ വിലാസത്തിലേക്കുള്ള ping പോലും മറുപടി നൽകിയേക്കാം. മറുവശത്ത് ജീവിക്കുന്ന ഒരു തകരാറിനായി ക്ലയന്റിൽ മണിക്കൂറുകൾ നഷ്ടപ്പെടുന്നു, അതുകൊണ്ടാണ് നിയമപ്പട്ടിക ആദ്യം നോക്കേണ്ട സ്ഥലം.
തിരുത്തുന്നതിന് മുൻപ് നിയമവും അതിന്റെ കൗണ്ടറുകളും വായിക്കുക
കൗണ്ടറുകളോടെ വിവർത്തന നിയമങ്ങൾ ലിസ്റ്റ് ചെയ്ത്, കോൺഫിഗർ ചെയ്ത ഉറവിടത്തെ ഹോസ്റ്റിന് യഥാർത്ഥത്തിൽ ഉള്ള വിലാസങ്ങളുമായി താരതമ്യം ചെയ്യുക. മരിച്ച വിലാസത്തിലേക്ക് വീണ്ടും എഴുതിയ നിയമം സാധാരണയായി അകത്തേക്കുള്ള വഴിയിൽ ട്രാഫിക് കാണിക്കുന്നു, കാരണം പാക്കറ്റുകൾ അതിൽ എത്തി വിവർത്തനം ചെയ്യപ്പെടുന്നു, തിരികെയുള്ള വഴിയിൽ ഒന്നുമില്ല.
sudo iptables -t nat -L POSTROUTING -n -v --line-numbers
ip -4 addr show
അവിടെ ഉള്ളപ്പോൾ മൂന്ന് ഫീൽഡുകൾ പരിശോധിക്കുക: ഉറവിട പൊരുത്തത്തിലെ പൂൾ, നിയമം ഒന്നിനെ പേരിട്ടാൽ എക്സിറ്റ് ഇന്റർഫേസ്, ടണലുകൾക്കിടയിലുള്ള ട്രാഫിക് വീണ്ടും എഴുതുന്നത് തടയുന്ന ഒഴിവാക്കൽ. ആ ഒഴിവാക്കൽ തിരുത്തുമ്പോൾ നഷ്ടപ്പെടാൻ എളുപ്പമാണ്, അത് നഷ്ടപ്പെട്ടാൽ സഹപ്രവർത്തകർക്കിടയിലുള്ള ട്രാഫിക് പ്രവർത്തിക്കുന്നതായി തോന്നും, പക്ഷേ അതിന്റെ മറുപടികൾ വിചിത്രമായ വഴി സ്വീകരിക്കുന്നു.
കൗണ്ടറുകൾ പൂജ്യത്തിൽ നിൽക്കുകയാണെങ്കിൽ, പാക്കറ്റുകൾ ഒരിക്കലും ഈ നിയമത്തിൽ എത്തുന്നില്ല, വിലാസമല്ല ഇപ്പോഴത്തെ പ്രശ്നം. ചങ്ങലയിൽ മുൻപുള്ള മത്സര നിയമം തിരയുക, ആരെങ്കിലും യഥാർത്ഥം തിരുത്തുന്നതിനു പകരം പകരം ചേർക്കുമ്പോൾ ഇത് സംഭവിക്കുന്നു. ഒരു മിനിറ്റ് മുൻപ് എഴുതിയ ഔട്ട്പുട്ടുമായി നിയമ നമ്പറുകൾ താരതമ്യം ചെയ്യുക. ക്രമം കോൺഫിഗറേഷന്റെ ഭാഗമാണ്, അലങ്കാര വിശദാംശമല്ല.
ഉറവിടം മാറ്റുക, അല്ലെങ്കിൽ ഒന്നിനെ പേരിടുന്നത് നിർത്തുക
ഹോസ്റ്റിന് സ്ഥിരമായ വിലാസമുണ്ടെങ്കിൽ, മറ്റൊന്ന് ചേർക്കുന്നതിനു പകരം നിയമം അതിന്റെ സ്ഥാനത്ത് മാറ്റുക. നിയമ നമ്പർ അനുസരിച്ചുള്ള മാറ്റം ചങ്ങലയുടെ ബാക്കി ഭാഗം ആശ്രയിക്കുന്ന ക്രമം നിലനിർത്തുന്നു.
sudo iptables -t nat -R POSTROUTING 1 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to-source 10.151.0.40
വിലാസം ചലനാത്മകമായി നൽകുമ്പോൾ, ഒരു ഉറവിടവും പേരിടരുത്, കേർണലിനെ എക്സിറ്റ് ഇന്റർഫേസിൽ നിന്ന് നിലവിലുള്ളത് തിരഞ്ഞെടുക്കാൻ അനുവദിക്കുക. ആ രൂപം അടുത്ത മാറ്റത്തെ തിരുത്തലില്ലാതെ അതിജീവിക്കുന്നു, ഏത് വിലാസം ഉപയോഗിച്ചു എന്നത് മറയ്ക്കുന്ന വിലയ്ക്ക്.
sudo iptables -t nat -R POSTROUTING 1 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -o eth0 -j MASQUERADE
IPv4 ഫോർവേഡിംഗ് മാനേജ്ഡ് കോൺഫിഗറേഷനിലൂടെ ഇപ്പോഴും സജീവമാണെന്ന് ഉറപ്പാക്കുക, പിന്നീട് വിതരണത്തിന്റെ സ്വന്തം സംവിധാനത്താൽ നിയമം സ്ഥിരമാക്കുക. പ്രവർത്തിക്കുന്ന കേർണലിൽ മാത്രം ചെയ്ത മാറ്റം അടുത്ത റീബൂട്ടിൽ തിരികെ വരുന്നു, സാധാരണയായി ആരും മാറ്റവുമായി ബന്ധിപ്പിക്കാത്ത ഒരു അറ്റകുറ്റപ്പണി ജാലകത്തിൽ.
പകരം വയ്ക്കൽ തെറ്റായി ചെയ്യാനുള്ള രണ്ട് വഴികൾ
പൂളിനെ സെർവറിന്റെ LAN വിലാസത്തിനു പകരം അതിന്റെ ടണൽ വിലാസത്തിലേക്ക് വിവർത്തനം ചെയ്താൽ മറുപടികൾ നേരെ ടണലിലേക്ക് തിരികെ പോകുന്നു, അവിടെ അവ ഒരിക്കലും ആവശ്യപ്പെടാത്ത ക്ലയന്റിലേക്ക് റൂട്ട് ചെയ്യപ്പെടുന്നു. കണക്ഷൻ ഒരു റൂട്ടിംഗ് ലൂപ്പ് പോലെ നിന്നുപോകുന്നു, കാരണം അത് യഥാർത്ഥത്തിൽ ലൂപ്പാണ്.
പഴയതിന് മുകളിൽ രണ്ടാം വിവർത്തനം അടുക്കിവയ്ക്കുന്നതാണ് മറ്റൊരു തെറ്റ്. ആദ്യം പൊരുത്തപ്പെടുന്ന നിയമം വിജയിക്കുന്നു, അതിനാൽ പഴയ എൻട്രി ഇല്ലാതാക്കുന്നതുവരെ പാക്കറ്റുകൾ കൈകാര്യം ചെയ്യുന്നു, പുതിയ നിയമത്തിന്റെ കൗണ്ടറുകൾ പൂജ്യത്തിൽ തന്നെ നിൽക്കുന്നു, എല്ലാവരും പകരം വയ്ക്കലിനെ കുറ്റപ്പെടുത്തുമ്പോൾ. പുതിയത് ചേർക്കുന്നതിന് മുൻപ് തനിപ്പകർപ്പ് ഇല്ലാതാക്കുക. പിന്നീട് പട്ടിക ഒരിക്കൽ കൂടി വായിച്ച്, പൂളുമായി കൃത്യം ഒരു വിവർത്തനം മാത്രം പൊരുത്തപ്പെടുന്നു എന്ന് ഉറപ്പാക്കുക.
ടണൽ IPv6 ഉം വഹിക്കുന്നുവെങ്കിൽ, മുഴുവൻ അവലോകനവും മറ്റേ സ്റ്റാക്കിൽ ആവർത്തിക്കുക. വിവർത്തനവും റൂട്ട് ചെയ്ത പ്രിഫിക്സും ഇല്ലാത്ത IPv6 ഡിഫോൾട്ട് റൂട്ട് അത്രമാത്രം നിശബ്ദമായി പരാജയപ്പെടുന്നു, അതിന് മുകളിലുള്ളതെല്ലാം ഒരുപോലെ കാണപ്പെടുന്നതിനാൽ അത് മറക്കാൻ എളുപ്പമാണ്.
ഇൻബൗണ്ട് സേവനങ്ങൾക്ക് വിപരീത വിവർത്തനം വേണം
VPN ക്ലയന്റിലുള്ള ഒരു സേവനം പുറത്തുനിന്ന് എത്തിച്ചേരാവുന്നതായിരിക്കണമെങ്കിൽ അതിന് ലക്ഷ്യസ്ഥാന വിവർത്തനം വേണം, ഉറവിട വിവർത്തനമല്ല: പൊതു പോർട്ട് അകത്തേക്ക് വരുന്നതിന് മുൻപ് ക്ലയന്റിന്റെ ടണൽ വിലാസത്തിലേക്ക് വീണ്ടും എഴുതുന്നു. പിന്നീട് ഫോർവേഡ് പാതയ്ക്ക് ആ ട്രാഫിക് അനുവദിക്കുന്ന വ്യക്തമായ നിയമം വേണം.
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.9.8.2:8080
ടണൽ സ്വയം വഹിക്കുന്ന പോർട്ട് ഒരിക്കലും വിവർത്തനം ചെയ്യരുത്, കാരണം ആ വീണ്ടും എഴുത്ത് സേവനത്തെ എത്തിച്ചേരാവുന്നതായി നിലനിർത്തുന്ന കണക്ഷൻ മുറിക്കുന്നു. ടണൽ പോർട്ട് ലക്ഷ്യ നിയമങ്ങളിൽ നിന്ന് പൂർണ്ണമായി പുറത്ത് നിർത്തുക. അവസാനം ഇരു അറ്റങ്ങളിൽ നിന്നും പരിശോധിക്കുക: പുതിയ നിയമത്തിൽ കൗണ്ടറുകൾ, ടണൽ ഉപകരണത്തിൽ ഒരു ചെറിയ ക്യാപ്ചർ, പൊതുവായത് പരീക്ഷിക്കുന്നതിന് മുൻപ് ടണലിനുള്ളിലെ വിലാസത്തിലേക്ക് ഒരു അഭ്യർത്ഥന.