શું OpenVPN હૂક સ્ક્રિપ્ટ તે હમણાં જ બનાવેલ ટનલનો ઉપયોગ કરી શકે?
OpenVPN તેના પોતાના સ્ટાર્ટઅપની અંદર હૂક ચલાવે છે, તેથી જે સ્ક્રિપ્ટને ટનલની જરૂર છે તે એવી ટનલની રાહ જુએ છે જે તેની રાહ જુએ છે. કામ અલગ કરો અને ઘટના પ્રમાણે હૂક પસંદ કરો.
હૂક સ્ક્રિપ્ટ ટનલની બીજી બાજુ સુધી પહોંચી શકે છે કે નહીં તે ત્રણ શરતો પર આધાર રાખે છે: તે કઈ ઘટના સાથે જોડાયેલી છે, સ્ક્રિપ્ટ ચાલે ત્યારે OpenVPN હજી તેના સ્ટાર્ટઅપ ક્રમની અંદર છે કે નહીં, અને કામ તે ક્રમથી અલગ કરવામાં આવ્યું છે કે નહીં. મોટાભાગની સ્ક્રિપ્ટો ત્રીજામાં નિષ્ફળ જાય છે. ઊંઘ ઉમેરવી જીવનચક્રની સમસ્યાને સમયની સમસ્યા તરીકે ગણે છે, અને તે ગેરમાર્ગે દોરવા માટે પૂરતી વાર કામ કરે છે.
પહેલા ઘટના નક્કી કરો, પછી કામ મોકૂફ રાખવાની પદ્ધતિ, પછી મોકૂફ કરેલું કામ જ્યાં ચાલે તે જગ્યા. આ ત્રણ નિર્ણય સ્વતંત્ર છે, અને તેમને ભેળવવા એ જ બે લીટીના હૂકને આખી બપોર બનાવવાની રીત છે.
હૂક શા માટે એવી ટનલની રાહ જુએ છે જે તેની રાહ જુએ છે
OpenVPN તેના હૂકને સમકાલીક રીતે બોલાવે છે, તે જ પ્રક્રિયાની અંદર જે પેકેટ ખસેડે છે. tun અથવા tap ઉપકરણ હાજર હોય ત્યારે પણ કોઈ રૂટ ઉમેરાય તે પહેલાં up સક્રિય થાય છે, અને રૂટ પછી route-up સક્રિય થાય છે; આ બંને ક્ષણોમાંથી કોઈ પણ સામેનો પક્ષ જવાબ આપશે તેની ખાતરી આપતું નથી. કોઈપણ હૂકની સ્ક્રિપ્ટ ચાલુ હોય ત્યાં સુધી ડેમન ફોરવર્ડ કરતું નથી, તેથી જે આદેશ ટ્રાફિક ટનલમાંથી પસાર થશે તેવી અપેક્ષા રાખે છે તે એવી ટનલની રાહ જુએ છે જે તે આદેશની રાહ જુએ છે. આ વર્તુળાકાર પ્રતીક્ષા એ કારણ છે કે હાથે ચલાવવું સફળ થાય છે અને હૂક સમયસીમા વટાવી જાય છે.
સ્પષ્ટ ઉપાય, એટલે થોડી સેકન્ડની ઊંઘ, ક્યારેક કામ કરે છે કારણ કે દૂરનો છેડો પોતાની જાતે ઉપર આવ્યો, એટલા માટે નહીં કે ઊંઘે કંઈ સુધાર્યું. તૈયારી માટે પૂછતો સહાયક બીજો જવાબ છે: હૂક પાછો ફરે છે, ફોરવર્ડિંગ શરૂ થાય છે, અને સહાયકને જે જોઈએ તે ત્યારે મળે છે જ્યારે તે ખરેખર ત્યાં હોય.
ઘટના પ્રમાણે હૂક પસંદ કરો, સુવિધા પ્રમાણે નહીં
ફક્ત ઉપકરણની જરૂર હોય તેવા કામ સાથે up જોડો, રૂટની જરૂર હોય તેવા કામ સાથે route-up, અને client-connect તથા client-disconnect રાખો સર્વર બાજુએ પ્રતિ-ક્લાયંટ કાર્યો માટે. ડિસ્કનેક્ટ પર સફાઈ બે વાર ચલાવવાનું સહન કરવું જોઈએ, કારણ કે સ્થાયી ઇન્ટરફેસ પર ફરી જોડાવું સંપૂર્ણ રીસ્ટાર્ટ જેવો જ ક્રમ અનુસરતું નથી. સર્વર પર, ડેમન શરૂ થાય ત્યારે નહીં પણ ક્લાયંટ પ્રમાણિત થાય ત્યારે client-connect સક્રિય થાય છે, જે ત્યાં લોજિક ખસેડતા પહેલા ચકાસવા યોગ્ય છે. જો કામ એક જ જોડાણને બદલે સેવાના જીવનચક્રનું હોય, તો systemd એકમ કોઈપણ હૂક કરતાં સારું ઘર છે.
હૂક આદેશો ડેમન સીધા જ ચલાવે છે, વચ્ચે કોઈ શેલ વગર, તેથી up લીટીમાં ifconfig_remote શાબ્દિક લખાણ તરીકે આવે છે. આદેશને સ્પષ્ટ શેલમાં લપેટો, અથવા લોજિકને પર્યાવરણ વાંચતી સ્ક્રિપ્ટમાં રાખો. ipchange એક નિર્દેશ છે જે પોતાના દલીલો ઉમેરે છે: તે આદેશને સરનામું અને પોર્ટ આપે છે, તેથી કોઈના માટે ન લખાયેલી સ્ક્રિપ્ટ બે અણધારી દલીલો જુએ છે.
કામ અલગ કરવાની ત્રણ રીતો
પ્રથમ વિકલ્પ હૂકની અંદરથી સહાયકને બેકગ્રાઉન્ડમાં મોકલવાનો છે: તેને setsid અથવા systemd-run --scope થી શરૂ કરો, વારસાગત ડિસ્ક્રિપ્ટર બંધ કરો અને તરત જ શૂન્ય સાથે બહાર નીકળો. બીજો એ છે કે હૂક નાની સ્થિતિ ફાઇલ લખે અને systemd ટાઇમર અથવા પાથ એકમ તેના પર કાર્ય કરે, જે હૂકને તુચ્છ રાખે છે અને ફરી પ્રયાસની નીતિને લોગ હોય ત્યાં મૂકે છે. ત્રીજો એ છે કે હૂક સંપૂર્ણપણે છોડી દેવો અને કામને VPN સેવા પછી ગોઠવાયેલા એકમમાં ખસેડવું, જે સાચો જવાબ છે જ્યારે કામ બિલકુલ પ્રતિ-જોડાણનું ન હોય. ત્રણેય એક નિયમ વહેંચે છે: હૂકને ટનલની જરૂર પડે તે પહેલાં તે પાછો ફરવો જોઈએ.
તમે જે પણ પસંદ કરો, સહાયકને ઇડેમ્પોટેન્ટ અને નિરીક્ષણક્ષમ બનાવો. બે અતિક્રમણ કરતા આહ્વાનોએ સમાન અપરિવર્તનીય ક્રિયા બે વાર ચલાવવી ન જોઈએ, અને નિષ્ફળ સહાયકે માણસ વાંચી શકે તેવું કંઈક છોડવું જોઈએ.
સેન્ડબોક્સ નિષ્ફળતાઓને જીવનચક્ર નિષ્ફળતાઓથી અલગ કરો
જ્યારે સ્ક્રિપ્ટ root પ્રોમ્પ્ટથી ચાલે અને સેવા તરીકે નિષ્ફળ જાય, ત્યારે કારણ સામાન્ય રીતે નેટવર્ક નહીં પણ સેન્ડબોક્સ હોય છે. પ્રતિબંધક ProtectHome, ફક્ત-વાંચન ProtectSystem, અથવા એવી કાર્ય નિર્દેશિકા જે અસ્તિત્વમાં નથી સ્ક્રિપ્ટ અથવા તેના ડેટાને અગમ્ય બનાવી શકે છે, અને SELinux યજમાન પર ફાઇલને ચલાવવાની પરવાનગી આપતું સંદર્ભ પણ જોઈએ. systemctl cat openvpn-server@server સાથે એકમ અને journalctl -u openvpn-server@server -n 80 સાથે જર્નલ વાંચો, પછી કનેક્શન ટાઇમઆઉટને બદલે પરવાનગી અથવા સંદર્ભ ભૂલ શોધો. સેન્ડબોક્સ અક્ષમ કરવું પ્રથમ નહીં, છેલ્લું પગલું હોવું જોઈએ.
જીવનચક્ર નિષ્ફળતા અલગ દેખાય છે: હૂક શરૂ થાય છે, સહાયક ચાલે છે, અને સોકેટ હજી ત્યાં જ નથી. હૂકમાંથી જ ટાઇમસ્ટેમ્પવાળી લીટી લખો, ડિસ્કનેક્ટ કરીને ફરી જોડાઓ, અને ઘટનાઓ ક્રમમાં વાંચો. જ્યારે સહાયકને ખરેખર ટનલની જરૂર હોય, ત્યારે નિશ્ચિત સમય ઊંઘવાને બદલે તૈયારી માટે પૂછવા દો.
ત્રણ ક્ષેત્રો આગલો અહેવાલ ઉપયોગી બનાવે છે: કઈ હૂક ચાલી, કયું ખાતું વાપર્યું અને ક્યાં અટકી. તેમના વગર દરેક પછીની તપાસ શરૂઆતથી થાય છે.