Ee vpnc-Profil verbënnt sech no engem Roaming propper nees; dräi vun hinnen zerstéieren sech ofwiesselnd géigesäiteg hir Sockets, Routen an den Zoustand vum Resolver. Den agebaute Reconnect-Skript ass fir een eenzegen Tunnel geschriwwen, dofir start hien all Profil nei, soubal ee vun hinnen erof ass. Fir dat ze fixe brauch een dräi Saachen: getrennte lokal Porten, eng Prüfung déi pro Profil e richtegen Service testt, an eng geuerdnet Kette déi ni zwee Verbindungen op eemol start.

Gitt all Profil säin eigenen lokale Port

En vpnc-Profil deen um Standard-lokale-Port gelooss gëtt, konkurréiert mat deem Profil deen schon leeft. Déi zweet Verbindung fällt aus wärend déi éischt de Port hält, an d’Loglinn gesäit aus wéi e Gateway-Problem an net wéi e lokale Konflikt. Setzt amplaz eng Linn pro Profil-Datei:

Local Port 0

Null léisst de Kernel en temporäre Port wielen, sou datt zwee Profiler gläichzäiteg opgebaut kënne ginn. Nennt all Datei no dem Gateway an der Grupp déi se déngt, hält se nëmme fir root liesbar, an verbënnt ëmmer mam passenden Profil amplaz vun engem gedeelten Standard. Eng gedeelt Standard-Datei ass de Wee wéi e Skript den falschen Tunnel nei verbënnt nodeems een e Profil ëmbenannt huet.

Profil-Dateie droen Umeldungsdonnéeën, dofir gehéieren d’Rechter zum Design an net zum Stot. Eng Datei ënner /etc/vpnc déi jiddwereen liese kann, gëtt dem Grupp säi Geheimnis un all lokale Benotzer. Halt de Modus op 0600 mam root als Proprietär, a loosst d’Skripten d’Datei als root liesen amplaz Geheimnisser an d’Argumenter ze kopéieren. Dofir sollt e Prüfskript och ni den Inhalt vun der Datei an de Log schreiwen.

Prueft ee Service pro Profil, net d’Adress vum Tunnel

En Echo-Ufro un d’Adress vum Tunnel selwer beweist haaptsächlech datt d’Interface existéiert. Se seet näischt doriwwer aus, ob den Host hannendrun nach d’Applikatioun erreecht déi den Tunnel berechtegt. D’Interface kann uewen sinn während d’Route hannendrun schon fort ass.

Prueft ee Service pro Profil mat engem kuerzen TCP-Timeout a verbënnt nëmmen de Profil nei deem seng Prüfung ausgefalen ass. Zwou Sekonnen trennen en doudege Wee vun engem luesen, an eng TCP-Prüfung hänkt net dovun of ob ICMP iergendwou um Wee erlaabt ass. Ännert just d’Zil an den Numm vun der Konfiguratioun tëscht de Profiler:

#!/bin/bash
set -eu
if ! nc -z -w 2 10.63.7.20 8443; then
  /usr/sbin/vpnc-connect ops.conf
fi

Späichert dat als /usr/local/bin/ensure-vpn-ops.sh, maacht et ausféierbar a widderhuelt et fir all Profil andeems Dir just d’Prüfziel an den Numm vun der Konfiguratioun ännert. Eng Prüfung déi eng Protokollsfro beäntwert iwwersteet Gateways déi Echo verwerfen awer nach ëmmer d’Servicer virubréngen déi de Benotzer wichteg sinn.

Verkett d’Prüfungen sou datt se ni géinteneen lafen

Den agebaute Reconnect-Skript kann är Prüfungen an der Rei ruffen, an d’Rei ass de ganzen Punkt. Zwee vpnc-connect-Opruffer déi zesumme lafen, schreiwen d’Routingtabell an enger Rei ëm déi keen kontrolléiert, an esou verléiert en gesonde Profil seng Route.

Halt d’Opruffer am Virdergrond, füügt eng kuerz Berouegungsverzögerung fir den ënnerläitenden Interface dobäi, a plangt d’Kette vun der cron-Tabell vum root, well nëmmen de root d’Tunnelroute kann ëmschreiwen:

#!/bin/bash
sleep 20
/usr/local/bin/ensure-vpn-ops.sh
/usr/local/bin/ensure-vpn-lab.sh

Halt d’Rei identesch tëscht dem Startskript an dem cron-Antrag, well eng Kette déi beim Start an enger anerer Rei leeft effektiv en anert Programm ass. Wann ee Profil vun de Route vun engem aneren ofhänkt, setzt d’Ofhängegkeet fir d’éischt a loosst déi spéider Prüfung harmlos ausfalen während den éischten Tunnel nach eropkënnt.

Kuckt de Log, da briecht een absichtlech

Loggt eng Linn pro Laf mam Profil, dem Prüfziel, dem Resultat an der gehollener Aktioun. Ouni dat gesäit en Tunnel deen all Minutt flappert genee esou aus wéi een deen ni erofgaangen ass, an e Feeler an der Prüfung ass net vun engem Gateway-Ausfall z’ënnerscheeden. De Log beweist och datt d’Kette just de Profil beréiert huet deen ausgefall ass. Schreift en do wou en en Neistart iwwersteet, soss geet de Beweis mam Prozess fort.

Da briecht en Tunnel absichtlech a kuckt wat geschitt. Halt een eenzegen Profil un a bestätegt wéi eng Prozesser a Route nach do sinn:

pgrep -a vpnc
ip -4 route show | grep -E '10[.]63|10[.]90'
tail -n 5 /var/log/ensure-vpn.log

Nëmmen de gestoppte Profil sollt nei verbonne ginn, an déi aner Sitzunge sollten souwuel hir Prozesser wéi och hir Route behalen. Wann zwee Profiler nei starten, leeft är Kette parallell iergendwou wou Dir et net erwaart hutt.

Wat den Watchdog net däerf maachen

En Watchdog deen alles nei start soubal eppes ausfällt gesäit beim Teste gesond aus a verursaacht en Ausfall an engem Ënnerhaltsfenster. Start pro Profil nei, ni global.

Bevirzugt e gepflegte Client wann de Gateway een fir dee selwechte Protokoll ubitt, a hardcodéiert ni en Passwuert an de Skript oder gitt een op enger Kommandozeil, well d’Profil-Datei d’Geheimnis schon hält. Wann eng Aufgab nach dem Tunnel misst als normale Benotzer lafen, reduzéiert d’Privilegien aus dem Skript eraus amplaz déi ganz Kette ënner deem Kont lafen ze loossen. Schlussendlech liest d’Route no enger Neiverbindung nach eng Kéier, well e Profil mat enger anerer zougeweisener Adress zréckkomme kann an eng al Route hannerléisst déi keng Prüfung géint d’Adress vum Tunnel jeemools bemierkt.

Ähnlech Artikelen