Adreses atgriešana no client-connect skripta izskatās tā, it kā tai būtu jāiestata klienta IP. Bet tā nenotiek: vienīgais āķa kanāls uz serveri ir pagaidu fails, kura ceļš nāk kā skripta pēdējais arguments, un adrese tur jāieraksta ifconfig-push sintaksē. Skripts, kas izdrukā adresi vai beidzas ar nulli, neko neierakstot, izveido savienotu klientu ar adresi no baseina, un servera žurnāls izskatās pilnīgi veselīgs.

Apjukums ir saprotams, jo vairāki citi āķi patiešām atbild ar iziešanas kodiem vai vides mainīgajiem. Šim ir savs līgums, un līgums sākas ar faila nosaukumu.

Āķis raksta failu, nevis atgriešanas vērtību

Deklarācija ir divas rindas: script-security 2, lai atļautu izsaukumu, pēc tam client-connect /etc/openvpn/server/assign-address.sh. Kad klients autentificējas, serveris izpilda šo skriptu, pievienojot ģenerēto faila ceļu kā pēdējo argumentu, kas ir $1 tikai tad, ja deklarācija nepievieno savus papildu argumentus. Viss, kas tiek attiecināts uz šo klientu, tiek ierakstīts šajā failā kā parastas direktīvas, viena katrā rindā, tieši tā, kā tās parādītos konfigurācijā. Ietinējs, kas pievieno savus parametrus, nobīda pozīciju, un klasiskais simptoms ir skripts, kas raksta ceļā, kas izskatās kā --verbose.

Iziešanas statuss ir otra līguma puse. Nulle nozīmē pieņemt un lasīt failu; jebkas cits noraida savienojumu, un tā nekartēta identitāte tiek noraidīta, nevis klusi atgriežas baseinā. Ierakstiet pilnu direktīvu pirms panākumu atgriešanas, lai pusrakstīts fails nekad nekļūtu par klienta konfigurāciju.

Divas direktīvas pelna uzmanību, jo tās mijiedarbojas ar visu pārējo. ifconfig-push fiksē adresi, bet nosūtītā route stāsta klientam, kas ir sasniedzams caur tuneli; atgrieziet pirmo un aizmirstiet otro, un jūs iegūstat klientu ar adresi un bez kurp iet. Secībai failā nav nozīmes, bet pilnīgumam ir. Āķis, kas sūta maršrutu prefiksam, kuru neviens partneris nevar sasniegt, ir tā pati kļūda, skatoties no otras puses.

Ievade nāk caur vides mainīgajiem: common_name, trusted_ip, ifconfig_pool_remote_ip un pārējiem. Izturieties pret tiem visiem kā pret virknēm no servera ārpuses, nekad kā pret shell fragmentiem.

Adrešu kartēšana ir politika, nevis aritmētika

Vilinošs saīsinājums ir parsēt sertifikāta nosaukumu un izmantot tā ciparus kā pēdējo oktetu. Tas nav sadalītājs, un tas neizdodas parastos veidos: divi nosaukumi ar vienu un to pašu sufiksu saduras, nosaukums, kas beidzas ar 300, nav adrese, un administratora pārdēvēts sertifikāts klusi pārvieto ierīci. Katrā izsaukumā pārbaudiet piederību apakštīklam, izmantojamo resursdatoru diapazonu, rezervētās adreses un unikalitāti, un glabājiet kartējumu tabulā, ko cilvēks var izlasīt.

Kas kontrolē nosaukumu, tas kontrolē adresi, tāpēc izlemiet, ko common_name šajā izvietojumā patiešām pārstāv. Ja ir iespējots username-as-common-name, identitāte ir pieteikšanās, nevis sertifikāta subjekts. Nekad nenododiet šo vērtību shell novērtēšanai un nekad neļaujiet klientam ietekmēt faila ceļu.

Uz reģistru balstītam sadalītājam ir jāiztur vienlaicība. Rezervējiet adresi atomiski, apstrādājiet neizdevušos rakstīšanu, neuzņemot puskonfigurētu klientu, un atzīmējiet katru sadalījumu ar savienojumu, kuram tas pieder, lai vēla vecākas sesijas atvienošanās nevarētu atbrīvot adresi, kuru jau tur jaunāka. Vairākas servera instances, kas dala vienu baseinu, šo prasību padara asāku, nevis neobligātu.

Topoloģija nosaka, ko nozīmē ifconfig-push

Ar topology subnet 10.77.0.0/24 tīklā ifconfig-push 10.77.0.20 255.255.255.0 ir adrese plus tās tīkla maska. Saskaņā ar topology net30 otrais arguments nemaz nav maska, bet gan partnera adrese, tāpēc apakštīkla formas kopēšana uz net30 serveri dod klientu, kas savienojas un nevar laist cauri trafiku. Mainiet topoloģiju apzināti, nekad ne tāpēc, lai piemērs izskatītos konsekvents. Serverim, kas jau darbojas ar net30, ir dzīvi klienti vecajā adresācijā, tāpēc pārslēgšanās ir migrācija ar apkopes logu, nevis vienas rindas labojums.

Statiskajām adresēm jāatrodas ārpus dinamiskā baseina un ārpus katras citas statiskās piešķires, tostarp tām, ko izsniedz parastie client-config-dir faili. Ja divi mehānismi var radīt vienu un to pašu adresi dažādiem klientiem, viens no tiem galu galā to izdarīs.

Pārbaudiet četrus gadījumus, pirms tam uzticaties

Palaidiet tās pašas pārbaudes kartētai identitātei, nekartētai, atkārtotai savienošanai un simulētai reģistra kļūmei. openvpn --config client.ovpn --verb 4 parāda piešķirto adresi push atbildē, un serverī grep -A2 PUSH_REPLY /var/log/openvpn/openvpn.log apstiprina, kas patiešām tika nosūtīts. Nekartētajai identitātei gaidītais rezultāts ir noraidīts savienojums, nevis baseina adrese.

Pēc tam pārbaudiet direktoriju, kurā dēmons raksta šos pagaidu failus. Skripts tiek izpildīts pazeminātā pakalpojuma kontekstā, tāpēc ceļš, kurā root var rakstīt, bet dēmons nevar, pārvērš katru savienojumu noraidījumā ar atļauju kļūdu, kas aprakta vairākas rindas zemāk žurnālā.

Piešķiršana nav autorizācija: fiksēta adrese joprojām nedod piekļuvi katram galamērķim aiz servera. Turiet maršrutēšanas un ugunsmūra politiku savā slānī un pārbaudiet to pret tikko fiksēto adresi.

Saistītie raksti