Hâld ferskate vpnc-tunnels oan ’e gong mei probes per profyl
It standert werferbiningsskript giet fan ien tunnel út. Jou elk vpnc-profyl syn eigen poarte, prob in echte tsjinst, en keatling de probes yn ien fêste folchoarder.
Ien vpnc-profyl werferbynt skjin nei in roam; trije fan harren brekke om bar elkoars sockets, rûtes en resolver-steat. It werferbiningsskript út it pakket is skreaun foar ien tunnel, dat it startet elk profyl opnij as ien fan harren del is. Om dat te reparearjen binne trije dingen nedich: aparte lokale poarten, in probe dy’t in echte tsjinst per profyl testet, en ien oardere keatling dy’t nea twa ferbiningen tagelyk rint.
Jou elk profyl syn eigen lokale poarte
In vpnc-profyl dat op ’e standert lokale poarte stiet, konkurrearret mei it profyl dat al rint. De twadde ferbining mislearret wylst de earste de poarte hâldt, en de logrigel liket in gateway-probleem ynstee fan in lokaal konflikt. Set ynstee ien rigel per profylbestân:
Local Port 0Nul lit de kernel in koarte poarte kieze, dat twa profylen kinne tagelyk oprjochte wurde. Neam elk bestân nei de gateway en groep dy’t it tsjinnet, hâld it allinnich foar root lêsber, en ferbyn altyd mei it byhearrende profyl ynstee fan in dielde standert. In dield standertbestân is de manier wêrop in skript de ferkearde tunnel werferbynt nei’t immen in profyl omneamd hat.
Profylbestannen drage ynloggegevens, dat rjochten binne part fan it ûntwerp en net fan it húshâlden. In bestân ûnder /etc/vpnc dat foar elkenien lêsber is, jout it groepsgeheim oan elke lokale brûker. Hâld de modus op 0600 mei root as eigner, en lit de skripten it bestân as root lêze ynstee fan geheimen yn arguminten te kopiearjen. Dêrom moat in probeskript ek nea de ynhâld fan it bestân yn in log sette.
Prob ien tsjinst per profyl, net it tunneladres
In echo-fersyk nei it eigen adres fan ’e tunnel bewiist meast dat de ynterface bestiet. It seit neat oer oft de host dêrefter noch by de applikaasje kin dy’t de tunnel rjochtfeardiget. De ynterface kin oan wêze wylst de rûte derfoar al fuort is.
Prob ien tsjinst per profyl mei in koarte TCP-timeout en ferbyn allinnich it profyl waans probe mislearre. Twa sekonden skiede in deade paad fan in stadich, en in TCP-probe hinget net ôf fan oft ICMP earne lâns de wei tastien is. Feroarje allinnich it doel en de konfignamme tusken profylen:
#!/bin/bash
set -eu
if ! nc -z -w 2 10.63.7.20 8443; then
/usr/sbin/vpnc-connect ops.conf
fiBewarje dat as /usr/local/bin/ensure-vpn-ops.sh, meitsje it útfierber, en werhelje it foar elk profyl mei allinnich it probedoel en de konfignamme feroare. In probe dy’t in protokolkwestje beantwurdet, oerlibbet gateways dy’t echo falle litte wylst se de tsjinsten noch trochjaan dy’t brûkers wichtich fine.
Keatling de probes sadat se nea race
It werferbiningsskript út it pakket kin dyn probes yn folchoarder oanroppe, en folchoarder is it hiele punt. Twa vpnc-connect-opropen dy’t tagelyk rinne, skriuwe de routingstabel om yn in oarder dy’t nimmen kontrolearret, en dêrtroch ferliest in sûn profyl syn rûte.
Hâld de oproppen yn ’e foargrûn, foegje in koarte steltiid ta foar de ûnderlizzende ynterface, en plan de keatling fan root syn cron-tabel, want allinnich root kin de tunnelrûtes omskriuwe:
#!/bin/bash
sleep 20
/usr/local/bin/ensure-vpn-ops.sh
/usr/local/bin/ensure-vpn-lab.shHâld de oarder identyk tusken it opstartskript en de cron-ynstjoering, want in keatling dy’t by it opstarten yn in oare oarder rint, is eins in oar programma. As ien profyl fan in oar syn rûtes ôfhinklik is, set de ôfhinklikens earst en lit de lettere probe skealik mislearje wylst de eardere tunnel noch omheech komt.
Hâld it log yn ’e gaten, en brek dan ien mei opsetsin
Log ien rigel per run mei it profyl, probedoel, resultaat en nommen aksje. Sûnder dat liket in tunnel dy’t elke minút flapt krekt as ien dy’t nea foel, en in probeflater is net fan in gateway-ûnderbrekking te ûnderskieden. It log bewiist ek dat de keatling allinnich it profyl rekke dat mislearre. Skriuw it earne dêr’t it in reboot oerlibbet, oars giet it bewiis mei it proses fuort.
Brek dan mei opsetsin in tunnel en sjoch wat der bart. Stop ien inkeld profyl en befêstigje hokker prosessen en rûtes noch oanwêzich binne:
pgrep -a vpnc
ip -4 route show | grep -E '10[.]63|10[.]90'
tail -n 5 /var/log/ensure-vpn.logAllinnich it stoppe profyl soe werferbûn wurde moatte, en de oare sesjes soene sawol har prosessen as har rûtes hâlde moatte. As twa profylen op ’e nij starte, rint dyn keatling earne parallel dêr’t do it net ferwachte.
Wat de watchdog net dwaan mei
In watchdog dy’t alles op ’e nij start as der wat mislearret, liket sûn by it testen en feroarsaket in ûnderbrekking yn in ûnderhâldsfenster. Start op ’e nij per profyl, nea globaal.
Foarkar in ûnderhâlden klient as de gateway ien foar itselde protokol biedt, en hardkoadearje nea in wachtwurd yn it skript of jou ien op in kommandorigel, want it profylbestân hâldt it geheim al. As in taak as gewoane brûker rinne moat sadree’t de tunnel oan is, ferleegje foech fan binnen it skript ynstee fan de hiele keatling ûnder dat akkount rinne te litten. Ta beslút, lês de rûtes op ’e nij nei in werferbining, want in profyl kin weromkomme mei in oar tawiisd adres en in ferâldere rûte efterlitte dy’t gjin probe rjochte op it tunneladres ea fernimme sil.