അഭ്യർത്ഥന എപ്പോഴും ഒരേ വാക്യത്തിന്റെ ഒരു രൂപമാണ്: ബ്രൗസിംഗിന് VPN വേണം, പക്ഷേ SSH-ഉം ഒരു ബാക്കപ്പ് ജോലിയും സാധാരണ കണക്ഷൻ ഉപയോഗിക്കട്ടെ. ഇതിനെക്കുറിച്ച് പ്രചരിക്കുന്ന ഉപദേശം, അതായത് iptables NAT നിയമങ്ങളിലൂടെ പോർട്ട് ഫോർവേഡ് ചെയ്യൽ, അത് ചെയ്യുന്നില്ല. NAT നിയമം ഒരു ഫ്ലോയ്ക്കുള്ളിലെ വിലാസങ്ങളും പോർട്ടുകളും വീണ്ടും എഴുതുന്നു; പാക്കറ്റ് ഏത് ഇന്റർഫേസിലൂടെ പുറത്തുപോകുന്നു എന്നത് അത് ഒരിക്കലും തിരഞ്ഞെടുക്കുന്നില്ല. ആ തീരുമാനം റൂട്ട് തിരയലിന്റേതാണ്, ഒരു പോർട്ട് കാണാൻ റൂട്ട് തിരയലിന് സഹായം വേണം.

സാധാരണ റൂട്ടിന് ഒരു പോർട്ടുമായി പൊരുത്തപ്പെടാൻ കഴിയാത്തത് എന്തുകൊണ്ട്

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

ആധുനിക iproute2-ഉം കെർണലുകളും നിയമത്തിന്റെ സെലക്ടർ വിശാലമാക്കുന്നു: ipproto, sport കൂടാതെ dport സ്വീകരിക്കപ്പെടുന്നു, അതിനാൽ ip rule add ipproto tcp dport 22 table 100 ഉദ്ദേശ്യം ഒരു വരിയിൽ പ്രകടിപ്പിക്കുന്നു. യഥാർത്ഥ ഹോസ്റ്റിൽ ip rule add help പ്രവർത്തിപ്പിച്ച് നിങ്ങളുടെ ബിൽഡ് dport ലിസ്റ്റ് ചെയ്യുന്നുണ്ടോ എന്ന് നോക്കുക. ചെയ്യുന്നുവെങ്കിൽ ഒരു കമാൻഡിൽ തീർന്നു; ഇല്ലെങ്കിൽ താഴെയുള്ള മാർക്ക് പാതയാണ് തുല്യം.

ഏതായാലും നിയമം ഒരു സൂചകം മാത്രം. പട്ടിക 100-ന് ഇപ്പോഴും ഒരു റൂട്ട് വേണം, ആ ഭാഗമാണ് ആളുകൾ മറക്കുന്നത്.

മൂന്ന് ഭാഗം, അല്ലെങ്കിൽ ഒന്ന്

ആധുനിക രൂപം മുകളിലെ ഒറ്റ നിയമവും ഇതര പട്ടികയിലെ ഒരു റൂട്ടുമാണ്. ക്ലാസിക് രൂപം നടുവിൽ netfilter ചേർക്കുന്നു: പാക്കറ്റിൽ മാർക്ക് ഇടുക, പിന്നെ നിയമത്തിൽ മാർക്ക് പൊരുത്തപ്പെടുത്തുക. രണ്ടും ഒരേ തിരയലിൽ അവസാനിക്കുന്നു; പോർട്ട് എവിടെ വായിക്കുന്നു എന്നതിൽ വ്യത്യാസം.

മാർക്ക് സമീപനം ഉള്ളത് netfilter ട്രാൻസ്പോർട്ട് ഹെഡർ കാണുന്നതുകൊണ്ടും റൂട്ടിംഗ് കോഡ് ചരിത്രപരമായി അത് കണ്ടിരുന്നില്ല എന്നതുകൊണ്ടുമാണ്. അതാണ് മുഴുവൻ സംവിധാനം, ഒരു ബുദ്ധിമാനായ കമാൻഡിന് പകരം മൂന്ന് സഹകരിക്കുന്ന ഭാഗങ്ങൾ എന്തുകൊണ്ടെന്നും അത് വിശദീകരിക്കുന്നു.

മൂന്ന് ഭാഗങ്ങൾ ക്രമത്തിൽ

ആദ്യം, വഴിതിരിച്ചുവിടേണ്ട ഫ്ലോകളിൽ മാർക്ക് ഇടുക, റൂട്ട് തീരുമാനത്തിന് മുമ്പ് മാർക്ക് നിലനിൽക്കുന്നത്ര നേരത്തേ പ്രവർത്തിക്കുന്ന ഒരു ചെയിനിൽ:

nft add table inet vpnexempt
nft 'add chain inet vpnexempt out { type route hook output priority mangle; }'
nft add rule inet vpnexempt out tcp dport 22 meta mark set 0x1

രണ്ടാമത്, മാർക്ക് ചെയ്ത പാക്കറ്റുകൾ ഒരു പ്രത്യേക പട്ടികയിലേക്ക് അയക്കുക:

ip rule add fwmark 0x1/0x1 table 100

മൂന്നാമത്, ആ പട്ടികയ്ക്ക് ഭൗതിക ലിങ്കിലൂടെ ഒരു ഡിഫോൾട്ട് റൂട്ട് നൽകുക. വിലാസങ്ങൾ ഉദാഹരണമാണ്; നിങ്ങളുടേത് ഇടുക:

ip route add default via 192.168.1.1 dev wlan0 table 100

മൂന്നാം ഘട്ടം ഒഴിവാക്കിയാൽ മാർക്ക് ചെയ്ത പാക്കറ്റിന് പട്ടിക 100-ൽ റൂട്ട് കിട്ടില്ല, അതിനാൽ അത് പരാജയപ്പെടും. ലക്ഷണം നിയമം നെറ്റ്വർക്ക് തകർത്തതുപോലെ തോന്നും, യഥാർത്ഥത്തിൽ പാക്കറ്റിന് ബാക്കിയുണ്ടായിരുന്ന ഏക വഴി അത് നീക്കം ചെയ്തു.

ആദ്യ പാക്കറ്റിന് ശേഷവും അതിനെ പ്രവർത്തിപ്പിക്കുന്നത് എന്ത്

മാർക്കുകൾ പുറത്തുപോകുന്ന പാക്കറ്റുകൾക്ക് ബാധകമാണ്. മറുപടി ആ ലിങ്ക് നൽകിയ വിലാസത്തോടെ ഭൗതിക ഇന്റർഫേസിൽ എത്തുന്നു, പ്രധാന പട്ടിക ആ ലക്ഷ്യത്തിന് ഇപ്പോഴും ടണലിന് മുൻഗണന നൽകാം. രണ്ട് സംവിധാനങ്ങൾ മറുപടി പാത സ്ഥിരമായി നിർത്തുന്നു: ലിങ്ക് വിലാസത്തിനുള്ള ഉറവിട അടിസ്ഥാന നിയമം, ഫ്ലോയുടെ മുഴുവൻ ആയുസ്സിലും തീരുമാനം സൂക്ഷിക്കുന്ന കണക്ഷൻ ട്രാക്കിംഗ്. മാർക്ക് conntrack-ൽ സൂക്ഷിച്ച് മറുപടിയിൽ പുനഃസ്ഥാപിക്കുന്നതാണ് അവസ്ഥാധിഷ്ഠിത ഒഴിവിനെ സ്ഥിരമാക്കാനുള്ള സാധാരണ വഴി.

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

ടണലിന്റെ സ്വന്തം ട്രാൻസ്പോർട്ടിൽ മാർക്ക് ഇടരുത്. WireGuard അല്ലെങ്കിൽ UDP OpenVPN ടണൽ TCP 22 അല്ല, അതിനാൽ മുകളിലെ പാചകക്കുറിപ്പ് സുരക്ഷിതമാണ്, പക്ഷേ ടണൽ ലക്ഷ്യം ഒഴികെ എല്ലാം എന്ന് എഴുതിയ ഒഴിവ് എൻക്രിപ്റ്റ് ചെയ്ത പാക്കറ്റുകൾ പിടിച്ച് ടണൽ റൂട്ടിംഗ് ലൂപ്പിന് സമാനമായ രീതിയിൽ തകർക്കാം.

കരുതുന്നതിന് പകരം പരിശോധിക്കുക

ലക്ഷ്യത്തിനും പോർട്ടിനും കെർണൽ ഏത് പാത എടുക്കുമെന്ന് ചോദിക്കുക, പിന്നെ യഥാർത്ഥ കൈമാറ്റം പ്രവർത്തിപ്പിക്കുക:

ip route get 203.0.113.10
ip rule show
nft list ruleset

മാർക്ക് ഉണ്ടെങ്കിലും കൗണ്ടറുകൾ ഒരിക്കലും നീങ്ങുന്നില്ലെങ്കിൽ നിയമം പൊരുത്തപ്പെടുന്നില്ല. കൗണ്ടറുകൾ നിങ്ങൾ എഴുതിയ കോൺഫിഗറേഷനും കെർണൽ പ്രയോഗിക്കുന്ന പോളിസിയും തമ്മിലുള്ള വ്യത്യാസമാണ്.

ഇത് തെറ്റായ ഉപകരണം എപ്പോൾ

പോർട്ട് അടിസ്ഥാന ഒഴിവുകൾ സ്വാഭാവികമായും ദുർബലമാണ്. സേവനങ്ങൾ പോർട്ടുകൾ മാറ്റുന്നു, HTTP/3 UDP 443 ആയി വരുന്നു, ഒരു ആപ്ലിക്കേഷൻ വിവിധ തരത്തിലുള്ള നിരവധി ഫ്ലോകൾ തുറക്കാം. യഥാർത്ഥ ആവശ്യം ഈ പ്രോഗ്രാം സാധാരണ ലിങ്ക് ഉപയോഗിക്കുക എന്നതാണെങ്കിൽ റൂട്ടിംഗ് പാളി തെറ്റായ സ്ഥലമാണ്; നെറ്റ്വർക്ക് നെയിംസ്പേസ് അല്ലെങ്കിൽ ഓരോ ആപ്ലിക്കേഷനും പ്രോക്സി കൂടുതൽ അനുയോജ്യമാണ്.

ആവശ്യം ഈ സബ്നെറ്റ് സാധാരണ ലിങ്ക് ഉപയോഗിക്കുക എന്നതാണെങ്കിൽ മാർക്കുകൾ പൂർണ്ണമായി ഒഴിവാക്കി കൂടുതൽ നിർദ്ദിഷ്ടമായ ഒരു റൂട്ട് ചേർക്കുക. അത് ലളിതമാണ്, ഒരു പട്ടികയിൽ കാണാം, അടുത്തയാൾക്ക് നിയമക്കൂട്ടം വായിക്കാതെ അത് ഓഡിറ്റ് ചെയ്യാം.

ഫയർവാൾ തൊടുന്നതിന് മുമ്പ് മൂന്ന് ആവശ്യങ്ങളിൽ ഏതാണ് യഥാർത്ഥത്തിൽ നിങ്ങൾക്കുള്ളതെന്ന് എഴുതുക. മുകളിലെ സംവിധാനം കൃത്യമാണ്, തെറ്റായ പാളിയിൽ പ്രയോഗിക്കുന്ന കൃത്യത വെറും നീളമുള്ള തടസ്സമാണ്.

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