Një profil vpnc rilidhet pastër pas një roaming-u; tre prej tyre prishin me radhë soketat, rrugët dhe gjendjen e zgjidhësit të njëri-tjetrit. Skripti i rilidhjes që vjen me paketën është shkruar për një tunel të vetëm, prandaj rinis çdo profil sa herë që ndonjëri prej tyre është jashtë. Për ta rregulluar kjo kërkon tri gjëra: porta lokale të ndara, një provë që teston një shërbim real për çdo profil dhe një zinxhir i renditur që nuk nis kurrë dy lidhje njëkohësisht.

Jepini secilit profil portën e vet lokale

Një profil vpnc i lënë në portën lokale të parazgjedhur konkurron me profilin që tashmë është duke punuar. Lidhja e dytë dështon ndërsa e para mban portën, dhe rreshti i regjistrit duket si problem i portës kaluese dhe jo si konflikt lokal. Në vend të kësaj, vendosni një rresht për çdo skedar profili:

Local Port 0

Zeroja lë bërthamën të zgjedhë një portë të përkohshme, kështu që dy profile mund të vendosen njëkohësisht. Emërtoni çdo skedar sipas portës kaluese dhe grupit që shërben, mbajeni të lexueshëm vetëm nga root dhe lidhuni gjithmonë me profilin përkatës në vend të një parazgjedhjeje të përbashkët. Një skedar i përbashkët i parazgjedhur është mënyra se si një skript rilidh tunelin e gabuar pasi dikush riemërton një profil.

Skedarët e profilit mbartin kredenciale, prandaj lejet janë pjesë e projektimit dhe jo e pastrimit. Një skedar i lexueshëm nga të gjithë nën /etc/vpnc i dorëzon sekretin e grupit çdo përdoruesi lokal. Mbajeni modalitetin në 0600 me root si pronar dhe lërini skriptet ta lexojnë skedarin si root në vend që të kopjojnë sekrete në argumente. Kjo është edhe arsyeja pse një skript prove nuk duhet të shkruajë kurrë përmbajtjen e skedarit në një regjistër.

Provoni një shërbim për çdo profil, jo adresën e tunelit

Një kërkesë echo drejt adresës së vetë tunelit vërteton kryesisht se ndërfaqja ekziston. Nuk thotë asgjë nëse priti pas saj arrin ende aplikacionin që justifikon tunelin. Ndërfaqja mund të jetë lart ndërsa rruga përtej saj ka ikur tashmë.

Provoni një shërbim për çdo profil me një afat të shkurtër TCP dhe rilidhni vetëm profilin, prova e të cilit dështoi. Dy sekonda ndajnë një rrugë të vdekur nga një e ngadaltë, dhe një provë TCP nuk varet nga fakti nëse ICMP lejohet diku përgjatë rrugës. Ndryshoni vetëm objektivin dhe emrin e konfigurimit midis profileve:

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

Ruajeni atë si /usr/local/bin/ensure-vpn-ops.sh, bëjeni të ekzekutueshëm dhe përsëriteni për çdo profil duke ndryshuar vetëm objektivin e provës dhe emrin e konfigurimit. Një provë që përgjigjet një pyetjeje protokolli i mbijeton portave kaluese që hedhin echo, por vazhdojnë të përcjellin shërbimet që u interesojnë përdoruesve.

Zinxhironi provat që të mos garojnë kurrë

Skripti i rilidhjes që vjen me paketën mund t'i thërrasë provat tuaja me radhë, dhe radha është e gjithë çështja. Dy thirrje vpnc-connect që ekzekutohen bashkë rishkruajnë tabelën e rrugëzimit në një rend që askush nuk e kontrollon, dhe kështu një profil i shëndoshë humbet rrugën e vet.

Mbajini thirrjet në plan të parë, shtoni një vonesë të shkurtër stabilizimi për ndërfaqen poshtë dhe planifikoni zinxhirin nga tabela cron e root, pasi vetëm root mund të rishkruajë rrugët e tunelit:

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

Mbajeni rendin identik midis skriptit të nisjes dhe hyrjes cron, pasi një zinxhir që në nisje ecën në një rend tjetër është në praktikë një program tjetër. Kur një profil varet nga rrugët e një tjetri, vendosni varësinë të parën dhe lëreni provën e mëvonshme të dështojë pa dëm ndërsa tuneli i mëparshëm po ngrihet ende.

Vëzhgoni regjistrin, pastaj thyeni një me qëllim

Regjistroni një rresht për çdo ekzekutim me profilin, objektivin e provës, rezultatin dhe veprimin e ndërmarrë. Pa këtë, një tunel që dridhet çdo minutë duket saktësisht si një që nuk ka rënë kurrë, dhe një gabim prove nuk dallohet nga një ndërprerje e portës kaluese. Regjistri vërteton gjithashtu se zinxhiri preku vetëm profilin që dështoi. Shkruajeni diku që i mbijeton një rinisjeje, përndryshe provat largohen me procesin.

Pastaj thyeni me qëllim një tunel dhe shikoni çfarë ndodh. Ndalni një profil të vetëm dhe konfirmoni cilat procese dhe rrugë janë ende të pranishme:

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

Vetëm profili i ndaluar duhet të rilidhet, dhe sesionet e tjera duhet të mbajnë si proceset ashtu edhe rrugët e tyre. Nëse rinisen dy profile, zinxhiri juaj po ecën paralelisht diku që nuk e prisnit.

Çfarë nuk duhet të bëjë roja

Një rojë që rinis gjithçka sa herë që diçka dështon duket e shëndoshë gjatë testimit dhe shkakton një ndërprerje në një dritare mirëmbajtjeje. Rinisni sipas profilit, kurrë globalisht.

Preferoni një klient të mirëmbajtur kur porta kaluese ofron një të tillë për të njëjtin protokoll dhe mos e kodoni kurrë një fjalëkalim në skript dhe as ta kaloni në një rresht komandash, sepse skedari i profilit e mban tashmë sekretin. Nëse një detyrë duhet të ekzekutohet si përdorues i zakonshëm pasi tuneli është lart, ulni privilegjet brenda skriptit në vend që të gjithë zinxhirin ta ekzekutoni nën atë llogari. Së fundi, rilexoni rrugët pas një rilidhjeje, sepse një profil mund të kthehet me një adresë tjetër të caktuar dhe të lërë një rrugë të vjetruar që asnjë provë e drejtuar drejt adresës së tunelit nuk do ta vërë re kurrë.

Artikuj të ngjashëm