Ilgak skriptidagi bo'sh $_ENV massivi OpenVPN hech narsa uzatmaganining isbotidek tuyuladi. Odatda u butunlay boshqa narsani isbotlaydi: PHP o'sha superglobalni to'ldirmaslikka sozlangan edi va qiymatlar butun vaqt jarayon muhitida turardi. Ikkinchi noto'g'ri xulosa nozikroq, chunki ulanish ilgagidagi ikki manzil o'zgaruvchisi har xil narsani bildiradi va bir-birining o'rnida ishlatiladi. Noto'g'risidan boshlasangiz, ikkala xato ham yarim kunni oladi.

Ikki manzil, ikki xil da'vo

Tashqi oxirgi nuqta — bu mijozi ulanayotganda server kuzatgan narsa, IPv4 uchun trusted_ip va IPv6 uchun trusted_ip6 sifatida mavjud. Virtual manzil — bu hovuz ushbu sessiya uchun ajratgan narsa, ifconfig_pool_remote_ip sifatida mavjud.

Ular har xil savollarga javob beradi va yozuv odatda ikkalasini emas, bittasini talab qiladi. Birinchisi ulanish qayerdan kelganini aytadi, bu yuzlab odam foydalanadigan umumiy NAT manzili bo'lishi mumkin. Ikkinchisi bu sessiya tunnel ichida qayerda yashashini aytadi va keyinchalik uni boshqa sessiyaga berish mumkin. Ikkalasini aralashtirish ishonchli ko'rinadigan, ammo noto'g'ri yozuvlarni keltirib chiqaradi.

Minimal o'qish shunday ko'rinadi.

$outer4 = getenv('trusted_ip');
$outer6 = getenv('trusted_ip6');
$inner  = getenv('ifconfig_pool_remote_ip');
$outer  = $outer4 !== false ? $outer4 : $outer6;

Hech bir qiymat shaxsni aniqlay olmaydi. Biri tarmoq kuzatuvi, ikkinchisi ijara, va ulardan birini qurilmaning barqaror identifikatori deb hisoblaydigan yozuv, mijoz boshqa tarmoqdan qayta ulanganda yoki boshqa hovuz manzilini olganda birinchi marta xato bo'ladi. Maydonni yozuv javob berishi kerak bo'lgan savolga qarab tanlang, keyin o'sha savolni ustun yoniga yozing.

PHP qanday ishga tushirilganini tekshiring, o'z qobig'ingizni emas

Ilgak VPN demonining bolasi sifatida, demon yaratgan muhitda ishlaydi. Sizning interaktiv qobig'ingizda boshqa muhit bor va skriptni qo'lda ishga tushirish ilgakning emas, qobiqning muhitini sinaydi.

Avval ilgak haqiqatan siz kutgan bosqichda ishga tushganini tasdiqlang. Noto'g'ri bosqichga ulangan skript yoki ko'rsatma boshqa yo'lni ko'rsatgani uchun hech qachon ishlamagan skript yo'qolgan o'zgaruvchiga o'xshash aynan bir xil belgilar beradi. Skript boshiga ataylab belgi qatorini qo'shing va boshqa narsani tekshirishdan oldin u paydo bo'lishini tasdiqlang. Jurnaldagi vaqt tamg'asi bo'lgan bitta qator «hech qachon ishlamadi» va «qiymatsiz ishladi» o'rtasidagi farqni ajratadi.

Keyin o'sha chaqiruv qaysi interpretator va qaysi konfiguratsiya faylidan foydalanishini tasdiqlang. Veb-server uchun PHP konfiguratsiyasini tahrirlash OpenVPN ishga tushirgan CLI jarayoniga hech narsani o'zgartirmaydi va ikkalasi butunlay boshqa php.ini fayllarini yuklashi mumkin.

Bo'sh $_ENV nima uchun hech narsani isbotlamaydi

PHP getenv ma'lumotnomasi jarayon muhitini to'g'ridan-to'g'ri o'qishni hujjatlashtiradi, u nom bo'lmaganda false qaytaradi. $_ENV superglobali alohida to'ldiriladi va variables_order ko'rsatmasi qaysi supergloballar to'ldirilishini hal qiladi.

Agar o'sha ko'rsatma E ni tashlab ketsa, muhitda nima bo'lishidan qat'i nazar $_ENV bo'sh qoladi. Uni indekslaydigan kod keyin aslida mavjud bo'lgan o'zgaruvchini yo'q deb xabar qiladi va javob php.ini da bo'lsa-da, tekshiruv OpenVPN tomon ketadi. Ko'rsatmani ayniqsa CLI konfiguratsiyasi uchun tekshiring, veb-server uchun emas.

getenv bilan o'qish bu butun chalkashlikdan qochadi va interpretatorni chaqirishdan oldin muhitni tozalaydigan o'rovchi skript uni boshqa shaklda qaytaradi.

Qator yangilanishi emas, bog'lanishni saqlang

Yozishdan oldin yozuvga qaysi qiymat kerakligini hal qiling. Maqsad sessiya qayerdan kelganini qayd etish bo'lsa, tashqi oxirgi nuqtani saqlang va uni kuzatuv deb belgilang. Maqsad ulanish davomida sessiyani tunnel manziliga bog'lash bo'lsa, hovuz manzilini saqlang va uni sessiyaga bog'lang.

Bir xil tunnel manzilini bo'lishadigan har bir qator o'rniga autentifikatsiya qilingan shaxs va joriy sessiya bo'yicha yangilang, chunki hovuz manzillari qayta ishlatiladi va kechikkan uzilish hodisasi yangiroq ulanish ma'lumotlarini ustidan yozishi mumkin. IPv6 ni aniq ko'rib chiqing, jimgina faqat IPv4 qiymatini yozmang. NULL tashqi manzilli qator noto'g'ri manzilli qatordan yaxshiroq, chunki birinchisi ko'rinib turibdiki to'liq emas.

Yozishni OpenVPN taqdim etadigan sessiya identifikatoriga bog'lang, shunda qayta ulanish eski yozuvni tahrirlash o'rniga yangi yozuv yaratadi. Parametrlangan bayonotlar va operatsiyaga kerakli ruxsatlarga ega hisobdan foydalaning. Ilgak demonning vakolati bilan ishlaydi, shuning uchun beparvo so'rov noto'g'ri jurnal qatoridan kattaroq muammo.

Muhitni to'kmasdan diagnostika qiling

Qaysi nomlar borligini, qaysi bosqich ishlaganini va qaysi interpretator ishlatilganini jurnalga yozing. Butun muhitni chop etmang, chunki ilgak jarayoni jurnal fayliga tushmasligi kerak bo'lgan aloqasiz qiymatlarni meros qilib olishi mumkin.

Bitta ulanishni boshidan oxirigacha tekshiring: tashqi oxirgi nuqtani o'qing, tayinlangan manzilni o'qing va ikkalasini serverning o'sha sessiya haqidagi o'z qarashiga solishtiring. Bir mijoz uchun juftlik tasdiqlangach, bog'lanishga boshqa joyda ham ishonish mumkin.

O'xshash maqolalar