Firxa $_ENV vojta fi skript tal-hook tidher bħala prova li OpenVPN ma għadda xejn. Normalment hija prova ta' ħaġa oħra għal kollox: PHP kien ikkonfigurat biex ma jimliex dik is-superglobals, u l-valuri kienu fl-ambjent tal-proċess il-ħin kollu. It-tieni konklużjoni falza hija iktar delikata, għax iż-żewġ varjabbli tal-indirizz fil-hook tal-konnessjoni jfissru affarijiet differenti u jintużaw minflok xulxin. Iż-żewġ żbalji jiswew nofs jum jekk tibda minn dak ħażin.

Żewġ indirizzi, żewġ affermazzjonijiet differenti

Il-punt tat-tarf ta' barra huwa dak li s-server osserva meta l-klijent qabbad, disponibbli bħala trusted_ip għal IPv4 u trusted_ip6 għal IPv6. L-indirizz virtwali huwa dak li l-pool assenja għal din is-sessjoni, disponibbli bħala ifconfig_pool_remote_ip.

Huma jwieġbu mistoqsijiet differenti, u rekord normalment ikollu bżonn wieħed minnhom, mhux it-tnejn. L-ewwel huwa minn fejn waslet il-konnessjoni, li tista' tkun indirizz NAT kondiviż minn mijiet ta' nies. It-tieni huwa fejn din is-sessjoni tgħix ġewwa t-tunnel, u tista' tiġi assenjata lil sessjoni oħra iktar tard. Li tħallat it-tnejn jipproduċi rekords li jidhru plaużibbli u huma ħżiena.

Qari minimu jidher hekk.

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

L-ebda valur ma jidentifika persuna. Wieħed huwa osservazzjoni tan-netwerk, l-ieħor huwa kera, u rekord li jqis lil xi wieħed minnhom bħala identifikatur stabbli tat-tagħmir ikun ħażin l-ewwel darba li klijent jerġa' jikkonnettja minn netwerk differenti jew jirċievi indirizz tal-pool differenti. Agħżel il-qasam skont il-mistoqsija li r-rekord irid iwieġeb, imbagħad ikteb dik il-mistoqsija ħdejn il-kolonna.

Iċċekkja kif inbeda PHP, mhux il-qoxra tiegħek

Il-hook jaħdem bħala wild tad-daemon VPN b'ambjent li d-daemon jibni. Il-qoxra interattiva tiegħek għandha ambjent differenti, u li tmexxi l-iskript bl-idejn jittestja l-ambjent tal-qoxra, mhux dak tal-hook.

Ibda billi tikkonferma li l-hook tabilħaqq tela' fil-fażi li stennejt. Skript imwaħħal mal-fażi żbaljata, jew wieħed li qatt ma dam għax id-direttiva tipponta lejn triq oħra, jipproduċi eżatt l-istess sintomu bħal varjabbli nieqes. Żid linja tal-markatur apposta fil-bidu tal-iskript u kkonferma li tidher qabel ma tispezzjona xi ħaġa oħra. Linja waħda bl-istamp tal-ħin fil-log tifred «qatt ma dam» minn «dam mingħajr il-valur».

Imbagħad ikkonferma liema interpretu u liema fajl tal-konfigurazzjoni juża dak is-sejħa. Li tbiddel il-konfigurazzjoni PHP għal server tal-web ma tbiddel xejn fi proċess CLI li jibda OpenVPN, u t-tnejn jistgħu jgħabbu fajls php.ini għal kollox differenti.

Għaliex $_ENV vojta ma tipprova xejn

PHP referenza getenv tiddokumenta qari dirett tal-ambjent tal-proċess, li jirritorna false meta l-isem ma jkunx hemm. Is-superglobals $_ENV timtela separatament, u d-direttiva variables_order tiddeċiedi liema superglobals jimtlew.

Jekk dik id-direttiva tħalli barra E, $_ENV tibqa' vojta tkun xi tkun l-ambjent. Il-kodiċi li jindikaha mbagħad jirrapporta varjabbli nieqsa li fil-fatt tinsab hemm, u l-investigazzjoni tmur lejn OpenVPN meta t-tweġiba tinsab f'php.ini. Iċċekkja d-direttiva għall-konfigurazzjoni CLI b'mod speċifiku, mhux għas-server tal-web.

Il-qari b'getenv jevita din il-konfużjoni kollha, u skript tal-qoxra li jnaddaf l-ambjent qabel ma jsejjaħ lill-interpretu jerġa' jdaħħalha f'forma oħra.

Aħżen assoċjazzjoni, mhux aġġornament tar-ringiela

Iddeċiedi liema valur jeħtieġ ir-rekord qabel tikteb. Jekk l-għan huwa li tinnota minn fejn ġiet sessjoni, aħżen il-punt tat-tarf ta' barra u ttikkettjah bħala osservazzjoni. Jekk l-għan huwa li tqabbel sessjoni ma' indirizz tat-tunnel għat-tul tal-konnessjoni, aħżen l-indirizz tal-pool u qabblu mas-sessjoni.

Aġġorna skont l-identità awtentikata u s-sessjoni attwali, mhux skont kull ringiela li taqsam indirizz tat-tunnel, għax l-indirizzi tal-pool jerġgħu jintużaw u avveniment ta' skonnessjoni tard jista' jikteb fuq id-data ta' konnessjoni iktar ġdida. Immaniġġja l-IPv6 b'mod espliċitu u mhux bil-kwiet il-valur tal-IPv4 biss. Ringiela b'indirizz ta' barra NULL hija aħjar minn ringiela bl-indirizz ħażin, għax l-ewwel tidher b'mod ovvju mhux kompluta.

Qabbel il-kitba mal-identifikatur tas-sessjoni li jipprovdi OpenVPN sabiex konnessjoni mill-ġdid toħloq rekord ġdid minflok ma teditja dak qadim. Uża dikjarazzjonijiet parametrizzati u kont li għandu biss il-permessi li teħtieġ l-operazzjoni. Il-hook jaħdem bl-awtorità tad-daemon, għalhekk mistoqsija traskurata hija problema ikbar minn linja tal-log ħażina.

Iddijanjostika mingħajr ma tarmi l-ambjent

Irreġistra liema ismijiet kienu preżenti, liema fażi damet u liema interpretu ntuża. Tipprintjax l-ambjent kollu, għax proċess tal-hook jista' jiret valuri mhux relatati li m'għandhomx jispiċċaw f'fajl tal-log.

Ivverifika konnessjoni waħda mill-bidu sat-tmiem: aqra l-punt tat-tarf ta' barra, aqra l-indirizz assenjat, u kkonferma t-tnejn mal-fehma tas-server stess dwar dik is-sessjoni. Ladarba l-par ikun ikkonfermat għal klijent wieħed, l-assoċjazzjoni tista' tiġi fiduċja band'oħra.

Artikli relatati