Så kontrollerar du om en Linux VPN-tunnel verkligen är uppe
Gränssnittsflaggor, routsökningar, tabell 220 och tidsstämplar för handskakningen svarar på olika frågor. Gör varje skriptsteg beroende av den kontroll som bevisar dess förutsättning.
Cron startar om en helt frisk VPN var tionde minut, och samma jobb låter en död köra i en vecka. Båda felen kommer av att behandla «uppe» som ett enda faktum när det är minst fyra. En enhet kan vara administrativt aktiverad, korrekt routad, fullt krypterad och ändå inte transportera något användbart. Separera observationerna först, och kontrollen skriver sig nästan själv.
Länkflaggor beskriver enheten, inte vägen
Kontrollen alla kopierar letar efter en hårdvaruadress av bara nollor. Det tricket skiljer ett äkta gränssnitt från en platshållare i vissa drivrutiner och bevisar ingenting i resten, eftersom en tun-enhet inte har någon MAC att rapportera. ip -brief link show tun0 ger i stället flaggor: UP betyder att en administratör aktiverade enheten, och LOWER_UP betyder att drivrutinen anser att länken är användbar. Lästa tillsammans säger de att enheten finns och inte är administrativt nere. Ingen av dem säger att ett paket har någonstans att ta vägen.
OpenVPN skapar sin tun-enhet innan rutter installeras, så flaggorna kan se perfekta ut medan ingenting är routat. Behandla dem som en förutsättning, aldrig som svaret.
Fråga vart ett paket skulle ta vägen
Routsökningen svarar på frågan som flaggorna inte kan. ip route get 10.8.0.1 from 10.8.0.2 namnger gränssnittet, källadressen och tabellen som kärnan skulle använda, och det är exakt vad en delad tunnel måste kontrolleras mot. Utan källadressen frågar du om något annat, och med policy-routing kan svaret variera per källa. Detta är det billigaste ärliga testet, eftersom det rådfrågar samma regler som din trafik kommer att använda.
För WireGuard, lägg till handskakningen. wg show skriver ut en tidsstämpel för senaste handskakning per peer, och en tidsstämpel som slutat röra sig framåt betyder att peeren är borta, vad gränssnittsflaggorna än säger. Ett konfigurerat gränssnitt utan nylig handskakning är en av de vanligaste falska positiva i hemmabyggd övervakning.
Tabell 220 berättar IPsecs historia
strongSwan installerar rutter för förhandlade selektorer i tabell 220 när ruteinstallation är aktiverad. ip route list table 220 skiljer därför förhandlat från routat: en tom tabell bredvid en laddad anslutning betyder att IKE- och CHILD-SA:na kom upp medan ingen trafik leds in i dem. Kontrollera ip xfrm state bredvid, eftersom den listar de installerade säkerhetsassociationerna och deras slutpunkter.
En fällpolicy är fallet man bör se upp med. Den väntar på intressant trafik i stället för att routa den, så tabellen förblir tom tills något utlöser tunneln.
Hanterarläge och demonläge är olika listor
NetworkManager listar bara de anslutningar den äger. nmcli -t -f NAME,TYPE connection show --active returnerar ingenting för en tunnel som startats direkt av wg-quick eller av en OpenVPN-demon.
Den skillnaden spelar roll när ett skript måste avgöra vilken av två hanterare det ska fråga. Välj den som faktiskt äger tunneln på den här värden och ignorera den andras tystnad. Om båda finns, avgör vilken som är auktoritativ och inaktivera den andra, eftersom två hanterare som skriver om rutter på ett gränssnitt producerar fel som ingen kan återskapa. En saknad post är information om hanteraren, inte om tunneln.
Gör nästa steg beroende av den kontroll det behöver
Att polla en UDP-port bevisar ingenting om beredskap, eftersom UDP inte har någon handskakning och nc -u lyckas så snart paketet lämnar maskinen. Undersök vad nästa steg faktiskt förbrukar: en TCP-anslutning till den vidarebefordrade porten, en förfrågan till en värd inne i tunneln, ett namn som bara löses där. Begränsa väntan med en timeout och ett antal försök, och misslyckas högljutt när den tar slut.
Hooks slår polling när klienten erbjuder dem. OpenVPN:s --up och --down skript körs efter att gränssnittet byter tillstånd, vilket tar bort kapplöpningen helt, men de körs med de privilegier som demonen behöll. Om OpenVPN har fallit till ett opriviligierat konto genom user och group, körs hooken som det kontot. Att starta om en systemtjänst kräver då sudo för att tillåta exakt det kommandot. Ge omförsöket till tjänstehanteraren i stället för en cron-loop: en begränsad omstartspolicy med startgräns synliggör en trasig tunnel, medan en obegränsad loop döljer den på obestämd tid.