Hoidke mitut vpnc tunnelit töös profiilipõhiste kontrollidega
Paketiga kaasas olev taasühendusskript eeldab ühte tunnelit. Andke igale vpnc profiilile oma port, kontrollige tegelikku teenust ja aheldage kontrollid ühte kindlasse järjekorda.
Üks vpnc profiil taastab rändluse järel ühenduse puhtalt; kolm neist rikuvad kordamööda üksteise sokette, marsruute ja lahendaja olekut. Paketiga kaasas olev taasühendusskript on kirjutatud ühe tunneli jaoks, seega taaskäivitab see iga profiili alati, kui ükskõik milline neist on maas. Selle parandamiseks on vaja kolme asja: eraldi kohalikke porte, kontrolli, mis testib iga profiili jaoks tegelikku teenust, ja üht korrastatud ahelat, mis ei käivita kunagi kahte ühendust korraga.
Andke igale profiilile oma kohalik port
Vaikimisi kohalikule pordile jäetud vpnc profiil võistleb juba töötava profiiliga. Teine ühendus ebaõnnestub, kuni esimene hoiab porti, ja logirida näeb välja nagu lüüsi probleem, mitte kohalik konflikt. Pange selle asemel üks rida iga profiilifaili kohta:
Local Port 0Null laseb tuumal valida lühiajalise pordi, nii et kaks profiili saab korraga üles seada. Nimetage iga fail selle lüüsi ja grupi järgi, mida see teenindab, hoidke see loetav ainult rootile ja ühenduge alati sobiva profiiliga, mitte jagatud vaikimisi seadmega. Jagatud vaikimisi fail on viis, kuidas skript pärast profiili ümbernimetamist vale tunneli uuesti ühendab.
Profiilifailid sisaldavad volitusi, seega on õigused osa disainist, mitte koristustööst. Fail, mis on kõigile loetav ja asub kataloogis /etc/vpnc, annab grupisaladuse igale kohalikule kasutajale. Hoidke režiimi 0600 ja omanikuna root, ning laske skriptidel faili rootina lugeda, selle asemel et saladusi argumentidesse kopeerida. Seetõttu ei tohiks kontrolliskript kunagi faili sisu logisse väljastada.
Kontrollige ühte teenust profiili kohta, mitte tunneli aadressi
Kaja päring tunneli enda aadressile tõestab peamiselt seda, et liides on olemas. See ei ütle midagi selle kohta, kas selle taga olev host jõuab endiselt rakenduseni, mis tunneli õigustab. Liides võib olla üleval, samal ajal kui selle taga olev marsruut on juba kadunud.
Kontrollige ühte teenust profiili kohta lühikese TCP ajalõpuga ja ühendage uuesti ainult see profiil, mille kontroll ebaõnnestus. Kaks sekundit eraldab surnud tee aeglasest ja TCP kontroll ei sõltu sellest, kas ICMP on kusagil teel lubatud. Muutke profiilide vahel ainult sihtmärki ja konfiguratsiooni nime:
#!/bin/bash
set -eu
if ! nc -z -w 2 10.63.7.20 8443; then
/usr/sbin/vpnc-connect ops.conf
fiSalvestage see nimega /usr/local/bin/ensure-vpn-ops.sh, tehke käivitatavaks ja korrake iga profiili jaoks, muutes ainult kontrolli sihtmärki ja konfiguratsiooni nime. Kontroll, mis vastab protokolliküsimusele, elab üle lüüsid, mis kajasid maha viskavad, kuid edastavad edasi teenuseid, millest kasutajad hoolivad.
Aheldage kontrollid nii, et need ei võistleks kunagi
Paketiga kaasas olev taasühendusskript võib teie kontrolle järjest kutsuda, ja järjestus ongi kogu mõte. Kaks koos töötavat vpnc-connect kutset kirjutavad marsruutimistabeli ümber järjekorras, mida keegi ei kontrolli, ja nii kaotab terve profiil oma marsruudi.
Hoidke kutsed taustal käivitamata, lisage alusliidesele lühike settimise viivitus ja ajastage ahel rooti cron-tabelist, sest ainult root saab tunneli marsruute ümber kirjutada:
#!/bin/bash
sleep 20
/usr/local/bin/ensure-vpn-ops.sh
/usr/local/bin/ensure-vpn-lab.shHoidke järjekord alglaadimisskripti ja cron-kirje vahel ühesugune, sest alglaadimisel teises järjekorras töötav ahel on tegelikult teine programm. Kui üks profiil sõltub teise marsruutidest, pange sõltuvus esimeseks ja laske hilisemal kontrollil kahjutult ebaõnnestuda, kuni varasem tunnel alles tõuseb.
Jälgige logi ja siis katkestage üks meelega
Logige üks rida iga käivituse kohta koos profiili, kontrolli sihtmärgi, tulemuse ja tehtud toiminguga. Ilma selleta näeb iga minut kõikuv tunnel välja täpselt nagu see, mis ei kukkunud kunagi, ja kontrolli viga ei erista lüüsi katkestusest. Logi tõestab ka seda, et ahel puudutas ainult seda profiili, mis ebaõnnestus. Kirjutage see kuhugi, mis elab üle taaskäivituse, muidu lahkuvad tõendid koos protsessiga.
Seejärel katkestage tunnel meelega ja vaadake, mis juhtub. Peatage üks profiil ja kinnitage, millised protsessid ja marsruudid on veel olemas:
pgrep -a vpnc
ip -4 route show | grep -E '10[.]63|10[.]90'
tail -n 5 /var/log/ensure-vpn.logUuesti peaks ühenduma ainult peatatud profiil ja teised sessioonid peaksid säilitama nii oma protsessid kui ka marsruudid. Kui kaks profiili taaskäivituvad, töötab teie ahel paralleelselt kuskil, kus te ei oodanud.
Mida valvekoer teha ei tohi
Valvekoer, mis taaskäivitab kõik iga rikke korral, näeb testimisel terve välja ja põhjustab hooldusaknas katkestuse. Taaskäivitage profiili kaupa, mitte kunagi globaalselt.
Eelistage hooldatud klienti, kui lüüs pakub sama protokolli jaoks ühte, ja ärge kunagi kirjutage parooli skripti sisse ega edastage seda käsureal, sest profiilifail hoiab saladust juba. Kui ülesanne peab pärast tunneli tõusmist töötama tavalise kasutajana, vähendage õigusi skripti seest, selle asemel et lasta kogu ahelal selle konto all töötada. Lõpuks lugege marsruudid pärast taasühendust uuesti, sest profiil võib naasta teise määratud aadressiga ja jätta maha aegunud marsruudi, mida ükski tunneli aadressile suunatud kontroll kunagi ei märka.