OpenVPN PHP qarmağı: trusted_ip ilə ifconfig_pool_remote_ip arasındakı fərq
İki fərqli məna daşıyan iki ünvan, sizin işə salmadığınız bir proses tərəfindən oxunur. Qarmaq dəyişənləri nədir və niyə boş $_ENV heç nə sübut etmir.
Qarmaq skriptində boş $_ENV massivi ona sübut kimi görünür ki, OpenVPN heç nə ötürməyib. Adətən bu, tamam başqa bir şeyin sübutudur: PHP həmin superqlobalı doldurmaq üçün qurulmayıb və dəyərlər bütün müddət proses mühitində qalıb. İkinci yanlış nəticə daha incədir, çünki qoşulma qarmağındakı iki ünvan dəyişəni fərqli şeylər bildirir və bir-birinin yerinə işlədilir. Hər iki səhv, yanlış olandan başlasanız, günün yarısını aparır.
İki ünvan, iki fərqli iddia
Xarici uc nöqtə serverin müştəri qoşulanda gördüyüdür və IPv4 üçün trusted_ip, IPv6 üçün trusted_ip6 kimi mövcuddur. Virtual ünvan isə hovuzun bu sessiya üçün təyin etdiyidir və ifconfig_pool_remote_ip kimi mövcuddur.
Onlar fərqli suallara cavab verir və yazı adətən ikisini deyil, birini tələb edir. Birincisi qoşulmanın haradan gəldiyidir, bu yüzlərlə insanın istifadə etdiyi ortaq NAT ünvanı ola bilər. İkincisi bu sessiyanın tunel daxilində yaşadığı yerdir və sonradan başqa sessiyaya yenidən təyin oluna bilər. İkisini qarışdırmaq inandırıcı görünən və səhv olan yazılar yaradır.
Minimal oxunuş belə görünür.
$outer4 = getenv('trusted_ip');
$outer6 = getenv('trusted_ip6');
$inner = getenv('ifconfig_pool_remote_ip');
$outer = $outer4 !== false ? $outer4 : $outer6;Heç bir dəyər insanı tanımlamır. Biri şəbəkə müşahidəsidir, digəri icarədir və hər hansı birini sabit cihaz identifikatoru kimi qəbul edən yazı, müştəri fərqli şəbəkədən yenidən qoşulanda və ya fərqli hovuz ünvanı alanda ilk dəfə səhv olacaq. Sahəni yazının cavab verməli olduğu suala görə seçin, sonra həmin sualı sütunun yanına yazın.
PHP-nin necə işə salındığını yoxlayın, öz terminalınızı deyil
Qarmaq VPN demonunun uşağı kimi, demonun qurduğu mühitlə işləyir. Sizin interaktiv terminalınızın mühiti başqadır və skripti əl ilə işə salmaq qarmağın deyil, terminalın mühitini sınayır.
Qarmağın həqiqətən gözlədiyiniz mərhələdə işə düşdüyünü təsdiqləyin. Yanlış mərhələyə bağlanmış skript və ya direktiv başqa yola işarə etdiyi üçün heç vaxt işləməmiş skript, itkin dəyişənlə tam eyni simptomu verir. Skriptin başına qəsdən bir marker sətri əlavə edin və başqa hər şeyi yoxlamazdan əvvəl onun göründüyünü təsdiqləyin. Logda bir vaxt damğalı sətir «heç işləmədi» ilə «dəyərsiz işlədi»ni ayırır.
Sonra həmin çağırışın hansı interpretatordan və hansı konfiqurasiya faylından istifadə etdiyini təsdiqləyin. Veb server üçün PHP konfiqurasiyasını redaktə etmək OpenVPN-in başlatdığı CLI prosesinə heç nə etmir və ikisi tamam fərqli php.ini faylları yükləyə bilər.
Niyə boş $_ENV heç nə sübut etmir
PHP-nin getenv sənədləşməsi proses mühitinin birbaşa oxunuşunu təsvir edir və ad olmadıqda false qaytarır. $_ENV superqlobalı ayrıca doldurulur və variables_order direktivi hansı superqlobaların doldurulacağını müəyyən edir.
Əgər həmin direktiv E-u buraxırsa, mühitdə nə olursa olsun $_ENV boş qalır. Onu indeksləyən kod, əslində mövcud olan dəyişəni itkin kimi bildirir və araşdırma OpenVPN-ə doğru gedərkən cavab php.ini-dədir. Direktivi xüsusilə CLI konfiqurasiyası üçün yoxlayın, veb server üçün deyil.
getenv ilə oxumaq bütün bu qarışıqlıq sinfindən yayınır və interpretatoru çağırmazdan əvvəl mühiti təmizləyən sarğı skripti onu başqa formada geri gətirir.
Sətir yeniləməsi deyil, assosiasiya saxlayın
Yazıdan əvvəl onun hansı dəyərə ehtiyacı olduğunu müəyyən edin. Məqsəd sessiyanın haradan gəldiyini qeyd etməkdirsə, xarici uc nöqtəni saxlayın və onu müşahidə kimi işarələyin. Məqsəd sessiyanı qoşulma müddətində tunel ünvanına bağlamaqdırsa, hovuz ünvanını saxlayın və onu sessiyaya bağlayın.
Yeniləməni tunel ünvanını paylaşan hər sətirə görə deyil, autentifikasiya olunmuş kimliyə və cari sessiyaya görə edin, çünki hovuz ünvanları təkrar istifadə olunur və gec gələn əlaqə kəsmə hadisəsi başqa halda daha yeni qoşulmanın məlumatını üzərinə yaza bilər. IPv6-nı açıq şəkildə idarə edin, yalnız IPv4 dəyərini səssizcə yazmaq əvəzinə. Xarici ünvanı NULL olan sətir səhv ünvanlı sətirdən yaxşıdır, çünki birincisi açıq-aşkar natamamdır.
Yazını OpenVPN-in verdiyi sessiya identifikatoruna bağlayın ki, yenidən qoşulma köhnəni redaktə etmək əvəzinə yeni yazı yaratsın. Parametrləşdirilmiş ifadələr və yalnız əməliyyatın tələb etdiyi icazələri olan hesab istifadə edin. Qarmaq demonun səlahiyyəti ilə işləyir, ona görə səhlənkar sorğu səhv log sətrindən daha geniş problemdir.
Mühiti boşaltmadan diaqnoz qoyun
Hansı adların olduğunu, hansı mərhələnin işlədiyini və hansı interpretatorun istifadə olunduğunu qeyd edin. Bütün mühiti çap etməyin, çünki qarmaq prosesi log faylına düşməməli olan əlaqəsiz dəyərləri miras ala bilər.
Bir qoşulmanı başdan sona yoxlayın: xarici uc nöqtəni oxuyun, təyin olunmuş ünvanı oxuyun və hər ikisini serverin həmin sessiyaya öz baxışı ilə təsdiqləyin. Bir müştəri üçün cüt təsdiqləndikdən sonra əlaqəyə başqa yerlərdə etibar etmək olar.