In lege $_ENV-array yn in heakskript fielt as bewiis dat OpenVPN neat trochjûn hat. Meastentiids is it bewiis fan eat hiel oars: PHP wie sa konfigurearre dat it dy superglobale net folle, en de wearden sieten de hiele tiid yn 'e omjouwing fan it proses. De twadde falske konklúzje is subtiler, want de twa adresferoarings yn in ferbiningsheak betsjutte ferskillende dingen en wurde trochinoar brûkt. Beide flaters kostje in middei asst mei de ferkearde begjinst.

Twa adressen, twa ferskillende bewearings

It bûtenste einpunt is wat de tsjinner seach doe't de kliïnt ferbûn, beskikber as trusted_ip foar IPv4 en trusted_ip6 foar IPv6. It firtuele adres is wat de pool foar dizze sesje tawiisde, beskikber as ifconfig_pool_remote_ip.

Se beäntwurdzje ferskillende fragen, en in record hat meastentiids ien fan beide nedich yn stee fan allebeide. De earste is wêr't de ferbining wei kaam, wat in dielde NAT-adres wêze kin dy't hûnderten minsken brûke. De twadde is wêr't dizze sesje yn 'e tunnel libbet, en dy kin letter oan in oare sesje tawiisd wurde. It trochinoar heljen fan de twa jout records dy't leauwensweardich lykje en ferkeard binne.

In minimaal lêzen sjocht der sa út.

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

Gjin fan beide wearden identifisearret in persoan. De iene is in netwarkobservaasje, de oare is in hier, en in record dat ien fan beide as in stabile apparaatidentifikaasje behannelet, sil ferkeard wêze de earste kear dat in kliïnt op 'e nij ferbynt fan in oar netwark of in oar pooladres krijt. Kies it fjild nei de fraach dy't it record beäntwurdzje moat, en skriuw dy fraach dan njonken de kolom.

Kontrolearje hoe't PHP starten is, net dyn shell

De heak rint as bern fan 'e VPN-daemon mei in omjouwing dy't de daemon bout. Dyn ynteraktive shell hat in oare, en it skript mei de hân draaie testet de omjouwing fan 'e shell yn stee fan dy fan 'e heak.

Begjin mei te befêstigjen dat de heak wier yn 'e faze dy'tsto ferwachte, ôfgien is. In skript dat oan 'e ferkearde faze keppele is, of ien dat nea rûn is om't de rjochtline nei in oar paad wiist, jout krekt itselde symptoom as in ûntbrekkende feroaring. Foegje in bewuste markerrigel oan 'e boppekant fan it skript ta en befêstigje dat dy ferskynt foardatsto eat oars ûndersykest. Ien rigel mei tiidstimpel yn it log skiedt nea rûn fan rûn sûnder de wearde.

Befêstigje dan hokker ynterpreteur en hokker konfiguraasjebestân dat oanrop brûkt. It bewurkjen fan 'e PHP-konfiguraasje foar in webserver feroaret neat oan in CLI-proses dy't troch OpenVPN starten is, en de twa kinne hiel ferskillende php.ini-bestannen lade.

Wêrom't in lege $_ENV neat bewisset

De getenv-referinsje fan PHP dokumintearret in direkte lêzing fan 'e omjouwing fan it proses, dy't false weromjout as de namme der net is. De superglobale $_ENV wurdt apart folle, en de rjochtline variables_order beslút hokker superglobalen folle wurde.

As dy rjochtline E weilitten, bliuwt $_ENV leech wat de omjouwing ek befettet. Koade dy't it yndeksearret, meldt dan in ûntbrekkende feroaring dy't der eins wol is, en it ûndersyk giet nei OpenVPN wylst it antwurd yn php.ini sit. Kontrolearje de rjochtline spesifyk foar de CLI-konfiguraasje, net foar de webserver.

Lêzen mei getenv mijt de hiele klasse fan betizing, en in wrapper-skript dat de omjouwing skjinfaget foardat it de ynterpreteur oanropt, bringt it yn in oare foarm werom.

Bewarje in assosjaasje, gjin rigelbywurking

Beslút hokker wearde it record nedich hat foardatsto it skriuwst. As it doel is om te notearjen wêr't in sesje wei kaam, bewarje dan it bûtenste einpunt en label it as observaasje. As it doel is om in sesje oan in tunneladres te keppeljen foar de doer fan in ferbining, bewarje dan it pooladres en keppelje it oan 'e sesje.

Wurkby by de autentisearre identiteit en de hjoeddeiske sesje yn stee fan by elke rigel dy't in tunneladres dielt, om't pooladressen op 'e nij brûkt wurde en in lette ôfbrekfarring oars de gegevens fan in nijere ferbining oerskriuwe kin. Behannelje IPv6 eksplisyt yn stee fan stil allinnich de IPv4-wearde te skriuwen. In rigel mei in NULL bûtenadres is better as in rigel mei de ferkearde, om't de earste sichtber ûnfolslein is.

Keppelje it skriuwen oan 'e sesje-identifikaasje dy't OpenVPN leveret, sadat in nije ferbining in nij record makket yn stee fan it âlde te bewurkjen. Brûk parametrearre útspraken en in akkount mei allinnich de rjochten dy't de operaasje nedich hat. In heak rint mei it gesach fan 'e daemon, dus in sleauwe query is in grutter probleem as in ferkearde logrigel.

Diagnostisearje sûnder de omjouwing te stoarten

Log hokker nammen oanwêzich wiene, hokker faze rûn en hokker ynterpreteur brûkt is. Printsje net de hiele omjouwing, om't in heakproses ûnferbûne wearden ervje kin dy't net yn in logbestân hearre.

Ferifiearje ien ferbining fan begjin oant ein: lês it bûtenste einpunt, lês it tawiisde adres, en befêstigje beide tsjin 'e eigen blik fan 'e tsjinner op dy sesje. As it pear foar ien kliïnt befêstige is, kin de assosjaasje earne oars fertroud wurde.

Relatearre artikelen