એક 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

ફક્ત બંધ કરેલું પ્રોફાઇલ ફરી જોડાવું જોઈએ, અને બીજા સત્રોએ તેમની પ્રક્રિયાઓ અને તેમના રૂટ બંને રાખવા જોઈએ. જો બે પ્રોફાઇલ ફરી શરૂ થાય, તો તમારી શૃંખલા ક્યાંક સમાંતર ચાલી રહી છે જ્યાં તમે અપેક્ષા નહોતી રાખી.

ચોકીદારે શું ન કરવું જોઈએ

જ્યારે પણ કંઈ નિષ્ફળ જાય ત્યારે બધું ફરી શરૂ કરતો ચોકીદાર પરીક્ષણ દરમિયાન સ્વસ્થ લાગે છે અને જાળવણી વિન્ડોમાં વિક્ષેપ સર્જે છે. પ્રોફાઇલ મુજબ ફરી શરૂ કરો, ક્યારેય વૈશ્વિક રીતે નહીં.

જ્યારે ગેટવે એ જ પ્રોટોકોલ માટે જાળવેલ ક્લાયન્ટ ઓફર કરે ત્યારે તેને પસંદ કરો, અને ક્યારેય પાસવર્ડ સ્ક્રિપ્ટમાં હાર્ડકોડ ન કરો કે કમાન્ડ લાઇન પર ન પસાર કરો, કારણ કે પ્રોફાઇલ ફાઇલ પહેલેથી ગુપ્તતા રાખે છે. જો ટનલ ઉપર આવ્યા પછી કોઈ કાર્ય સામાન્ય વપરાશકર્તા તરીકે ચલાવવું પડે, તો આખી શૃંખલા તે ખાતા હેઠળ ચલાવવાને બદલે સ્ક્રિપ્ટની અંદરથી વિશેષાધિકારો ઘટાડો. અંતે, ફરી જોડાયા પછી રૂટ ફરી વાંચો, કારણ કે પ્રોફાઇલ અલગ ફાળવેલા સરનામા સાથે પાછું આવી શકે છે અને જૂનો રૂટ છોડી શકે છે જેને ટનલના સરનામા તરફની કોઈ તપાસ ક્યારેય ધ્યાનમાં નહીં લે.

સંબંધિત લેખો