Бір vpnc профилі роумингтен кейін таза қайта қосылады; үшеуі кезекпен бір-бірінің сокеттерін, маршруттарын және шешуші күйін бұзады. Пакеттегі қайта қосылу скрипті бір туннельге жазылған, сондықтан олардың кез келгені өшсе, әр профильді қайта іске қосады. Мұны түзету үшін үш нәрсе керек: бөлек жергілікті порттар, әр профиль үшін нақты қызметті тексеретін тексеру және ешқашан екі қосылымды бір уақытта іске қоспайтын бір реттелген тізбек.

Әр профильге өз жергілікті портын беріңіз

Әдепкі жергілікті портта қалдырылған vpnc профилі әлдеқашан жұмыс істеп тұрған профильмен бәсекелеседі. Біріншісі портты ұстап тұрғанда екінші қосылым сәтсіз аяқталады, және журнал жолы жергілікті қақтығыс емес, шлюз мәселесі сияқты көрінеді. Оның орнына әр профиль файлына бір жол жазыңыз:

Local Port 0

Нөл ядроға қысқа мерзімді порт таңдауға мүмкіндік береді, сондықтан екі профиль бір уақытта құрылуы мүмкін. Әр файлды ол қызмет ететін шлюз мен топтың атымен атаңыз, оны тек root оқи алатындай етіп ұстаңыз және әрдайым ортақ әдепкінің орнына сәйкес профильмен қосылыңыз. Ортақ әдепкі файл — біреу профиль атын өзгерткеннен кейін скрипт қате туннельді қайта қосатын жол.

Профиль файлдары тіркелгі деректерін сақтайды, сондықтан рұқсаттар дизайнның бөлігі, үй шаруасының емес. /etc/vpnc астында бәріне оқылатын файл топтың құпиясын әрбір жергілікті пайдаланушыға береді. Режимді 0600-де ұстаңыз, иесі root болсын, және скрипттер құпияларды аргументтерге көшірудің орнына файлды root ретінде оқысын. Сондықтан тексеру скрипті файл мазмұнын ешқашан журналға баспауы керек.

Әр профиль үшін бір қызметті тексеріңіз, туннель мекенжайын емес

Туннельдің өз мекенжайына жіберілген жаңғырық сұрауы негізінен интерфейстің бар екенін дәлелдейді. Ол артындағы хосттың туннельді ақтайтын қолданбаға әлі жететіні туралы ештеңе айтпайды. Интерфейс қосылып тұруы мүмкін, ал оның арғы жағындағы маршрут әлдеқашан кеткен.

Әр профиль үшін бір қызметті қысқа TCP мерзімімен тексеріңіз және тек тексеруі сәтсіз аяқталған профильді қайта қосыңыз. Екі секунд өлі жолды баяу жолдан ажыратады, ал TCP тексеруі жолдың қай жерінде ICMP рұқсат етілгеніне тәуелді емес. Профильдер арасында тек мақсат пен конфигурация атын өзгертіңіз:

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

Мұны /usr/local/bin/ensure-vpn-ops.sh ретінде сақтаңыз, орындалатын етіп жасаңыз және әр профиль үшін тек тексеру мақсаты мен конфигурация атын өзгерте отырып қайталаңыз. Протокол сұрағына жауап беретін тексеру жаңғырықты тастайтын, бірақ пайдаланушыларға маңызды қызметтерді жалғастыратын шлюздерден аман өтеді.

Тексерулерді ешқашан жарыспайтындай етіп тізбектеңіз

Пакеттегі қайта қосылу скрипті тексерулеріңізді кезекпен шақыра алады, және кезектілік — бүкіл мәселе. Бірге жұмыс істейтін екі vpnc-connect шақыруы маршруттау кестесін ешкім бақыламайтын тәртіппен қайта жазады, және сау профиль өз маршрутын дәл осылай жоғалтады.

Шақыруларды алдыңғы планда ұстаңыз, астыңғы интерфейс үшін қысқа тұрақтандыру кідірісін қосыңыз және тізбекті root-тың cron кестесінен жоспарлаңыз, өйткені туннель маршруттарын тек root қайта жаза алады:

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

Жүктеу скрипті мен cron жазбасы арасындағы тәртіпті бірдей ұстаңыз, өйткені жүктелу кезінде басқа тәртіппен жүретін тізбек шын мәнінде басқа бағдарлама. Бір профиль екіншісінің маршруттарына тәуелді болса, тәуелділікті бірінші қойыңыз және алдыңғы туннель әлі көтеріліп жатқанда кейінгі тексеру зиянсыз сәтсіз болсын.

Журналды қадағалаңыз, сосын біреуін әдейі сындырыңыз

Әр іске қосуға бір жол жазыңыз: профиль, тексеру мақсаты, нәтиже және қабылданған шара. Онсыз әр минут сайын тербелген туннель ешқашан құламаған туннель сияқты көрінеді, ал тексеру қатесін шлюз үзілісінен ажырату мүмкін емес. Журнал тізбектің тек сәтсіз болған профильге тигенін де дәлелдейді. Оны қайта жүктеуден кейін де қалатын жерге жазыңыз, әйтпесе дәлелдер процесспен бірге кетеді.

Сосын туннельді әдейі сындырып, не болатынын қараңыз. Бір профильді тоқтатып, қандай процестер мен маршруттар әлі бар екенін растаңыз:

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

Тек тоқтатылған профиль қайта қосылуы керек, ал қалған сессиялар процестерін де, маршруттарын да сақтауы керек. Егер екі профиль қайта іске қосылса, тізбегіңіз күтпеген жерде қатар жүр.

Күзетші не істемеуі керек

Бірдеңе сәтсіз болғанда бәрін қайта іске қосатын күзетші сынақ кезінде сау көрінеді және қызмет көрсету терезесінде үзіліс тудырады. Профиль бойынша қайта іске қосыңыз, ешқашан жаһандық түрде емес.

Шлюз сол протокол үшін қолдау көрсетілетін клиент ұсынса, соны таңдаңыз, және құпия сөзді скриптке ешқашан қатты жазып қоймаңыз немесе оны пәрмен жолында бермеңіз, өйткені профиль файлы құпияны әлдеқашан сақтайды. Егер тапсырма туннель көтерілгеннен кейін қарапайым пайдаланушы ретінде жүруі керек болса, бүкіл тізбекті сол тіркелгі астында жүргізудің орнына скрипттің ішінен артықшылықтарды азайтыңыз. Соңында, қайта қосылғаннан кейін маршруттарды қайта оқыңыз, өйткені профиль басқа тағайындалған мекенжаймен оралып, туннель мекенжайына бағытталған ешбір тексеру байқамайтын ескірген маршрут қалдыруы мүмкін.

Қатысты мақалалар