Илгич скрибиндеги бош $_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 берген сессия идентификаторуна байлаңыз, ошондо кайра туташуу эскини оңдоонун ордуна жаңы жазуу түзөт. Параметрлештирилген билдирүүлөрдү жана операцияга керектүү укуктары гана бар эсепти колдонуңуз. Илгич демондун ыйгарым укугу менен иштейт, ошондуктан этиятсыз суроо туура эмес журнал сабынан кененирээк көйгөй.

Чөйрөнү төгүп салбастан диагностика жасаңыз

Кайсы аттар бар экенин, кайсы баскыч иштегенин жана кайсы интерпретатор колдонулганын жазыңыз. Бүткүл чөйрөнү басып чыгарбаңыз, анткени илгич процесси журнал файлына кирбеши керек болгон тиешесиз маанилерди мурасташы мүмкүн.

Бир туташууну башынан аягына чейин текшериңиз: сырткы четки чекитти окуңуз, бөлүнгөн даректи окуңуз жана экөөнү тең сервердин ошол сессияга болгон өз көз карашына салыштырып тастыктаңыз. Бир кардар үчүн жуп тастыкталгандан кийин, байланышка башка жерде да ишенүүгө болот.

Тектеш макалалар