Ілгек скриптіндегі бос $_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 қалай іске қосылғанын тексеріңіз, өз shell-іңізді емес

Ілгек VPN демонының баласы ретінде, демон құрастырған ортамен жұмыс істейді. Сіздің интерактивті shell-іңізде басқа орта бар, ал скриптті қолмен іске қосу ілгектің емес, shell-дің ортасын тексереді.

Ілгектің шынымен күткен кезеңде іске қосылғанын растаудан бастаңыз. Қате кезеңге байланған скрипт немесе нұсқаулық басқа жолды көрсеткендіктен ешқашан іске қосылмаған скрипт жоғалған айнымалымен дәл сол симптомды береді. Скрипттің басына әдейі маркер жолын қосып, басқа нәрсені тексермес бұрын оның пайда болғанын растаңыз. Журналдағы бір уақыт белгісі бар жол «ешқашан іске қосылмадыны» «мәнсіз іске қосылдыдан» ажыратады.

Содан кейін сол шақыру қай интерпретаторды және қай конфигурация файлын қолданатынын растаңыз. Веб-сервер үшін PHP конфигурациясын өңдеу OpenVPN іске қосқан CLI процесіне ештеңе өзгертпейді, және екеуі мүлде басқа php.ini файлдарын жүктеуі мүмкін.

Неге бос $_ENV ештеңе дәлелдемейді

PHP-ның getenv анықтамасы процесс ортасын тікелей оқуды сипаттайды, ол атау болмағанда false қайтарады. $_ENV суперглобалы бөлек толтырылады, ал variables_order нұсқаулығы қай суперглобалдардың толтырылатынын шешеді.

Егер бұл нұсқаулық E-ды өткізіп жіберсе, ортада не болса да $_ENV бос қалады. Оны индекстейтін код сонда шын мәнінде бар айнымалыны жоқ деп хабарлайды, ал жауап php.ini-де болса да тергеу OpenVPN жаққа кетеді. Нұсқаулықты CLI конфигурациясы үшін тексеріңіз, веб-сервер үшін емес.

getenv арқылы оқу осы шатасу класының барлығын болдырмайды, ал интерпретаторды шақырмас бұрын ортаны тазалайтын қаптама скрипт оны басқа пішінде қайтарады.

Байланысты сақтаңыз, жолды жаңартуды емес

Жазбаға қандай мән керектігін жазбас бұрын шешіңіз. Мақсат сессияның қайдан келгенін белгілеу болса, сыртқы шеткі нүктені сақтап, оны бақылау деп белгілеңіз. Мақсат қосылым ұзақтығында сессияны туннель мекенжайына байланыстыру болса, пул мекенжайын сақтап, оны сессияға байланыстырыңыз.

Жаңартуды туннель мекенжайын бөлісетін әр жол бойынша емес, аутентификацияланған тұлға мен ағымдағы сессия бойынша жасаңыз, өйткені пул мекенжайлары қайта пайдаланылады және кеш келген ажырату оқиғасы жаңарақ қосылымның деректерін үстінен жазуы мүмкін. IPv6-ны ашық түрде өңдеңіз, тек IPv4 мәнін үнсіз жазу орнына. NULL сыртқы мекенжайы бар жол қате мекенжайлы жолдан жақсырақ, өйткені біріншісі көрнекі түрде толық емес.

Жазбаны OpenVPN ұсынған сессия идентификаторына байланыстырыңыз, сонда қайта қосылу ескіні өңдеудің орнына жаңа жазба жасайды. Параметрленген өтінімдер мен операцияға қажет рұқсаттары ғана бар тіркелгіні пайдаланыңыз. Ілгек демонның өкілеттігімен жұмыс істейді, сондықтан ұқыпсыз сұраныс қате журнал жолынан кеңірек мәселе.

Ортаны төкпей диагностика жасаңыз

Қандай атаулар болғанын, қай кезең іске қосылғанын және қай интерпретатор қолданылғанын жазыңыз. Бүкіл ортаны басып шығармаңыз, өйткені ілгек процесі журнал файлына түспеуі тиіс қатысы жоқ мәндерді мұралауы мүмкін.

Бір қосылымды басынан аяғына дейін тексеріңіз: сыртқы шеткі нүктені оқыңыз, бөлінген мекенжайды оқыңыз және екеуін де сервердің сол сессияға деген өз көзқарасымен салыстырып растаңыз. Бір клиент үшін жұп расталған соң, байланысқа басқа жерде де сенуге болады.

Қатысты мақалалар