માર્યું openconnect: રૂટ અને DNS હજી ટનલ તરફ જ ઈશારો કરે છે
મૃત openconnect પ્રક્રિયા રૂટ અને રિઝોલ્વર એન્ટ્રીઓ સ્થાપિત છોડી શકે છે. શટડાઉન માર્ગ પર ચાલો, તમારું બિલ્ડ જે સિગ્નલ દસ્તાવેજ કરે છે તે મોકલો અને સાફ કરો.
ટનલ બંધ છે, પણ મશીન હજી એમ વર્તે છે જાણે તે ચાલુ હોય: એક લુકઅપ ટાઈમઆઉટ થાય ત્યાં સુધી લટકે છે, અને એક રૂટ એવા ઇન્ટરફેસ તરફ ઈશારો કરે છે જે હવે અસ્તિત્વમાં નથી. આ એ openconnect પ્રક્રિયાની સહી છે જે તેના ડિસ્કનેક્ટ હેલ્પરને ચલાવ્યા વિના મૃત્યુ પામી. તેણે બનાવેલી નેટવર્ક સ્થિતિ હજી સ્થાપિત છે, અને સિસ્ટમમાં બીજું કંઈ જાણતું નથી કે તેને કેવી રીતે દૂર કરવી.
મશીન પર એ ક્રમમાં ચાલો જેમાં સ્થિતિ બની હતી: પ્રક્રિયા, લિંક, રૂટ, રિઝોલ્વર. દરેક પગલું તમને કહે છે કે ક્લાયન્ટ ખરેખર ગયો છે કે ફક્ત તમારા ટર્મિનલથી અલગ થયો છે, અને એ ભેદ નક્કી કરે છે કે તમે કંઈ ઠીક કરવું છે કે નહીં.
પ્રક્રિયાથી શરૂ કરો, રૂપરેખાંકનથી નહીં
ટર્મિનલ ખોલો અને રૂટને અડકતા પહેલાં પૂછો કે હજી શું ચાલી રહ્યું છે. pgrep -a openconnect દરેક ઇન્સ્ટન્સને તેના આર્ગ્યુમેન્ટ સાથે સૂચિબદ્ધ કરે છે, જે pid ફાઇલ અને તેને આપેલી સ્ક્રિપ્ટ દર્શાવે છે. જે પ્રક્રિયા તમે અપેક્ષા નહોતા રાખતા તે ફેન્ટમ ટનલને કોઈપણ લોગ કરતાં ઝડપથી સમજાવે છે.
જો કંઈ ચાલી રહ્યું ન હોય, તો લિંક જુઓ. ip link show tun0 કહે છે કે ઇન્ટરફેસ બચ્યું છે કે નહીં, અને ip route show dev tun0 હજી તેની સાથે બંધાયેલા રૂટની સૂચિ આપે છે. પછી રિઝોલ્વર આની સાથે તપાસો resolvectl status. તેમને બદલતા પહેલાં ત્રણેય આઉટપુટ નોંધો, કારણ કે એ રેકોર્ડ જ પછી જૂની એન્ટ્રીને નવી એન્ટ્રીથી અલગ પાડવાનો રસ્તો છે.
જે ઇન્ટરફેસ જતું રહે છે તે સામાન્ય રીતે તેના રૂટ સાથે લઈ જાય છે. જે રૂટ લિંક પછી પણ ટકે છે તેનો સામાન્ય અર્થ એ છે કે પ્રક્રિયા હજી જીવંત છે અથવા બીજા ક્લાયન્ટ પાસે ઉપકરણ છે.
હેલ્પર સ્ક્રિપ્ટ જ ફેરફારો પાછા ફેરવે છે
openconnect પોતે ઇન્ટરફેસ, રૂટ કે રિઝોલ્વર એન્ટ્રી દૂર કરતું નથી. તે બાહ્ય હેલ્પરને બોલાવે છે, /etc/vpnc/vpnc-script upstream બિલ્ડમાં અને /usr/share/vpnc-scripts/vpnc-script Debian અને Ubuntu પેકેજોમાં, અને પસંદ કરવામાં આવે છે -s થી. જે સ્ક્રિપ્ટ ટનલ ઊભી કરે છે તે જ તેને તોડે છે.
જો પ્રક્રિયા એ હેલ્પરને બોલાવ્યા વિના બહાર નીકળે, તો સ્થિતિ રહી જાય છે. OpenConnect મેન્યુઅલ સ્પષ્ટ કહે છે કે સ્ક્રિપ્ટ વિના રૂટિંગ અને નામ સેવા યોગ્ય રીતે કામ કરશે નહીં, અને હેલ્પરને એ ઘટક તરીકે વર્ણવે છે જે બહાર નીકળતી વખતે ઇન્ટરફેસની સ્થિતિ તોડી નાખે છે. એટલે જ જ્યારે તમે ક્લાયન્ટને -s સાથે શરૂ કરો છો ત્યારે માર્ગ મહત્વનો છે.
કયો સિગ્નલ એ માર્ગ પર પહોંચે છે તે આવૃત્તિઓ વચ્ચે બદલાયું છે. 7.06 મેન્યુઅલ SIGTERM ને તાત્કાલિક નિકાસ ગણે છે જે સ્ક્રિપ્ટ છોડી દે છે. વર્તમાન બિલ્ડ INT અને TERM ને સ્વચ્છ સ્ટોપ તરીકે દસ્તાવેજ કરે છે, જ્યાં સેશન લોગઆઉટ થાય છે અને હેલ્પર ચાલે છે. તમારી પાસે ખરેખર જે બાઈનરી છે તેનો SIGNALS વિભાગ વાંચો, બેમાંથી કોઈ પણ વર્તન ધારી લેવાને બદલે.
man openconnect | sed -n '/^SIGNALS/,/^LIMITATIONS/p'
તમારું બિલ્ડ જે સિગ્નલ દસ્તાવેજ કરે છે તે મોકલો
સિગ્નલ ખબર પડ્યા પછી પ્રક્રિયાને પેટર્નથી નહીં, pid થી રોકો.
pgrep -a openconnect
sudo kill -INT "$(cat /var/run/openconnect.pid)"
પછી એક્ઝિટ સ્ટેટસ પર ભરોસો કરવાને બદલે પ્રથમ વિભાગની ત્રણ તપાસ ફરીથી કરો. ip link show tun0 નિષ્ફળ જવું જોઈએ, ip route show dev tun0 કંઈ છાપવું જોઈએ નહીં, અને resolvectl status હવે VPN લિંકની સૂચિ ન આપવી જોઈએ.
SIGHUP સ્ટોપ બટન નથી: તે ડિસ્કનેક્ટ કરે છે, સ્ક્રિપ્ટ ચલાવે છે અને સેશનને આ વિકલ્પ સાથે ફરી ચાલુ કરી શકાય તેમ રાખે છે: --cookie. SIGUSR2 તાત્કાલિક ફરી જોડાણ ફરજ પાડે છે. SIGKILL સફાઈ સંપૂર્ણ છોડી દે છે, અને આ લેખ બરાબર એ જ સ્થિતિ વિશે છે.
resolv.conf બદલ્યા વિના રિઝોલ્વર સુધારો
મોટાભાગની Ubuntu સિસ્ટમોમાં /etc/resolv.conf systemd-resolved તરફની સિમ્બોલિક લિંક છે, તમારે સંપાદિત કરવાની ફાઇલ નથી. તેને બદલવાથી દરેક નેટવર્ક માટે નામ રિઝોલ્યુશન તૂટે છે, ફક્ત VPN માટે નહીં. તેના બદલે ટનલની નોંધણી દૂર કરો:
resolvectl revert tun0
resolvectl query example.com
જો સિસ્ટમ systemd-resolved ને બદલે resolvconf વાપરે છે, તો ઇન્ટરફેસ દીઠ રેકોર્ડ રહે છે જ્યાં સુધી તેને લિંક છોડવાનું ન કહેવાય, અને resolvconf -d tun0 સમાન ક્રિયા છે. આદેશ પસંદ કરતા પહેલાં કયો રિઝોલ્વર વપરાય છે તે તપાસો.
મૃત લિંક પાછળના સર્વર તરફ હજી ધ્યેય રાખતું લુકઅપ ટાઈમઆઉટ થાય ત્યાં સુધી લટકે છે, અને એ વિલંબ બાકી રહેલા રૂટ કરતાં તૂટેલા DNS સર્વર જેવો લાગે છે.
આગલું ડિસ્કનેક્ટ કંટાળાજનક બનાવો
શરૂઆત અને શટડાઉનમાં pid ફાઇલનો માર્ગ સમાન રાખો, દર વખતે --pid-file આપીને, અથવા openconnect ને unit હેઠળ ચલાવો જેનું KillSignal તમારી આવૃત્તિ જે સિગ્નલ દસ્તાવેજ કરે છે તેની સાથે મેળ ખાય. પહેલા ફોરગ્રાઉન્ડમાં પરીક્ષણ કરવાથી હેલ્પર જે શટડાઉન સંદેશા છાપે છે તે દેખાય છે.
કનેક્ટ કરો, ડિસ્કનેક્ટ કરો અને ત્રણ તપાસ એક વાર ચલાવો. સ્વચ્છ નિકાસ કોઈ VPN લિંક, VPN રૂટ કે VPN રિઝોલ્વર એન્ટ્રી છોડતી નથી. જો ત્રણમાંથી એક ટકી જાય, તો હવે તમે જાણો છો કે કયો ઘટક સાફ કરવામાં નિષ્ફળ ગયો. પછીની તપાસ લટકતા લુકઅપથી નહીં, એ જવાબથી શરૂ થાય છે.