கொக்கி ஸ்கிரிப்டில் உள்ள காலியான $_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 காலியாகவே இருக்கும். அதை அட்டவணைப்படுத்தும் குறியீடு உண்மையில் உள்ள ஒரு மாறியைக் காணவில்லை என்று தெரிவிக்கும், பதில் php.ini இல் இருக்கும்போது விசாரணை OpenVPN நோக்கித் திரும்பும். அறிவுறுத்தலை குறிப்பாக CLI உள்ளமைவுக்குச் சரிபார்க்கவும், வலைச் சேவையகத்திற்கு அல்ல.

getenv மூலம் வாசிப்பது இந்த முழு குழப்பத்தையும் தவிர்க்கிறது, இடைமாற்றியை அழைப்பதற்கு முன் சூழலைச் சுத்தம் செய்யும் மடக்கு ஸ்கிரிப்ட் அதை வேறு வடிவத்தில் மீண்டும் கொண்டு வருகிறது.

வரிசை புதுப்பிப்பு அல்ல, தொடர்பைச் சேமியுங்கள்

எழுதுவதற்கு முன் பதிவுக்கு எந்த மதிப்பு தேவை என்பதைத் தீர்மானியுங்கள். அமர்வு எங்கிருந்து வந்தது என்பதைக் குறிப்பதே இலக்கு என்றால், வெளிப்புற முனையைச் சேமித்து அதைக் கவனிப்பு என்று லேபிளிடுங்கள். இணைப்பின் காலத்திற்கு அமர்வைச் சுரங்கப்பாதை முகவரியுடன் இணைப்பதே இலக்கு என்றால், குள முகவரியைச் சேமித்து அதை அமர்வுடன் இணையுங்கள்.

ஒரே சுரங்கப்பாதை முகவரியைப் பகிரும் ஒவ்வொரு வரிசைக்கும் பதிலாக அங்கீகரிக்கப்பட்ட அடையாளம் மற்றும் தற்போதைய அமர்வின் அடிப்படையில் புதுப்பிக்கவும், ஏனெனில் குள முகவரிகள் மீண்டும் பயன்படுத்தப்படுகின்றன, தாமதமான துண்டிப்பு நிகழ்வு புதிய இணைப்பின் தரவை மேலெழுதக்கூடும். IPv6 ஐ வெளிப்படையாகக் கையாளுங்கள், அமைதியாக IPv4 மதிப்பை மட்டும் எழுதாதீர்கள். NULL வெளிப்புற முகவரி கொண்ட வரிசை தவறான முகவரி கொண்ட வரிசையை விட சிறந்தது, ஏனெனில் முதல் ஒன்று வெளிப்படையாக முழுமையற்றது.

மீண்டும் இணையும்போது பழையதைத் திருத்தாமல் புதிய பதிவை உருவாக்க, எழுத்தை OpenVPN வழங்கும் அமர்வு அடையாளங்காட்டியுடன் இணையுங்கள். அளவுரு அறிக்கைகளையும், செயல்பாட்டிற்குத் தேவையான அனுமதிகள் மட்டுமே உள்ள கணக்கையும் பயன்படுத்துங்கள். கொக்கி டீமனின் அதிகாரத்துடன் இயங்குகிறது, எனவே கவனமற்ற வினவல் தவறான பதிவு வரியை விட பெரிய பிரச்சினை.

சூழலைக் கொட்டாமல் கண்டறியுங்கள்

எந்தப் பெயர்கள் இருந்தன, எந்தக் கட்டம் இயங்கியது, எந்த இடைமாற்றி பயன்படுத்தப்பட்டது என்பதைப் பதிவு செய்யுங்கள். முழு சூழலையும் அச்சிட வேண்டாம், ஏனெனில் கொக்கி செயல்முறை பதிவுக் கோப்பில் வந்து சேரக்கூடாத தொடர்பற்ற மதிப்புகளை மரபுரிமையாகப் பெறலாம்.

ஒரு இணைப்பை முதல் முதல் இறுதி வரை சரிபார்க்கவும்: வெளிப்புற முனையைப் படியுங்கள், ஒதுக்கப்பட்ட முகவரியைப் படியுங்கள், அந்த அமர்வு குறித்த சேவையகத்தின் சொந்தப் பார்வையுடன் இரண்டையும் ஒப்பிடுங்கள். ஒரு வாடிக்கையாளருக்கு இணை உறுதிசெய்யப்பட்டதும், தொடர்பை மற்ற இடங்களிலும் நம்பலாம்.

தொடர்புடைய கட்டுரைகள்