Varför traceroute dör i en riktning genom en VPN-tunnel
Ett spår som fullbordas den ena vägen och skriver ut stjärnor den andra är oftast ett diagnostikproblem. Jämför probmetoder, returvägar och en riktig begäran.
Traceroute-utdata som fullbordas i en riktning och skriver ut rader av stjärnor i den andra ser ut som asymmetrisk vidarebefordran, och det är det oftast inte. Varje visat hopp kräver att proben anländer, att en router bestämmer sig för att svara och att svaret reser tillbaka och matchas med proben. Bryt någon av dessa länkar och raden blir en stjärna medan tunneln fortsätter att bära data.
Spåret är bevis om diagnostik innan det är bevis om transport. Frågan som är värd att ställa är vilken av de tre länkarna som misslyckades, och svaret kommer från paketen, inte från utdatans form.
En stjärna är ett saknat svar, inte ett saknat hopp
Traceroute rör sig utåt genom att skicka prober vars TTL löper ut en router längre bort i varje runda. En router som kastar en utgången prob ska returnera ett ICMP Time Exceeded-meddelande som namnger sig själv, och verktyget skriver ut det namnet. Det verktyget faktiskt väntar på är att meddelandet anländer inom en tidsgräns. Om routern svarar från en annan källadress, begränsar hur ofta den genererar fel eller släpper proben utan ett ord, ger rundan ingenting utskrivbart.
Inget av dessa utfall säger att vägen framåt är trasig. En stjärna är en rapport om obesvarad post, inte om en tom väg.
Probmetoden avgör vilket filter du möter
Standardmetoden på Linux är oftast en UDP-destinationsport med högt nummer, tracert i Windows skickar ICMP-ekon, och Linux kan få order att använda ICMP eller TCP i stället. Var och en av dem ser ut som en annan typ av trafik för en stateful brandvägg eller en molnsäkerhetsgrupp. Att jämföra ett UDP-spår från ena sidan med ett ICMP-spår från den andra jämför två olika experiment. Lås metoden, adressfamiljen, källadressen och tidsgränsen innan du kallar resultaten en skillnad.
För en rättvis jämförelse, kör spåret från de värdar som faktiskt bär trafiken, inte från en gateway som vidarebefordrar å deras vägnar. Ett routergenererat spår använder routerns egen källadress och utdatapolicy, som kan vara strängare än något en klient ser. Anteckna det exakta kommandot så att nästa person kan upprepa det.
Tidsgränsvärdet är experimentets andra halva, och det är lätt att lämna utanför anteckningarna. En väntan på två sekunder på en överbelastad väg rapporterar stjärnor där en väntan på fem sekunder rapporterar hopp. Håll värdet identiskt mellan körningar så att jämförelsen förblir om nätverket.
Returvägen är en egen rutt
Ett ICMP-fel är ett vanligt paket med sin egen källa och destination, och det behöver en rutt tillbaka till traceverktyget. Om tunnelpolicyn bär LAN-prefixen men inte routeradressen som genererade felet, lämnar meddelandet en väg som inte kan nå dig. Svarsfiltrering kan släppa det även när rutten finns, eftersom paketet anländer från en oväntad adress på ett oväntat gränssnitt. Det är en missmatchning i diagnostikplanet och inte ett applikationsfel.
Att vidga varje selektor tills spåret fullbordas gör bilden vackrare och policyn sämre. Reparera den specifika diagnostikadressen, eller acceptera stjärnan och testa applikationen på ett annat sätt.
Bekräfta tunneln med en riktig begäran
En TCP-handskakning på tjänstens egen port övar vidarebefordran, returrouting och filtrering i den riktning som spelar roll. Kommandona nedan körs i båda ändar och jämför vad varje sida kan öppna. Byt ut tjänsteporten och namnet på tunnelgränssnittet mot dina egna inställningar.
traceroute -I -n -w 2 203.0.113.40
traceroute -T -p 443 -n -w 2 203.0.113.40
curl -sS -o /dev/null -w '%{http_code} %{time_total}\n' --max-time 5 http://203.0.113.40:8080/health
ss -tan state established
Läs de två traceroute-körningarna först: om ICMP-körningen visar hopp och TCP-körningen inte gör det, är skillnaden metod, inte väg. Ta sedan curl-resultatet som svaret på applikationsnivå, eftersom ett fullbordat utbyte med en rimlig statuskod betyder att både vägen framåt och returvägen fungerar för riktig trafik. Socketlistan visar om anslutningen ens är upprättad, vilket inget spår kan berätta för dig.
En tunnel som bär en interaktiv session i båda riktningarna medan ett traceroute skriver ut stjärnor är frisk och bara lite ofotogen. Spara kommandoutdata från varje sida som registreringen, och behandla saknade hopp som en öppen fråga om diagnostik i stället för en dom om VPN:en.