ഒരു ബ്രൗസർ https://203.0.113.10:8443 അഭ്യർത്ഥിക്കുന്നു, പ്രോക്സി കണക്ഷൻ സ്വീകരിക്കുന്നു, WireGuard പീറിലെ സേവനം ഒരിക്കലും മറുപടി നൽകുന്നില്ല. DNAT നിയമം തന്റെ ജോലി ചെയ്യുന്നു; പരാജയപ്പെടുന്ന ഭാഗം മറുപടിയാണ്. പാക്കറ്റ് രണ്ട് വിവർത്തനങ്ങളിലൂടെയും പിന്തുടരുക, കാണാത്ത നിയമം വ്യക്തമാകും. പരിഹാരം ശരിയായ ഹൂക്കിലെ ഒരു അധിക NAT പ്രസ്താവനയാണ്, പുതിയ ടണലല്ല.

ഒരു അഭ്യർത്ഥന ആദ്യം മുതൽ അവസാനം വരെ പിന്തുടരുക

അഭ്യർത്ഥന പ്രോക്സിയുടെ പൊതു ഇന്റർഫേസിൽ എത്തുന്നു, ഉറവിടം ക്ലയന്റിന്റെ പൊതു വിലാസവും ലക്ഷ്യം പ്രോക്സിയുടെ വിലാസവുമാണ്. nat PREROUTING-ൽ DNAT നിയമം ലക്ഷ്യം പീറിന്റെ ടണൽ വിലാസമായ 10.90.0.2 ലേക്ക് വീണ്ടും എഴുതുന്നു. തുടർന്ന് റൂട്ടിംഗ് തീരുമാനം പാക്കറ്റ് wg0 വഴി പുറത്തേക്ക് അയയ്ക്കുന്നു, ഫോർവേഡ് പാത പൂർത്തിയാകുന്നു.

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

അസമമിതിയാണ് മുഴുവൻ പ്രശ്നം: അഭ്യർത്ഥന പ്രോക്സിയിലൂടെ പോകുന്നു, മറുപടി നേരിട്ട് പോകാൻ ശ്രമിക്കുന്നു. പ്രോക്സിയുടെ കണക്ഷൻ ട്രാക്കിംഗ് മറുപടി പ്രോക്സിയിലൂടെ തിരികെ വരുമ്പോൾ മാത്രം സഹായിക്കുന്നു, ഉറവിട വിലാസം ഇപ്പോഴും യഥാർത്ഥ ക്ലയന്റിലേക്ക് ചൂണ്ടിക്കൊണ്ടിരിക്കുമ്പോൾ അതിന് അവിടേക്ക് തിരികെ വരാനാവില്ല.

തിരിച്ചുള്ള വിവർത്തനം ചേർക്കുക

ഫോർവേഡ് ചെയ്യുന്ന പ്രവാഹത്തിന്റെ ഉറവിടം പീറിലേക്ക് പോകുന്നതിന് മുമ്പ് പ്രോക്സിയുടെ ടണൽ വിലാസത്തിലേക്ക് വീണ്ടും എഴുതുക. തുടർന്ന് സേവനം 10.90.0.1 ലേക്ക് മറുപടി നൽകുന്നു, പ്രോക്സി അത് സ്വീകരിക്കുന്നു, പാക്കറ്റ് ക്ലയന്റിലേക്ക് തിരികെ പോകുന്നതിന് മുമ്പ് കണക്ഷൻ ട്രാക്കിംഗ് രണ്ട് വിവർത്തനങ്ങളും തലതിരിച്ച് മാറ്റുന്നു.

iptables -t nat -A PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
iptables -t nat -A POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1

POSTROUTING നിയമം ബോധപൂർവം ഇടുങ്ങിയതാണ്: അത് വിവർത്തനം ചെയ്ത ലക്ഷ്യത്തോടും ടണൽ ഇന്റർഫേസിനോടും യോജിക്കുന്നു, അതിനാൽ wg0 വഴി യാദൃച്ഛികമായി പുറപ്പെടുന്ന അസംബന്ധ ട്രാഫിക്ക് വീണ്ടും എഴുതുന്നില്ല. വിശാലമായ masquerade നിയമം ക്ലയന്റിന്റെ വിലാസവും മറയ്ക്കുമായിരുന്നു, പക്ഷേ അത് ഓരോ പ്രവാഹത്തിനും ചെയ്യുകയും NAT പട്ടിക പരിശോധിക്കാൻ ബുദ്ധിമുട്ടാക്കുകയും ചെയ്യുമായിരുന്നു.

ടണൽ ഉള്ളിടത്ത് നിയമങ്ങൾ വയ്ക്കുക

ടണലിന്റെ വിലാസത്തെയോ ഇന്റർഫേസിനെയോ പരാമർശിക്കുന്ന നിയമങ്ങൾ wg-quick അത് കോൺഫിഗർ ചെയ്തതിന് ശേഷം പ്രവർത്തിക്കണം. ഇന്റർഫേസ് PreUp-ന് മുമ്പ് സൃഷ്ടിക്കപ്പെടുന്നു, പക്ഷേ വിലാസങ്ങൾ, MTU, DNS, റൂട്ടുകൾ എന്നിവ പിന്നീട് പ്രയോഗിക്കുന്നു, അവയെല്ലാം സ്ഥാനത്തായാൽ PostUp പ്രവർത്തിക്കുന്നു. കൂട്ടിച്ചേർക്കലുകൾ PostUp-ലും നീക്കലുകൾ PreDown-ലും വയ്ക്കുക.

PostUp = iptables -t nat -A PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
PostUp = iptables -t nat -A POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1
PreDown = iptables -t nat -D PREROUTING -p tcp -m multiport --dports 8080,8443 -j DNAT --to-destination 10.90.0.2
PreDown = iptables -t nat -D POSTROUTING -d 10.90.0.2 -o wg0 -p tcp -m multiport --dports 8080,8443 -j SNAT --to-source 10.90.0.1

നീക്കലുകൾ കൂട്ടിച്ചേർക്കലുകളുമായി ടോക്കൺ തോറും യോജിക്കണം, multiport, ഇന്റർഫേസ് പൊരുത്തങ്ങൾ ഉൾപ്പെടെ. ഒരു പൊരുത്തത്തിൽ വ്യത്യാസമുള്ള നീക്കൽ ഒന്നും നീക്കുന്നില്ല, അടുത്ത വീണ്ടും കണക്ഷൻ നിയമത്തിന്റെ രണ്ടാം പകർപ്പ് ചേർക്കുന്നു. കുറച്ച് വീണ്ടും കണക്ഷനുകൾക്ക് ശേഷം പട്ടികയിൽ കോൺഫിഗറേഷൻ വരിയുമായി ബന്ധിപ്പിക്കാൻ ബുദ്ധിമുട്ടുള്ള തനിപ്പകർപ്പുകൾ അവശേഷിക്കുന്നു.

ഫലം iptables -t nat -S ഉപയോഗിച്ച് വീണ്ടും കണക്ഷന് ശേഷം പരിശോധിക്കുക. അതേ നിയമം രണ്ടുതവണ കാണുന്നുവെങ്കിൽ PreDown വരി യോജിക്കുന്നില്ല, ക്ലീനപ്പ് നിശബ്ദമായി പരാജയപ്പെടുന്നു.

ഫോർവേഡിംഗ്, ഫിൽട്ടറിംഗ്, മറ്റേ NAT

IPv4 ഫോർവേഡിംഗ് സ്ഥിരമായി പ്രവർത്തനക്ഷമമാക്കുക, തുടർന്ന് ഫിൽട്ടർ പട്ടികയിൽ ഫോർവേഡ് ചെയ്യുന്ന പ്രവാഹത്തിന് അനുമതി നൽകുക. DNAT FORWARD ശൃംഖലയ്ക്ക് മുമ്പ് സംഭവിക്കുന്നു, അതിനാൽ ഫിൽട്ടർ നിയമം പൊതു വിലാസത്തോടല്ല, വിവർത്തനം ചെയ്ത ലക്ഷ്യത്തോട് യോജിക്കുന്നു. UFW ഫയർവാൾ കൈകാര്യം ചെയ്യുന്നുവെങ്കിൽ, അനുമതി ഒരു റൂട്ട് നിയമമായി പ്രകടിപ്പിക്കുക; സാധാരണ ഹോസ്റ്റ് നിയമം ഫോർവേഡ് ചെയ്യുന്ന ട്രാഫിക്ക് ഉൾക്കൊള്ളുന്നില്ല.

പ്രോക്സിയുടെ നിയമങ്ങൾ ശരിയാണെങ്കിലും മറ്റ് രണ്ട് NAT പാളികൾക്ക് പാത തകർക്കാനാകും. വീട്ടിലെ കണക്ഷനിൽ പൊതു വിലാസം റൗട്ടറിന്റേതാണ്, അതിന്റെ ഫയർവാളിൽ പോർട്ട് തുറക്കുന്നത് ആ പോർട്ട് പ്രോക്സിയിലേക്ക് അയയ്ക്കുന്ന പോർട്ട്-ഫോർവേഡ് എൻട്രി സൃഷ്ടിക്കുന്നതിന് തുല്യമല്ല. പുറത്തുനിന്ന് തുറന്നതായി തോന്നുന്നുവെങ്കിലും ഒന്നും മറുപടി നൽകാത്ത പോർട്ടിന് പലപ്പോഴും അതേ മാപ്പിംഗ് ഇല്ല.

NAT VPS-ൽ ദാതാവ് ഒരു പൊതു പോർട്ട് സ്വകാര്യ വിലാസത്തിലേക്ക് മാപ്പ് ചെയ്യുന്നു. മാപ്പിംഗ് നിങ്ങൾ പ്രഖ്യാപിക്കുന്ന പോർട്ടുമായി യോജിക്കണം, പൊരുത്തക്കേട് തകർന്ന ടണലിന് സമാനമായി കാണപ്പെടുന്നു. WireGuard കോൺഫിഗറേഷൻ മാറ്റുന്നതിന് മുമ്പ് ദാതാവിന്റെ മാപ്പിംഗ് സ്ഥിരീകരിക്കുക.

തിരിച്ചുള്ള പാത പരിശോധിച്ച് ചെലവ് സ്വീകരിക്കുക

പ്രോക്സിയുടെ LAN അല്ലാത്ത ഒരു നെറ്റ്വർക്കിൽ നിന്ന് കണക്ട് ചെയ്യുക, തുടർന്ന് കണക്ഷൻ തുറന്നിരിക്കുമ്പോൾ വിവർത്തന ജോടി പരിശോധിക്കുക:

conntrack -L -p tcp --dport 8080
tcpdump -ni any tcp port 8080

conntrack എൻട്രി യഥാർത്ഥ tuple, വിവർത്തനം ചെയ്ത tuple, മറുപടിയുടെ ദിശ എന്നിവ കാണിക്കണം. മറുപടി ഇല്ലെങ്കിൽ പീർ ടണലിലൂടെ അയയ്ക്കുന്നില്ല, സാധാരണയായി SNAT നിയമം പ്രയോഗിച്ചിട്ടില്ല അല്ലെങ്കിൽ പീറിന്റെ സ്വന്തം ഫയർവാൾ പ്രവാഹം ഉപേക്ഷിച്ചു എന്നാണ് അർത്ഥം.

PostUp നിയമങ്ങൾ വീണ്ടും പ്രയോഗിക്കുന്നുവെന്ന് തെളിയിക്കാൻ ഒരിക്കൽ റീബൂട്ട് ചെയ്യുക, തുടർന്ന് ടണൽ നിർത്തി PreDown അവ നീക്കിയെന്ന് സ്ഥിരീകരിക്കുക. വിച്ഛേദത്തെ അതിജീവിക്കുന്ന മൃത നിയമങ്ങളാണ് പിന്നീടുള്ള മാറ്റം പ്രവചിക്കാനാവാത്ത വിധം പെരുമാറാൻ കാരണം.

അവസാനം, SNAT-ന്റെ ചെലവ് സ്വീകരിക്കുക. സേവനം ഓരോ അഭ്യർത്ഥനയും പ്രോക്സിയിൽ നിന്ന് വരുന്നതായി കാണുന്നു, അതിനാൽ ആക്സസ് ലോഗുകൾ, ഓരോ ക്ലയന്റിനുമുള്ള നിരക്ക് പരിധികൾ, അനുവദനീയ വിലാസ പട്ടികകൾ എന്നിവ ഇനി ഉപയോക്താക്കളെ വേർതിരിക്കുന്നില്ല. ഹെയർപിൻ കേസിന് പ്രോക്സിയുടെ LAN-ലുള്ള ക്ലയന്റുകൾക്കായി സ്വന്തം ഉറവിട വിവർത്തനം ആവശ്യമാണ്. പീറിന് യഥാർത്ഥ ക്ലയന്റ് വിലാസങ്ങൾ വേണമെങ്കിൽ, ബദൽ ക്ലയന്റ് നെറ്റ്വർക്കിലേക്കുള്ള തിരിച്ചുള്ള റൂട്ടാണ്, അത് കൂടുതൽ ജോലിയാണെങ്കിലും വിവരം സംരക്ഷിക്കുന്നു.

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