OpenVPN PHP હૂક: trusted_ip વિરુદ્ધ ifconfig_pool_remote_ip
બે અલગ અર્થ ધરાવતા બે સરનામાં, જે પ્રક્રિયા તમે શરૂ નથી કરી તેના દ્વારા વંચાય છે. હૂક ચલો શું છે, અને ખાલી $_ENV શા માટે કંઈ સાબિત કરતું નથી.
હૂક સ્ક્રિપ્ટમાં ખાલી $_ENV એરે એવું પુરાવો લાગે છે કે OpenVPN એ કંઈ પસાર કર્યું નથી. સામાન્ય રીતે એ સાવ બીજા કંઈકનો પુરાવો છે: PHP એ રીતે ગોઠવાયેલું હતું કે એ સુપરગ્લોબલ ભરાય નહીં, અને મૂલ્યો આખો સમય પ્રક્રિયાના પર્યાવરણમાં પડ્યાં હતાં. બીજું ખોટું અનુમાન વધુ સૂક્ષ્મ છે, કારણ કે કનેક્શન હૂકમાં બે સરનામાં ચલો અલગ વસ્તુઓ દર્શાવે છે અને એકબીજાના બદલે વપરાય છે. બંને ભૂલો એક બપોર ખાઈ જાય છે, જો ખોટાથી શરૂ કરો.
બે સરનામાં, બે અલગ દાવા
બાહ્ય અંતિમ બિંદુ એ છે જે સર્વરે ક્લાયન્ટ જોડાયો ત્યારે જોયું, IPv4 માટે trusted_ip અને IPv6 માટે trusted_ip6 તરીકે ઉપલબ્ધ. વર્ચ્યુઅલ સરનામું એ છે જે પૂલે આ સત્ર માટે ફાળવ્યું, ifconfig_pool_remote_ip તરીકે ઉપલબ્ધ.
તેઓ અલગ પ્રશ્નોના જવાબ આપે છે, અને રેકોર્ડને સામાન્ય રીતે બંનેને બદલે એકની જરૂર હોય છે. પહેલું એ છે કે કનેક્શન ક્યાંથી આવ્યું, જે સેંકડો લોકો વાપરતું વહેંચાયેલું NAT સરનામું હોઈ શકે. બીજું એ છે કે આ સત્ર ટનલની અંદર ક્યાં રહે છે, અને તેને પછીથી બીજા સત્રને ફાળવી શકાય છે. બંનેને ભેળવી દેવાથી એવા રેકોર્ડ બને છે જે વિશ્વાસપાત્ર લાગે છે અને ખોટા હોય છે.
ન્યૂનતમ વાંચન આવું લાગે છે.
$outer4 = getenv('trusted_ip');
$outer6 = getenv('trusted_ip6');
$inner = getenv('ifconfig_pool_remote_ip');
$outer = $outer4 !== false ? $outer4 : $outer6;બંનેમાંથી કોઈ પણ મૂલ્ય વ્યક્તિને ઓળખતું નથી. એક નેટવર્ક નિરીક્ષણ છે, બીજું ભાડાકરાર છે, અને જે રેકોર્ડ બંનેમાંથી કોઈને સ્થિર ઉપકરણ ઓળખકર્તા તરીકે ગણે છે તે પહેલી વાર ખોટો ઠરશે જ્યારે ક્લાયન્ટ બીજા નેટવર્કથી ફરી જોડાય અથવા બીજું પૂલ સરનામું મેળવે. રેકોર્ડે જે પ્રશ્નનો જવાબ આપવો છે તે મુજબ ક્ષેત્ર પસંદ કરો, પછી એ પ્રશ્ન કૉલમની બાજુમાં લખો.
PHP કેવી રીતે શરૂ થયું તે તપાસો, તમારું શેલ નહીં
હૂક VPN ડીમનના સંતાન તરીકે ચાલે છે, ડીમન જે પર્યાવરણ બનાવે તેની સાથે. તમારા ઇન્ટરેક્ટિવ શેલમાં બીજું પર્યાવરણ છે, અને સ્ક્રિપ્ટ હાથે ચલાવવી એ હૂકના બદલે શેલના પર્યાવરણની કસોટી કરે છે.
પહેલાં ખાતરી કરો કે હૂક ખરેખર તમે ધારેલા તબક્કે સક્રિય થયો. ખોટા તબક્કે જોડાયેલી સ્ક્રિપ્ટ, અથવા જે કદી ચાલી જ નહીં કારણ કે સૂચના બીજા પથ તરફ ઇશારો કરે છે, તે ગુમ થયેલા ચલ જેવું જ લક્ષણ આપે છે. સ્ક્રિપ્ટની ટોચ પર જાણી જોઈને એક માર્કર લીટી ઉમેરો અને બીજું કંઈ તપાસતા પહેલાં ખાતરી કરો કે તે દેખાય છે. લોગમાં સમયછાપવાળી એક જ લીટી «કદી ચાલી નહીં» ને «મૂલ્ય વગર ચાલી» થી અલગ પાડે છે.
પછી ખાતરી કરો કે એ કૉલ કયો ઇન્ટરપ્રિટર અને કઈ રૂપરેખા ફાઇલ વાપરે છે. વેબ સર્વર માટે PHP રૂપરેખા બદલવાથી OpenVPN દ્વારા શરૂ થયેલી CLI પ્રક્રિયામાં કંઈ બદલાતું નથી, અને બંને સાવ અલગ php.ini ફાઇલો લોડ કરી શકે છે.
ખાલી $_ENV શા માટે કંઈ સાબિત કરતું નથી
PHP નું getenv સંદર્ભ પ્રક્રિયાના પર્યાવરણના સીધા વાંચનનું દસ્તાવેજીકરણ કરે છે, જે નામ ન હોય ત્યારે false પાછું આપે છે. $_ENV સુપરગ્લોબલ અલગથી ભરાય છે, અને variables_order સૂચના નક્કી કરે છે કે કયા સુપરગ્લોબલ ભરાશે.
જો એ સૂચના E છોડી દે, તો પર્યાવરણમાં શું હોય તે નિરપેક્ષ $_ENV ખાલી રહે. તેને ઇન્ડેક્સ કરતો કોડ પછી એવા ગુમ ચલની જાણ કરે છે જે ખરેખર હાજર છે, અને તપાસ OpenVPN તરફ જાય છે જ્યારે જવાબ php.ini માં છે. સૂચના ખાસ CLI રૂપરેખા માટે તપાસો, વેબ સર્વર માટે નહીં.
getenv સાથે વાંચવું આ આખો ગૂંચવણનો વર્ગ ટાળે છે, અને ઇન્ટરપ્રિટરને બોલાવતા પહેલાં પર્યાવરણ સાફ કરતી રેપર સ્ક્રિપ્ટ તેને બીજા સ્વરૂપમાં પાછું લાવે છે.
સંબંધ સાચવો, પંક્તિ સુધારો નહીં
લખતા પહેલાં નક્કી કરો કે રેકોર્ડને કયું મૂલ્ય જોઈએ. જો ધ્યેય સત્ર ક્યાંથી આવ્યું તે નોંધવાનો હોય, તો બાહ્ય અંતિમ બિંદુ સાચવો અને તેને નિરીક્ષણ તરીકે લેબલ કરો. જો ધ્યેય કનેક્શનના સમયગાળા માટે સત્રને ટનલ સરનામા સાથે મેળવવાનો હોય, તો પૂલ સરનામું સાચવો અને તેને સત્ર સાથે જોડો.
ટનલ સરનામું વહેંચતી દરેક પંક્તિ પ્રમાણે નહીં, પણ પ્રમાણિત ઓળખ અને વર્તમાન સત્ર પ્રમાણે સુધારો, કારણ કે પૂલ સરનામાં ફરી વપરાય છે અને મોડેથી આવતી ડિસ્કનેક્ટ ઘટના અન્યથા નવા કનેક્શનનો ડેટા ઉપર લખી શકે છે. ફક્ત IPv4 મૂલ્ય ચૂપચાપ લખવાને બદલે IPv6 સ્પષ્ટ રીતે સંભાળો. NULL બાહ્ય સરનામાવાળી પંક્તિ ખોટા સરનામાવાળી પંક્તિ કરતાં સારી છે, કારણ કે પહેલી દેખીતી રીતે અપૂર્ણ છે.
લખાણને OpenVPN આપતી સત્ર ઓળખકર્તા સાથે જોડો જેથી ફરી જોડાવાથી જૂનું સંપાદિત કરવાને બદલે નવો રેકોર્ડ બને. પેરામીટરાઇઝ્ડ વિધાનો અને ફક્ત ક્રિયાને જરૂરી પરવાનગીઓ ધરાવતું ખાતું વાપરો. હૂક ડીમનના અધિકાર સાથે ચાલે છે, તેથી બેદરકાર ક્વેરી ખોટી લોગ લીટી કરતાં મોટી સમસ્યા છે.
પર્યાવરણ ડમ્પ કર્યા વગર નિદાન કરો
કયા નામ હાજર હતા, કયો તબક્કો ચાલ્યો અને કયો ઇન્ટરપ્રિટર વપરાયો તે લોગ કરો. આખું પર્યાવરણ છાપશો નહીં, કારણ કે હૂક પ્રક્રિયા અસંબંધિત મૂલ્યો વારસામાં લઈ શકે છે જે લોગ ફાઇલમાં ન જોઈએ.
એક કનેક્શન શરૂઆતથી અંત સુધી ચકાસો: બાહ્ય અંતિમ બિંદુ વાંચો, ફાળવેલું સરનામું વાંચો, અને બંનેને સર્વરના પોતાના દૃષ્ટિકોણ સામે ખાતરી કરો. એક ક્લાયન્ટ માટે જોડી ખાતરી થઈ જાય પછી, સંબંધ પર બીજે ભરોસો કરી શકાય છે.