Een vpnc-profiel herverbind skoon ná ’n roaming; drie van hulle breek om die beurt mekaar se sockets, roetes en resolveerder-toestand. Die herverbindingskrip wat saam met die pakket kom, is vir een tonnel geskryf, so dit herbegin elke profiel wanneer enige een van hulle af is. Om dit reg te maak, het jy drie dinge nodig: aparte plaaslike poorte, ’n peiling wat ’n werklike diens per profiel toets, en een geordende ketting wat nooit twee verbindings gelyk laat loop nie.

Gee elke profiel sy eie plaaslike poort

’n vpnc-profiel wat op die verstek plaaslike poort gelaat word, kompeteer met die profiel wat reeds loop. Die tweede verbinding misluk terwyl die eerste die poort hou, en die logreël lyk soos ’n gateway-probleem eerder as ’n plaaslike konflik. Stel eerder een reël per profiellêer:

Local Port 0

Nul laat die kernel ’n kortstondige poort kies, so twee profiele kan terselfdertyd opgestel word. Noem elke lêer na die gateway en groep wat dit bedien, hou dit net vir root leesbaar, en verbind altyd met die passende profiel eerder as met ’n gedeelde verstek. ’n Gedeelde versteklêer is hoe ’n skrip die verkeerde tonnel herverbind nadat iemand ’n profiel hernoem het.

Profiellêers dra geloofsbriewe, so regte is deel van die ontwerp, nie van huishouding nie. ’n Lêer onder /etc/vpnc wat vir almal leesbaar is, gee die groepgeheim aan elke plaaslike gebruiker. Hou die modus op 0600 met root as eienaar, en laat die skripte die lêer as root lees eerder as om geheime in argumente te kopieer. Dit is ook waarom ’n peilingskrip nooit die lêerinhoud in ’n log moet weerspieël nie.

Peil een diens per profiel, nie die tonneladres nie

’n Eggo-versoek na die tonnel se eie adres bewys meestal net dat die koppelvlak bestaan. Dit sê niks oor of die gasheer daarbo nog die toepassing kan bereik wat die tonnel regverdig nie. Die koppelvlak kan op wees terwyl die roete anderkant al weg is.

Peil een diens per profiel met ’n kort TCP-tydsperdatum en herverbind net die profiel wie se peiling misluk het. Twee sekondes skei ’n dooie pad van ’n stadige een, en ’n TCP-peiling hang nie daarvan af of ICMP êrens langs die pad toegelaat word nie. Verander net die teiken en die konfignaam tussen profiele:

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

Stoor dit as /usr/local/bin/ensure-vpn-ops.sh, maak dit uitvoerbaar, en herhaal dit vir elke profiel met net die peilteiken en die konfignaam verander. ’n Peiling wat ’n protokolvraag beantwoord, oorleef gateways wat eggo laat val terwyl hulle steeds die dienste aanstuur wat gebruikers nodig het.

Ketting die peilings sodat hulle nooit jaag nie

Die herverbindingskrip uit die pakket kan jou peilings in volgorde roep, en volgorde is die hele punt. Twee vpnc-connect-roepe wat saam loop, herskryf die roetertabel in ’n orde wat niemand beheer nie, en dit is hoe ’n gesonde profiel sy roete verloor.

Hou die roepe in die voorgrond, voeg ’n kort settyd by vir die onderliggende koppelvlak, en skeduleer die ketting uit root se cron-tabel, want net root kan die tonnelroetes herskryf:

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

Hou die volgorde dieselfde tussen die selflaaiskrip en die cron-inskrywing, want ’n ketting wat by selflaai in ’n ander orde loop, is in effek ’n ander program. Wanneer een profiel van ’n ander se roetes afhang, plaas die afhanklikheid eerste en laat die latere peiling onskadelik misluk terwyl die vroeëre tonnel nog opkom.

Hou die log dop en breek dan een opsetlik

Log een reël per lopie met die profiel, peilteiken, resultaat en aksie wat geneem is. Sonder dit lyk ’n tonnel wat elke minuut wapper presies soos een wat nooit geval het nie, en ’n peilingsfout is nie van ’n gateway-onderbreking te onderskei nie. Die log bewys ook dat die ketting net die profiel geraak het wat gefaal het. Skryf dit iewers wat ’n herlaai oorleef, anders vertrek die bewyse saam met die proses.

Breek dan ’n tonnel doelbewus en kyk wat gebeur. Stop ’n enkele profiel en bevestig watter prosesse en roetes nog daar is:

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

Net die gestopte profiel behoort herverbind te word, en die ander sessies behoort beide hul prosesse en hul roetes te behou. As twee profiele herbegin, loop jou ketting parallel êrens waar jy dit nie verwag het nie.

Wat die waghonde nie mag doen nie

’n Wag wat alles herbegin wanneer iets misluk, lyk gesond tydens toetsing en veroorsaak ’n onderbreking in ’n onderhoudsvenster. Herbegin per profiel, nooit globaal nie.

Verkies ’n onderhoude kliënt wanneer die gateway een vir dieselfde protokol bied, en hardkodeer nooit ’n wagwoord in die skrip of gee een op ’n opdragreël deur nie, want die profiellêer hou reeds die geheim. As ’n taak as ’n gewone gebruiker moet loop sodra die tonnel op is, verminder voorregte van binne die skrip eerder as om die hele ketting onder daardie rekening te laat loop. Laastens, lees die roetes weer ná ’n herverbinding, want ’n profiel kan met ’n ander toegewysde adres terugkeer en ’n verouderde roete los wat geen peiling op die tonneladres ooit sal raaksien nie.

Verwante artikels