Tunnel tõuseb ja klient ühendub, kuid fikseeritud aadress ja selle ühe kasutaja jaoks määratud tõugatud marsruudid on puudu. Logis ei ole “file not found”, ja just see saadab inimesi sertifikaate uuesti genereerima. Enamikul juhtudel töötab deemon teisest kataloogist kui see shell, milles testisid, ja client-config-dir ei lahendatud kunagi nii, nagu eeldasid. Parandus on tee korrigeerimine, mitte mandaatide lähtestamine.

Loe unitit enne, kui konfiguratsiooni puudutad

Alusta protsessist, mis tegelikult töötab, mitte failist, mida muutsid. Küsi systemd-ilt käivitusrida, töökataloog ja konto, milleni see langeb. Need kolm vastust selgitavad enamikku selle klassi riketest:

systemctl show openvpn-server@server -p ExecStart -p WorkingDirectory -p User -p RootDirectory

Tühi WorkingDirectory tähendab, et unit algab kataloogis /, seega otsitakse suhtelist client-config-dir ccd kataloogist /ccd. Seda kataloogi peaaegu kunagi ei ole ja deemon ei pea selle puudumist fataalseks.

Võrdle seda interaktiivse käivitusega, mida testimise ajal kasutasid, kus sinu shelli praegune kataloog oli tõenäoliselt konfiguratsioonikataloog. Sama fail, samad märksõnad, kaks erinevat tulemust.

Mille suhtes suhteline tee lahendatakse

Märksõna lahendatakse protsessi töökataloogi suhtes hetkel, mil valikut kasutatakse. See ei tähenda “selle konfiguratsioonifaili kõrval, mille ma edastasin valikuga --config”. OpenVPN loeb hea meelega konfiguratsiooni absoluutsest teest ja lahendab suhtelised väärtused ikkagi mujal, ja täpselt see ongi lõks. OpenVPN 2.6 käsiraamat esitab reegli jaotises --client-config-dir ja veel kord jaotises --cd.

Märksõna cd muudab seda konteksti enne teiste failide lugemist, seega unit, mis määrab cd /etc/openvpn/server ja seejärel client-config-dir ccd, lahendatakse kujule /etc/openvpn/server/ccd. Kui lisad cd, kontrolli direktiivide järjekorda ja pea meeles, et see mõjutab kõiki teisi suhtelisi viiteid samas failis.

Käi tee läbi deemoni kontona

Tee võib olla õige ja siiski loetamatu. Pärast privileegide langetamist ei ole deemon enam root, seega vajab iga ülemkataloog selle konto jaoks otsinguõigust ja kliendifail ise lugemisõigust. Üks puuduv käivitusbit ülemkataloogis on piisav, et faili peita, ja viga ilmneb ainult kliendina, kes saab vaikselt vaikevõrgu.

namei prindib iga komponendi õigused järjekorras, mis on kiirem kui kataloogide ükshaaval kontrollimine:

namei -l /etc/openvpn/server/ccd/client1

Seejärel testi lugemist teenusekontona, mitte iseendana:

runuser -u openvpn -- test -r /etc/openvpn/server/ccd/client1 && echo readable

Kui unit kasutab chroot, peab kataloog olema vangla sees, ja konfiguratsiooni tee tõlgendatakse pärast chroot'i rakendamist. Fail, mis on hostil väljaspool vanglat, on seestpoolt nähtamatu.

Kinnita otsing, mitte ära oleta

Tõsta logi taset üheks taaskäivituseks ja loe, mida server ütleb kliendipõhiste valikute kohta. Tasemel verb 4 teatab deemon imporditud kliendipõhise konfiguratsiooni, seega puuduv rida on otsene tõend, et selle ühenduse jaoks ei loetud ühtegi faili.

openvpn --config /etc/openvpn/server.conf --verb 4 --client-config-dir /etc/openvpn/server/ccd

Käivita see esiplaanil teisel pordil ja ühenda üks klient. See eemaldab systemd'i täielikult pildilt: kui ülekirjutused ilmuvad siin, aga mitte teenuse all, on erinevus uniti kontekstis, mitte failis.

Otsusta, mis peaks juhtuma, kui ükski fail ei sobi. Ilma valikuta ccd-exclusive võetakse klient vastu ainult globaalsete võrgu seadetega, ja see on ülal kirjeldatud vaikne rike. Sellega muutub puuduv fail tagasi lükatud ühenduseks, ja seda keeldumist on kergem märgata, kuid koormuse all raskem siluda.

Paranda, taaskäivita, kontrolli

Tee kataloog konfiguratsioonis absoluutseks ja jäta see nii. Suhtelised teed on ohutud ainult siis, kui unit kinnitab töökataloogi, ja kinnitamine on lisaliikuv osa, mille keegi hiljem eemaldab.

client-config-dir /etc/openvpn/server/ccd
ccd-exclusive

Taaskäivita instants, ühenda uuesti üks teadaolev klient ja loe aadress, mille see sai, koos talle tõugatud marsruutidega. Kui aadress vastab selle kliendi failis olevale reale ifconfig-push, siis otsing toimis. Kui klient satub endiselt üldisesse võrku, mine tagasi logiridade arvu juurde: null importi tähendab, et tee või identiteet on vale, üks vale sisuga import tähendab, et muudat teist faili, kui deemon loeb.

Võta muudatus tagasi, taastades eelmise uniti ja konfiguratsiooni koos, seejärel taaskäivita. Sertifikaate ei ole selle jaoks vaja uuesti väljastada, ja kataloogiprobleemi käsitlemine mandaadiprobleemina on viis, kuidas viieminutilisest parandusest saab hooldusaken.

Seotud artiklid