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 खाली रहन्छ। यसलाई इन्डेक्स गर्ने कोडले त्यसपछि वास्तवमा भएको भेरिएबल हराएको भनी रिपोर्ट गर्छ, र उत्तर php.ini मा हुँदा अन्वेषण OpenVPN तिर जान्छ। निर्देशिका विशेष गरी CLI कन्फिगरेसनका लागि जाँच्नुहोस्, वेब सर्भरका लागि होइन।
getenv सँग पढ्दा यो सम्पूर्ण अन्योलबाट बचिन्छ, र इन्टरप्रिटर बोलाउनुअघि वातावरण सफा गर्ने आवरण स्क्रिप्टले यसलाई अर्कै रूपमा फर्काउँछ।
पङ्क्ति अद्यावधिक होइन, सम्बन्ध भण्डारण गर्नुहोस्
लेख्नुअघि रेकर्डलाई कुन मान चाहिन्छ तय गर्नुहोस्। लक्ष्य सत्र कहाँबाट आयो भनी टिप्नु हो भने, बाहिरी अन्त्यबिन्दु भण्डारण गरी त्यसलाई अवलोकन भनी लेबल गर्नुहोस्। लक्ष्य जडानको अवधिभर सत्रलाई टनेल ठेगानासँग जोड्नु हो भने, पूल ठेगाना भण्डारण गरी त्यसलाई सत्रसँग जोड्नुहोस्।
एउटै टनेल ठेगाना साझा गर्ने हरेक पङ्क्तिको सट्टा प्रमाणित पहिचान र हालको सत्रअनुसार अद्यावधिक गर्नुहोस्, किनभने पूल ठेगाना पुनः प्रयोग हुन्छन् र ढिलो आएको डिस्कनेक्ट घटनाले नयाँ जडानको डाटा अधिलेखन गर्न सक्छ। IPv6 स्पष्ट रूपमा व्यवस्थापन गर्नुहोस्, चुपचाप केवल IPv4 मान नलेख्नुहोस्। NULL बाहिरी ठेगाना भएको पङ्क्ति गलत ठेगाना भएको पङ्क्तिभन्दा राम्रो हो, किनभने पहिलो स्पष्ट रूपमा अपूर्ण छ।
पुनः जडान गर्दा पुरानो सम्पादन नगरी नयाँ रेकर्ड बनाउन, लेखाइलाई OpenVPN ले दिने सत्र पहिचानकर्तासँग जोड्नुहोस्। प्यारामिटरयुक्त वाक्य र कार्यलाई आवश्यक पर्ने अनुमति मात्र भएको खाता प्रयोग गर्नुहोस्। हुक डेमनको अधिकारसँग चल्छ, त्यसैले लापरवाह क्वेरी गलत लग पङ्क्तिभन्दा ठूलो समस्या हो।
वातावरण नफाली निदान गर्नुहोस्
कुन नामहरू थिए, कुन चरण चल्यो र कुन इन्टरप्रिटर प्रयोग भयो भनी लग गर्नुहोस्। सम्पूर्ण वातावरण नछाप्नुहोस्, किनभने हुक प्रक्रियाले लग फाइलमा पुग्न नहुने असम्बन्धित मानहरू वंशानुगत रूपमा लिन सक्छ।
एउटा जडान सुरुदेखि अन्त्यसम्म प्रमाणित गर्नुहोस्: बाहिरी अन्त्यबिन्दु पढ्नुहोस्, तोकिएको ठेगाना पढ्नुहोस्, र त्यो सत्रबारे सर्भरको आफ्नै दृष्टिकोणसँग दुवै मिलाउनुहोस्। एउटा क्लाइन्टका लागि जोडी पुष्टि भएपछि, सम्बन्धमा अन्यत्र पनि भरोसा गर्न सकिन्छ।