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-ээс өгдөг сессийн танигчтай холбо. Параметржсэн өгүүлбэр болон үйлдэлд шаардлагатай зөвхөн зөвшөөрөлтэй бүртгэл ашигла. Дэгээ деймоны эрхээр ажилладаг тул болгоомжгүй асуулга нь буруу бүртгэлийн мөрөөс илүү том асуудал юм.
Орчныг асгахгүйгээр оношло
Аль нэрс байсан, аль үе шат ажилласан, аль интерпретатор ашиглагдсаныг бүртгэ. Бүх орчныг хэвлэхгүй бай, учир нь дэгээний процесс нь бүртгэлийн файлд орох ёсгүй хамааралгүй утгыг өвлөж болно.
Нэг холболтыг эхнээс эцэс хүртэл шалга: гадаад төгсгөлийн цэгийг уншиж, олгосон хаягийг уншиж, хоёуланг нь серверийн тухайн сессийн талаарх өөрийн үзэлтэй тулгаж батла. Нэг клиентийн хувьд хос батлагдсаны дараа холбоосыг өөр газарт итгэж болно.