OpenVPN-ൽ persist-tun, persist-key യഥാർത്ഥത്തിൽ എന്താണ് അതിജീവിക്കുന്നത്
രണ്ട് ഓപ്ഷനുകളും ജീവനുള്ള പ്രോസസ്സിനുള്ളിലെ മൃദുവായ പുനരാരംഭം ഉൾക്കൊള്ളുന്നു. നിർത്തിയതിന് ശേഷം ഇന്റർഫേസ് നിലനിർത്തുന്നില്ല, ട്രാഫിക് തടയുന്ന നയവുമല്ല.
സേവനം നിർത്തുന്നത് persist-tun സെറ്റ് ചെയ്തിട്ടും ഇന്റർഫേസ് നീക്കം ചെയ്യുന്നു. ഇത് ഓപ്ഷൻ ഡോക്യുമെന്റ് ചെയ്തത് പോലെ പ്രവർത്തിക്കുന്നു, പരാജയമല്ല. ഓപ്ഷൻ പ്രവർത്തിക്കുന്ന പ്രോസസ്സിനുള്ളിലെ ഒരു റീസ്റ്റാർട്ട് പാത വിവരിക്കുന്നു, systemctl stop ആ പാതയല്ല.
രണ്ട് പേരുകളും ഒരുമിച്ച് വായിക്കുക, രൂപകൽപ്പന വ്യക്തമാകും. ഒന്ന് ഡിസ്ക്രിപ്റ്റർ സൂക്ഷിക്കുന്നു, മറ്റൊന്ന് കീ മെറ്റീരിയൽ സൂക്ഷിക്കുന്നു, രണ്ടും പ്രിവിലേജുകൾ വിട്ടതിന് ശേഷം സംഭവിക്കുന്നത് കാരണം നിലനിൽക്കുന്നു.
രണ്ട് വിഭവങ്ങളും അവ ഉൾപ്പെടുന്ന റീസെറ്റും
OpenVPN രണ്ട് സാധാരണ സാഹചര്യങ്ങളിൽ തന്റെ സ്വന്തം റീസ്റ്റാർട്ട് സിഗ്നൽ ചെയ്യുന്നു. വ്യക്തമായ SIGUSR1 അത് ചെയ്യുന്നു, മരിച്ച പങ്കാളി ഉണ്ടാക്കുന്ന ping-restart അതേ കാര്യം ചെയ്യുന്നു. രണ്ടും പ്രോസസ്സിനെ ജീവനോടെ വിടുകയും കണക്ഷൻ ക്രമീകരണം വീണ്ടും പ്രവർത്തിപ്പിക്കുകയും ചെയ്യുന്നു, അവിടെയാണ് ഓപ്ഷനുകൾ അവയുടെ സ്ഥാനം നേടുന്നത്.
| Event | TUN/TAP device | Key and auth files | Addresses and routes | up/down hooks |
|---|---|---|---|---|
Soft reset, from SIGUSR1 or from a ping-restart the daemon sends itself | survives only with persist-tun | survive only with persist-key | survive with the device, otherwise rebuilt | run again only when restart hooks are enabled |
Configuration reload, SIGHUP | recreated | re-read from disk | rebuilt once the device returns | run again |
| Service stop | lost | re-read at the next start | removed | run at the next start |
ഈ രണ്ട് ഓപ്ഷനുകൾ മാറ്റുന്നത് മൃദു റീസെറ്റ് വരി മാത്രമാണ്, അവ ഒഴിവാക്കുന്ന ജോലി തിരക്കുള്ള ലിങ്കിൽ ചെലവേറിയ ഭാഗമാണ്. ഉപകരണം വീണ്ടും തുറക്കുന്നത് അതിൽ ബന്ധിപ്പിച്ച വിലാസങ്ങളും റൂട്ടുകളും തകർക്കുന്നു, അവ വീണ്ടും നിർമ്മിക്കുന്നത് റീസെറ്റ് തുടങ്ങിയപ്പോൾ വഴിയിലുണ്ടായിരുന്ന പാക്കറ്റുകൾ വീഴ്ത്തിയേക്കാം. നിർത്തുന്നത് അതേ വസ്തുക്കളെ സൂക്ഷിക്കാനുള്ള ഒരു ഓപ്ഷനുമില്ലാതെ നശിപ്പിക്കുന്നു.
ഈ ഓപ്ഷനുകൾ എന്തിനാണ് ഉള്ളത്
കട്ടിയാക്കിയ OpenVPN സെർവർ സാധാരണയായി root ആയി ആരംഭിക്കുന്നു, കീകളും ഉപകരണവും തുറക്കുന്നു, പിന്നീട് പ്രിവിലേജില്ലാത്ത ഉപയോക്താവിലേക്ക് ഇറങ്ങുന്നു. ആ ഇറക്കത്തിന് ശേഷം ചില പ്രവർത്തനങ്ങൾ വെറുതെ മായുന്നു. മോഡ് 0600 കീ ഫയൽ വായിക്കുന്നത്, നെറ്റ്വർക്ക് ഇന്റർഫേസ് സൃഷ്ടിക്കുന്നത്, റൂട്ടുകൾ മാറ്റുന്നത് എല്ലാം നിരസിക്കപ്പെടാം.
persist ഓപ്ഷനുകളില്ലെങ്കിൽ, ping-restart ഉണ്ടാക്കാൻ മതിയായ സമയം മിണ്ടാതിരിക്കുന്ന പങ്കാളി അതേ പ്രവർത്തനങ്ങൾ നിർബന്ധമാക്കും. കോൺഫിഗറേഷനിൽ ഒന്നും മാറിയിട്ടില്ലെങ്കിലും വീണ്ടും ബന്ധിപ്പിക്കൽ പരാജയപ്പെടും. പ്രോസസ്സ് കാരണമില്ലാതെ മരിക്കുന്നത് പോലെ തോന്നും, ലോഗ് നെറ്റ്വർക്ക് പിശകിന് പകരം അനുമതി പിശക് കാണിക്കും.
അവയോടൊപ്പം, മൃദു റീസെറ്റ് പ്രിവിലേജുള്ള ഘട്ടം ഇതിനകം നേടിയത് വീണ്ടും ഉപയോഗിക്കുന്നു. മാന്ത്രികമായി ഒന്നുമില്ല, പ്രോസസ്സ് ഒന്നിനെയും അതിജീവിക്കുന്നില്ല. വിഭവങ്ങൾ നേടുന്നത് വെറുതെ മാറ്റിവയ്ക്കപ്പെടുന്നു.
അവസാനത്തെയല്ല, ആദ്യത്തെ പിശക് വായിക്കുക
റീസെറ്റ് പരാജയപ്പെടുമ്പോൾ, അവസാനത്തിന് പകരം ആദ്യത്തെ പിശക് വായിക്കുക. സംരക്ഷിത കീ, auth ഫയൽ, ഇന്റർഫേസ് ioctl, ബാഹ്യ ഹുക്ക് എന്നിവ നാല് വ്യത്യസ്ത വിഭവങ്ങളാണ്. ഒന്ന് സൂക്ഷിക്കുന്നത് മറ്റുള്ളവയിലേക്കുള്ള പ്രവേശനത്തെക്കുറിച്ച് ഒന്നും പറയുന്നില്ല. ഫയർവാൾ ടൂൾ വിളിക്കുന്ന ഹുക്കിന് ആ ടൂൾ ആവശ്യപ്പെടുന്ന പ്രിവിലേജുകൾ ഇപ്പോഴും വേണം.
ഹുക്കുകൾക്ക് സ്വന്തം സ്വിച്ച് ഉണ്ട്. OpenVPN മാനുവൽ persist ഓപ്ഷനുകളെ up-restart മായി ജോടിയാക്കുന്നു, അത് റീസ്റ്റാർട്ടിന് ശേഷം up, down സ്ക്രിപ്റ്റുകൾ വീണ്ടും പ്രവർത്തിക്കുമോ എന്ന് തീരുമാനിക്കുന്നു. അതിനാൽ മുകളിൽ നിന്ന ഇന്റർഫേസ് നിങ്ങളുടെ റിസോൾവർ സംയോജനം പുതുക്കിയോ എന്നതിനെക്കുറിച്ച് ഒന്നും പറയുന്നില്ല.
# which restart path just happened?
journalctl -u openvpn-client@office --since '10 min ago' | grep -E 'SIGUSR1|ping-restart|Restart pause|NOTE:'
# did the interface survive, and do its routes still exist?
ip -brief link show tun0
ip route show dev tun0
ഈ രണ്ട് കമാൻഡുകൾ രണ്ട് പരാജയ മോഡുകളെ സെക്കൻഡുകളിൽ വേർതിരിക്കുന്നു. ഉള്ളതും എന്നാൽ റൂട്ടുകൾ കാണാത്തതുമായ ഇന്റർഫേസ് ഒരു ഹുക്ക് അല്ലെങ്കിൽ റൂട്ട് പ്രശ്നമാണ്. അപ്രത്യക്ഷമായ ഇന്റർഫേസ് അർത്ഥം പ്രോസസ്സ് യഥാർത്ഥത്തിൽ അവസാനിച്ചു.
നിലനിർത്തിയ ഇന്റർഫേസ് kill switch അല്ല
ട്രാഫിക് ഒരിക്കലും ടണലിന് പുറത്തേക്ക് പോകരുതെന്നതാണ് ആവശ്യമെങ്കിൽ, നിലനിർത്തിയ ഉപകരണം അത് നൽകുന്നില്ല. മറ്റേ വിലാസ കുടുംബത്തിനുള്ള റൂട്ടുകൾ, രണ്ടാമത്തെ ഡിഫോൾട്ട് റൂട്ട്, പ്രോസസ്സ് പൂർണ്ണമായി പുറത്തേക്ക് പോകുന്ന സാഹചര്യം എന്നിവയെല്ലാം ഓപ്ഷന്റെ പരിധിക്ക് പുറത്താണ്.
രണ്ട് ആവശ്യങ്ങളും വെവ്വേറെ കൈകാര്യം ചെയ്യുക. വീണ്ടും ബന്ധിപ്പിക്കലുകൾക്കിടയിൽ ടണൽ ഒബ്ജക്ട് സൂക്ഷിക്കുന്നത് ഡീമണിന് സൗകര്യമാണ്. ടണൽ താഴെയിരിക്കുമ്പോൾ പുറത്തേക്കുള്ളത് തടയുന്നത് സ്വന്തം നിയമങ്ങളും സ്വന്തം പരിശോധനയുമുള്ള ഫയർവാൾ നയമാണ്. അവ കൂട്ടിക്കലർത്തുന്നത് പ്രതിരോധാത്മകമായി തോന്നുന്ന, എന്നാൽ മികച്ച-ശ്രമ വീണ്ടും ബന്ധിപ്പിക്കൽ പോലെ പ്രവർത്തിക്കുന്ന കോൺഫിഗറേഷൻ സൃഷ്ടിക്കുന്നു.
രോഗനിർണ്ണയത്തിന് മുൻപ് സംഭവത്തിന് പേര് നൽകുക. മൃദു റീസ്റ്റാർട്ട്, പരാജയപ്പെട്ട കണക്ഷൻ ശ്രമം, സേവനം നിർത്തൽ എന്നിവ മൂന്ന് സ്വഭാവങ്ങളുള്ള മൂന്ന് സംഭവങ്ങളാണ്, ആദ്യത്തേത് മാത്രമാണ് ഈ ഓപ്ഷനുകൾ വിവരിക്കുന്നത്.