Hald fleire vpnc-tunnelar oppe med sonder per profil
Standard attkoplingsskript går ut frå éin tunnel. Gje kvar vpnc-profil sin eigen port, sonder ei ekte teneste, og kjed saman sondene i éi fast rekkjefølgje.
Éin vpnc-profil koplar seg reint opp att etter ein roaming; tre av dei øydelegg på omgang kvarandre sine socketar, ruter og resolver-tilstand. Attilkoplingsskriptet frå pakken er skrive for éin tunnel, så det startar kvar profil på nytt når som helst ein av dei er nede. Å rette det krev tre ting: separate lokale portar, ein sonder som testar ei ekte teneste per profil, og éi ordna kjede som aldri køyrer to tilkoplingar samstundes.
Gje kvar profil sin eigen lokale port
Ein vpnc-profil som blir ståande på den lokale standardporten, konkurrerer med profilen som alt køyrer. Den andre tilkoplinga feilar medan den første held porten, og logglinja ser ut som eit gateway-problem snarare enn ein lokal konflikt. Set i staden éi linje per profilfil:
Local Port 0Null lèt kjernen velje ein tilfeldig port, så to profilar kan etablerast samstundes. Namngje kvar fil etter gatewayen og gruppa ho tenar, hald ho lesbar berre for root, og kople alltid til med den samsvarande profilen i staden for ein delt standard. Ei delt standardfil er måten eit skript koplar til feil tunnel att etter at nokon har gjeve ein profil nytt namn.
Profilfiler inneheld påloggingsdata, så rettar er ein del av designet og ikkje av oppryddinga. Ei fil under /etc/vpnc som alle kan lese, gjev gruppehemmelegheita til kvar lokal brukar. Hald modusen på 0600 med root som eigar, og la skripta lese fila som root i staden for å kopiere hemmelegheiter inn i argument. Det er òg derfor eit sondeskript aldri bør skrive filinnhaldet til loggen.
Sonder éi teneste per profil, ikkje tunneladressa
Ein ekko-førespurnad til tunnelens eigen adresse beviser stort sett berre at grensesnittet finst. Han seier ingenting om verten bak framleis når applikasjonen som rettferdiggjer tunnelen. Grensesnittet kan vere oppe medan ruta bak alt er borte.
Sonder éi teneste per profil med eit kort TCP-tidsavbrot, og kople berre profilen som sonden feila på, opp att. To sekund skil ei død lei frå ei langsam, og ein TCP-sonder er ikkje avhengig av at ICMP er tillate nokon stad langs vegen. Endre berre målet og konfigurasjonsnamnet mellom profilane:
#!/bin/bash
set -eu
if ! nc -z -w 2 10.63.7.20 8443; then
/usr/sbin/vpnc-connect ops.conf
fiLagre det som /usr/local/bin/ensure-vpn-ops.sh, gjer det køyrbart, og gjer det om att for kvar profil med berre sondemålet og konfigurasjonsnamnet endra. Ein sonder som svarar på eit protokollspørsmål, overlever gatewayar som droppar ekko men framleis sender vidare tenestene brukarane bryr seg om.
Kjed saman sondene slik at dei aldri kappast
Attilkoplingsskriptet frå pakken kan kalle sondene dine i rekkjefølgje, og rekkjefølgja er heile poenget. To vpnc-connect-kall som køyrer samstundes, skriv om rutetabellen i ei rekkjefølgje ingen kontrollerer, og det er slik ein sunn profil mistar ruta si.
Hald kalla i framgrunnen, legg til ei kort innsvingingsforsinking for grensesnittet under, og planlegg kjeda frå cron-tabellen til root, sidan berre root kan skrive om tunnelrutene:
#!/bin/bash
sleep 20
/usr/local/bin/ensure-vpn-ops.sh
/usr/local/bin/ensure-vpn-lab.shHald rekkjefølgja identisk mellom oppstartsskriptet og cron-oppføringa, sidan ei kjede som ved oppstart køyrer i ei anna rekkjefølgje, i praksis er eit anna program. Når éin profil er avhengig av rutene til ein annan, plasser avhengigheita først og lat den seinare sonden feile ufarleg medan den tidlegare tunnelen framleis kjem opp.
Følg med på loggen, og øydelegg så ein med vilje
Logg éi linje per køyring med profilen, sondemålet, resultatet og handlinga som vart gjord. Utan det ser ein tunnel som blafrar kvart minutt, nøyaktig ut som ein som aldri fall, og ein sonderfeil kan ikkje skiljast frå eit gateway-utfall. Loggen beviser òg at kjeda berre rørte profilen som feila. Skriv han på ein stad som overlever ein omstart, elles forsvinn prova med prosessen.
Øydelegg så ein tunnel med vilje og sjå kva som skjer. Stopp éin einskild profil og stadfest kva prosessar og ruter som framleis finst:
pgrep -a vpnc
ip -4 route show | grep -E '10[.]63|10[.]90'
tail -n 5 /var/log/ensure-vpn.logBerre den stoppa profilen bør koplast til att, og dei andre sesjonane bør halde både prosessane og rutene sine. Viss to profilar startar på nytt, køyrer kjeda di parallelt ein stad du ikkje venta.
Kva vakthunden ikkje må gjere
Ein vakthund som startar alt på nytt når noko feilar, ser sunn ut under testing og valdar eit utfall i eit vedlikehaldsvindauge. Start på nytt per profil, aldri globalt.
Føretrekk ein vedlikehalden klient når gatewayen tilbyr ein for same protokoll, og hardkod aldri eit passord i skriptet eller send eit på ei kommandolinje, fordi profilfila alt held hemmelegheita. Viss ei oppgåve må køyre som vanleg brukar når tunnelen er oppe, senk privilegia inne frå skriptet i staden for å la heile kjeda køyre under den kontoen. Til slutt, les rutene på nytt etter ei attkopling, fordi ein profil kan kome tilbake med ei anna tildelt adresse og etterlate ei utdatert rute som ingen sonder retta mot tunneladressa nokon gong vil leggje merke til.