హుక్ స్క్రిప్ట్ లో ఖాళీ $_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 అందించే సెషన్ గుర్తింపుకు అనుసంధానించండి. పరామితి ప్రకటనలను, ఆపరేషన్ కు అవసరమైన అనుమతులు మాత్రమే ఉన్న ఖాతాను ఉపయోగించండి. హుక్ డెమన్ అధికారంతో నడుస్తుంది, కాబట్టి నిర్లక్ష్య ప్రశ్న తప్పు లాగ్ వరుస కంటే పెద్ద సమస్య.

పరిసరాన్ని కుమ్మరించకుండా నిర్ధారణ చేయండి

ఏ పేర్లు ఉన్నాయి, ఏ దశ నడిచింది, ఏ ఇంటర్ ప్రెటర్ వాడబడిందో లాగ్ చేయండి. మొత్తం పరిసరాన్ని ముద్రించకండి, ఎందుకంటే హుక్ ప్రక్రియ లాగ్ ఫైల్ లో చేరకూడని సంబంధం లేని విలువలను వారసత్వంగా పొందవచ్చు.

ఒక కనెక్షన్ ను మొదటి నుండి చివరి వరకు ధృవీకరించండి: బయటి ముగింపు బిందువును చదవండి, కేటాయించిన చిరునామాను చదవండి, ఆ సెషన్ గురించి సర్వర్ తన స్వంత దృష్టితో రెండింటినీ సరిపోల్చండి. ఒక క్లయింట్ కోసం జత నిర్ధారితమైతే, అనుబంధాన్ని మరెక్కడైనా నమ్మవచ్చు.

సంబంధిత వ్యాసాలు