ഒരു VPN ക്ലയന്റ് പൂളിന് സ്വന്തം പൊതു വിലാസം നൽകേണ്ടിയിരുന്ന NAT നിയമം പൂജ്യം പാക്കറ്റിൽ നിൽക്കുന്നു, അതേ പൂൾ തെറ്റായ ഉറവിടവുമായി പുറത്തേക്ക് പോകുന്നു. നിയമം സാധാരണയായി വിലാസത്തിൽ തെറ്റാകുന്നില്ല; ഇന്റർഫേസിലാണ് തെറ്റാകുന്നത്. -o eth0:0 നിലവിലില്ലാത്ത ഒരു ഉപകരണത്തെ സൂചിപ്പിക്കുന്നു, കാരണം eth0:0 വിലാസത്തിൽ ഘടിപ്പിച്ച ലേബലാണ്, ആ വിലാസത്തിന്റെ ഉപകരണം eth0 ആണ്. കൗണ്ടറുകൾ നോക്കുന്നതാണ് ഇത് സ്ഥിരീകരിക്കാനുള്ള വേഗതയേറിയ വഴി, തിരുത്തൽ അന്വേഷണം സൂചിപ്പിക്കുന്നതിനേക്കാൾ ചെറുതാണ്.

കെർണൽ ഉപകരണത്തെ എന്ത് വിളിക്കുന്നു എന്ന് പരിശോധിക്കുക

എന്തെങ്കിലും മാറ്റുന്നതിന് മുമ്പ് രണ്ട് കാഴ്ചകളും വെവ്വേറെ വായിക്കുക:

ip link show
ip address show dev eth0
ip route get 203.0.113.20

ലിങ്ക് പട്ടിക ഇന്റർഫേസുകൾ കാണിക്കുന്നു. വിലാസ പട്ടിക ലേബൽ വഹിക്കുന്ന രണ്ടാമത്തെ IPv4 വിലാസം കാണിച്ചേക്കാം eth0:0, ആ വിലാസത്തിന്റെ ഉപകരണം ഇപ്പോഴും eth0 ആണ്. iproute2 വിലാസ കൈപ്പുസ്തകം ലേബലിനെ വിലാസത്തിന്റെ പേരായി കണക്കാക്കുന്നു, രണ്ടാമത്തെ ലിങ്കായി അല്ല, ഈ വ്യത്യാസത്തിലാണ് മുഴുവൻ പ്രശ്നവും നിൽക്കുന്നത്.

ചരിത്രം ആശയക്കുഴപ്പം വിശദീകരിക്കുന്നു. പഴയ ifconfig eth0:0 വാക്യഘടന യഥാർത്ഥത്തിൽ പുതിയ ഇന്റർഫേസ് പോലെ തോന്നി, ആ കാലത്തെ സ്ക്രിപ്റ്റുകൾ ഇപ്പോഴും ഒന്നിനെ സൂചിപ്പിക്കുന്നു. ഇന്നത്തെ സിസ്റ്റത്തിൽ അലിയാസ് വിലാസത്തിന് മേലുള്ള ഒരു ലേബലാണ്, റൗട്ടിംഗിലോ netfilter പാതയിലോ ഒന്നും അതിനെ പ്രത്യേക എക്സിറ്റ് പോയിന്റായി കണക്കാക്കുന്നില്ല.

നിയമം യഥാർത്ഥത്തിൽ എന്തിനോട് പൊരുത്തപ്പെട്ടു എന്ന് പരിശോധിക്കുക

കൗണ്ടറുകൾ ഓർമ്മയിൽ നിന്നല്ല, നിയമപ്പട്ടികയോടൊപ്പം വായിക്കുക:

iptables -t nat -L POSTROUTING -v -n --line-numbers

പൊരുത്തപ്പെടുന്ന ട്രാഫിക് ഒഴുകുമ്പോൾ പാക്കറ്റ് കൗണ്ടർ പൂജ്യത്തിൽ നിൽക്കുന്ന നിയമം വിലയിരുത്തപ്പെടുന്നില്ല, ഇനിപ്പറയുന്നതിനെ പേരിടുന്ന ഔട്ട്പുട്ട്-ഇന്റർഫേസ് വ്യവസ്ഥ eth0:0 സാധാരണ കാരണമാണ്. റൂട്ട് തിരഞ്ഞെടുത്ത ഔട്ട്പുട്ട് ഉപകരണം eth0, അതിനാൽ മറ്റൊരു പേര് തിരയുന്ന വ്യവസ്ഥ കെർണൽ ഏത് ഉറവിട വിലാസം തിരഞ്ഞെടുത്താലും ഒരിക്കലും ശരിയാകുന്നില്ല.

വ്യവസ്ഥ യഥാർത്ഥ ഉപകരണത്തിലേക്ക് മാറ്റുക, ലേബൽ അതിന് പുറത്ത് വയ്ക്കുക. ആ ഉപകരണം പങ്കിടുന്ന രണ്ട് ക്ലയന്റ് പൂളുകളെ വേർതിരിക്കേണ്ടതുണ്ടെങ്കിൽ, ഉറവിട പ്രിഫിക്സ് കൊണ്ട് വേർതിരിക്കുക, നിലനിൽക്കാൻ കഴിയാത്ത ഇന്റർഫേസ് പേര് കൊണ്ടല്ല. ഓവർലാപ്പ് ചെയ്യാത്ത -s പൊരുത്തങ്ങളുള്ള രണ്ട് നിയമങ്ങൾ വായിക്കാനും പരിശോധിക്കാനും കഴിയും; സാങ്കൽപ്പിക ഉപകരണമുള്ള ഒരു നിയമം രണ്ടുമല്ല. ഓരോ നിയമത്തിനും പൂളിനെ പേരിടുന്ന ഒരു കുറിപ്പ് ചേർക്കുക, കാരണം ആറ് മാസം കഴിഞ്ഞ് പ്രിഫിക്സ് മാത്രം എന്തിനാണ് അത് അവിടെ ഉള്ളതെന്ന് ആരോടും പറയില്ല.

ഉപകരണം തിരഞ്ഞെടുത്ത റൂട്ട് പരിശോധിക്കുക

Postrouting NAT റൂട്ട് ഇതിനകം ഔട്ട്പുട്ട് ഇന്റർഫേസ് തിരഞ്ഞെടുത്തതിന് ശേഷമാണ് പ്രവർത്തിക്കുന്നത്, അതിനാൽ നിയമത്തിലെ ഇന്റർഫേസ് റൂട്ട് തിരഞ്ഞെടുത്തത് തന്നെയായിരിക്കണം. കെർണലിനോട് നേരിട്ട് ചോദിക്കുക ip route get ഉപയോഗിച്ച് പ്രതിനിധി ക്ലയന്റ് വിലാസത്തിനായി, അത് റിപ്പോർട്ട് ചെയ്യുന്ന ഉപകരണവും ഉറവിടവും രണ്ടും വായിക്കുക.

ഉത്തരം eth0 എന്ന് പേരിട്ടാൽ, നിയമത്തിന്റെ ഇന്റർഫേസ് ഭാഗം തീർച്ചയായി. അത് ടണൽ ഉപകരണത്തെ പേരിട്ടാൽ, നിങ്ങൾ തിരുത്തുന്ന നിയമത്തിൽ പാക്കറ്റ് ഒരിക്കലും എത്തുന്നില്ല, തിരയൽ റൗട്ടിംഗ് പട്ടികയിലേക്കും അതിന്റെ മുൻഗണനകളിലേക്കും നീങ്ങുന്നു. പാക്കറ്റ് മറ്റെവിടെയോ നിന്ന് പുറത്തുപോയതിനാൽ ഒരിക്കലും പൊരുത്തപ്പെടാത്ത നിയമം കൗണ്ടർ ഔട്ട്പുട്ടിൽ തെറ്റായി എഴുതിയ ഉപകരണമുള്ള നിയമത്തെപ്പോലെ തന്നെ കാണപ്പെടുന്നു. എന്തെങ്കിലും തിരുത്തുന്നതിന് മുമ്പ് രണ്ടിൽ ഏത് സാഹചര്യമാണെന്ന് സ്ഥിരീകരിക്കുക, കാരണം രണ്ടാമത്തേതിന് ടെക്സ്റ്റല്ല, റൗട്ടിംഗ് മാറ്റം വേണം.

വിവർത്തനം ചെയ്ത ഉറവിടം ബോധപൂർവം തിരഞ്ഞെടുക്കുക

ഉപകരണം ശരിയായാൽ, ഉറവിട വിലാസം വേറെ തീരുമാനമാണ്. ഇത് വെറും ദൃഷ്ടാന്ത IPv4 പൂളും മാതൃകാ വിലാസവും മാത്രമാണ്:

iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -o eth0 \
  -j SNAT --to-source 203.0.113.20

വിലാസം --to-source എന്നതിൽ എഴുതുന്നത് ആരും അത് നിങ്ങളിലേക്ക് തിരികെ റൂട്ട് ചെയ്യാൻ കാരണമാകുന്നില്ല. അപ്സ്ട്രീം ദാതാവോ വിലാസ ഉടമയോ ആ വിലാസത്തിനുള്ള മറുപടികൾ ഈ ഹോസ്റ്റിലേക്ക് എത്തിക്കണം, വിലാസം നിങ്ങൾക്ക് ഉപയോഗിക്കാൻ അധികാരമുള്ളതായിരിക്കണം. അല്ലെങ്കിൽ, നിയമം പൊരുത്തപ്പെട്ട് വിവർത്തനം ചെയ്യും, മറുപടികൾ എന്നിട്ടും മറ്റൊരിടത്തേക്ക് പോകും.

ഉറവിട വിലാസം മാറ്റുന്നത് അപ്ലിങ്ക് മാറ്റുന്നതിന് തുല്യമല്ല. യഥാർത്ഥ ആവശ്യം മറ്റൊരു ഭൗതിക പാതയാണെങ്കിൽ, റൗട്ടിംഗ് നയം ആദ്യം ആ പാത തിരഞ്ഞെടുക്കണം; തുടർന്ന് SNAT നയം തിരഞ്ഞെടുത്ത ഉപകരണത്തിൽ ഉറവിടം വീണ്ടും എഴുതുന്നു. കൂടുതൽ ലേബലുകൾ eth0 ചേർക്കുന്നത് പാതയോ അനുമതിയോ നൽകുന്നില്ല.

ഇപ്പോൾ തുറന്ന കണക്ഷൻ ഉപയോഗിച്ച് പരിശോധിക്കുക

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

ഒരു ഇന്റർഫേസ് പങ്കിടുന്ന പല പൂളുകൾക്കും ഓരോന്നിനും വ്യക്തമായ ഉറവിട പൊരുത്തവും സ്വന്തം വിവർത്തന വിലാസവും നൽകുക, അവ ഫയർവാളിന്റെ കൈകാര്യം ചെയ്യുന്ന കോൺഫിഗറേഷനിൽ സൂക്ഷിക്കുക, ഏത് ക്രമത്തിൽ വിലയിരുത്തപ്പെടുന്നു എന്ന് കുറിക്കുക. പിന്നീട് നിങ്ങൾ പരിശോധിച്ചത് രേഖപ്പെടുത്തുക: ip route get ൽ നിന്നുള്ള ഉപകരണം, ചലിച്ച കൗണ്ടർ, വിദൂര വശം കണ്ട ഉറവിടം. ആ രേഖ ലേബൽ ആശയക്കുഴപ്പം ആവർത്തിക്കാതെ അടുത്ത റിപ്പോർട്ടിന് ഉത്തരം നൽകുന്നു.

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