Tartson életben több vpnc-alagutat profilonkénti ellenőrzésekkel
A csomagban lévő újracsatlakozási szkript egyetlen alagutat feltételez. Adjon minden vpnc-profilnak saját portot, ellenőrizzen valódi szolgáltatást, és fűzze az ellenőrzéseket egyetlen rögzített sorrendbe.
Egy vpnc-profil tisztán újracsatlakozik egy barangolás után; három közülük felváltva egymás socketjeit, útvonalait és feloldó-állapotát töri el. A csomagban lévő újracsatlakozási szkript egyetlen alagútra készült, ezért minden profilt újraindít, amikor bármelyik leállt. A javításhoz három dolog kell: külön helyi portok, egy ellenőrzés, amely profilonként valódi szolgáltatást próbál, és egy rendezett lánc, amely soha nem indít két kapcsolatot egyszerre.
Adjon minden profilnak saját helyi portot
Az alapértelmezett helyi porton hagyott vpnc-profil verseng a már futó profillal. A második kapcsolat meghiúsul, miközben az első tartja a portot, és a naplósor inkább átjáróproblémának tűnik, mint helyi ütközésnek. Helyette tegyen egy sort profilonként:
Local Port 0A nulla engedi, hogy a kernel rövid életű portot válasszon, így két profil egyszerre állítható fel. Nevezze el minden fájlt az átjáró és a csoport után, amelyet kiszolgál, tartsa csak root számára olvashatónak, és mindig a megfelelő profillal csatlakozzon a megosztott alapértelmezés helyett. A megosztott alapértelmezett fájl az, ahogyan egy szkript a rossz alagutat csatlakoztatja újra, miután valaki átnevezett egy profilt.
A profilfájlok hitelesítő adatokat hordoznak, ezért a jogosultságok a tervezés részei, nem a házimunka. A /etc/vpnc alatt mindenki számára olvasható fájl a csoport titkát minden helyi felhasználónak átadja. Tartsa a módot 0600-on root tulajdonossal, és hagyja, hogy a szkriptek rootként olvassák a fájlt, ahelyett hogy titkokat másolnának argumentumokba. Ezért is nem szabadna egy ellenőrző szkriptnek soha a fájl tartalmát naplóba írnia.
Profilonként egy szolgáltatást ellenőrizzen, ne az alagút címét
Az alagút saját címére küldött visszhangkérés leginkább azt bizonyítja, hogy a csatoló létezik. Semmit nem mond arról, hogy a mögötte lévő gazdagép még eléri-e azt az alkalmazást, amely az alagutat indokolja. A csatoló lehet fent, miközben a mögötte lévő útvonal már eltűnt.
Profilonként egy szolgáltatást ellenőrizzen rövid TCP-időtúllépéssel, és csak azt a profilt csatlakoztassa újra, amelynek ellenőrzése meghiúsult. Két másodperc választja el a halott útvonalat a lassútól, és a TCP-ellenőrzés nem függ attól, hogy az ICMP engedélyezett-e valahol az útvonalon. A profilok között csak a célt és a konfiguráció nevét változtassa:
#!/bin/bash
set -eu
if ! nc -z -w 2 10.63.7.20 8443; then
/usr/sbin/vpnc-connect ops.conf
fiMentse ezt /usr/local/bin/ensure-vpn-ops.sh néven, tegye futtathatóvá, és ismételje meg minden profilra, csak az ellenőrzés célját és a konfiguráció nevét változtatva. Az az ellenőrzés, amely protokollkérdésre válaszol, túléli azokat az átjárókat, amelyek eldobják a visszhangot, de továbbítják a felhasználóknak fontos szolgáltatásokat.
Fűzze láncba az ellenőrzéseket, hogy soha ne versenyezzenek
A csomagban lévő újracsatlakozási szkript sorban hívhatja az ellenőrzéseit, és a sorrend az egész lényeg. Két együtt futó vpnc-connect hívás olyan sorrendben írja újra az útválasztási táblát, amelyet senki nem irányít, és így veszíti el egy egészséges profil az útvonalát.
Tartsa a hívásokat előtérben, adjon rövid beállási késleltetést az alatta lévő csatolónak, és ütemezze a láncot root cron-táblájából, mert csak root írhatja át az alagút útvonalait:
#!/bin/bash
sleep 20
/usr/local/bin/ensure-vpn-ops.sh
/usr/local/bin/ensure-vpn-lab.shTartsa azonos sorrendben az indítószkriptet és a cron-bejegyzést, mert az indításkor más sorrendben futó lánc gyakorlatilag másik program. Ha egy profil egy másik útvonalaitól függ, tegye a függőséget előre, és hagyja a későbbi ellenőrzést ártalmatlanul meghiúsulni, miközben a korábbi alagút még feljön.
Figyelje a naplót, majd törjön el egyet szándékosan
Naplózzon egy sort futásonként a profillal, az ellenőrzés céljával, az eredménnyel és a megtett intézkedéssel. Enélkül a percenként lebegő alagút pontosan úgy néz ki, mint amely soha nem esett ki, és egy ellenőrzési hiba megkülönböztethetetlen egy átjárókieséstől. A napló azt is bizonyítja, hogy a lánc csak azt a profilt érintette, amely meghiúsult. Olyan helyre írja, amely túlél egy újraindítást, különben a bizonyíték a folyamattal együtt távozik.
Aztán törjön el szándékosan egy alagutat, és figyelje, mi történik. Állítson le egyetlen profilt, és erősítse meg, mely folyamatok és útvonalak vannak még jelen:
pgrep -a vpnc
ip -4 route show | grep -E '10[.]63|10[.]90'
tail -n 5 /var/log/ensure-vpn.logCsak a leállított profilt kellene újracsatlakoztatni, a többi munkamenetnek pedig meg kellene tartania a folyamatait és az útvonalait is. Ha két profil újraindul, a lánc valahol párhuzamosan fut, ahol nem számított rá.
Mit nem szabad a felügyelőnek tennie
A felügyelő, amely mindent újraindít, amikor valami meghiúsul, teszt közben egészségesnek látszik, és kiesést okoz egy karbantartási ablakban. Profilonként indítsa újra, soha nem globálisan.
Előnyben részesítse a karbantartott klienst, amikor az átjáró kínál egyet ugyanahhoz a protokollhoz, és soha ne égetett jelszót írjon a szkriptbe, se ne adjon át egyet parancssorban, mert a profilfájl már őrzi a titkot. Ha egy feladatnak hétköznapi felhasználóként kell futnia, amint az alagút fent van, csökkentse a jogosultságokat a szkripten belülről, ahelyett hogy a teljes láncot azon a fiókon futtatná. Végül olvassa újra az útvonalakat újracsatlakozás után, mert egy profil más kiosztott címmel térhet vissza, és elavult útvonalat hagyhat maga után, amelyet az alagút címére irányuló ellenőrzés soha nem vesz észre.