ה-VPN התחבר מחדש, אבל הפעלה של האפליקציה עדיין נכשלת
חיבור מחדש משחזר נתיבים, לא את מצב השקע. פתחו בקשה חדשה בזמן שהבקשה הישנה עדיין תלויה, ותדעו איזה מהשניים נכשל.
המנהרה חוזרת, הלקוח מדווח על חיבור, והדפדפן עדיין מסתובב על דף שהוא טען לפני הניתוק. חיבור מחדש של VPN משחזר נתיב, והוא אינו משחזר את מצב החיבור שהאפליקציות והצד המרוחק צברו על הנתיב הישן. אלה שני דברים שונים לתיקון, וערבוב ביניהם מחזיר אתכם להגדרות ה-VPN בלי סיבה.
בדיקה אחת מפרידה ביניהם בבירור, והיא אורכת עשר שניות. שלחו בקשה חדשה לאותו יעד בזמן שהישנה תלויה.
מה שורד חיבור מחדש ומה לא
מנהרה היא אוסף של נתיבים, מפתחות וכתובות, וחיבור מחדש יכול לשחזר את שלושתם בעוד כל זרימה שהוקמה נשארת מתה. מערכת ההפעלה מחזיקה שקע פתוח מפני שהאפליקציה ביקשה זאת, וזמן התפוגה של אותו שקע יכול להיות דקות או שעות משם. מתחת לזה, העמית שכח את הזרימה, רשומת תרגום פגה, או שהנתיב עובר כעת דרך נקודת קצה שלא ראתה את לחיצת היד מעולם. שום דבר ברצף החיבור מחדש לא עובר על שקעי האפליקציה ומתקן אותם.
יש לקוחות שמוסיפים וו שמשליך חיבורים מיושנים בעת חיבור מחדש, ורובם לא. ההתנהגות כאן משתנה לפי לקוח, פלטפורמה וגרסה.
הצד המרוחק שכח גם אתכם
הקצה המרוחק מחזיק מצב משלו: הפעלת TLS, בלוק בקרה של TCP ואולי רשומת מיפוי שקושרת את הכתובת והפורט שלכם לזרימה. התקן תרגום לאורך הנתיב יכול להפוג את המיפוי הזה במהלך הפער גם כשהמנהרה מתחדשת במהירות. ברגע שהמיפוי נעלם, מנות מגיעות עבור זרימה שהשרת אינו מזהה עוד, והתגובה יכולה להיות איפוס שהלקוח אף פעם לא מציג. אפליקציות מדווחות על כך כתקיעה ולא כשגיאה, מפני שהן עדיין ממתינות לשקע שלעולם לא יענה.
זמני תפוגה של חוסר פעילות בצד השרת עושים את אותו דבר לפי לוח הזמנים שלהם, ולכן הפעלה יכולה למות בלי שום אירוע רשת. חיבור שהיה חסר פעילות יותר ממה שהשרת מצפה כבר נעלם לפני שתבחינו שהמנהרה זזה.
בקשה חדשה היא הבדיקה שמפרידה ביניהם
שלחו בקשה חדשה לאותו מארח בזמן שהישנה עדיין תלויה, וצפו בשתיהן. אם הבקשה החדשה מצליחה, המנהרה, הנתיב ופתרון השמות כולם עובדים, והתקלה מוגבלת לזרימה המיושנת. אם הבקשה החדשה גם נכשלת, יש לכם בעיית נתיב ומצב ההפעלה של האפליקציה הוא רמז שווא.
השאירו כל חסימה של תעבורה ישירה במקומה במהלך הבדיקה. בקשה שמצליחה דרך נתיב גיבוי מקרי אינה מוכיחה דבר על המנהרה.
אשרו בחיבור חדש, לא בישן
הפקודות שלמטה מציגות את השקעים שעדיין פתוחים, פותחות בקשה חדשה אחת, ובודקות אם טבלת ההפעלות עדיין מחזיקה רשומה לזרימה. הריצו את הראשונה לפני ואחרי החיבור מחדש כדי שההבדל ייראה. החליפו את המארח והפורט בשירות שלכם.
ss -tanp | grep -E ':(443|8443)'
curl -sS -o /dev/null -w '%{http_code} %{time_connect}\n' --max-time 8 https://intranet.example.com/
conntrack -L 2>/dev/null | grep 8443
dig +short intranet.example.com
שקע שהוקם ואין בו תעבורה זזה הוא הסימן שיש לחפש, ובקשה חדשה שמחזירה קוד מצב מראה שהנתיב חי. טבלת החיבורים עונה אם משהו עדיין ממפה את הזרימה, וזה החלק שהלקוח אינו יכול לראות. שאילתת הפותר מכסה את המחצית השנייה של טעינת דף, מפני שכשל בשם וחיבור תקוע נראים זהים בדפדפן. יחד, ארבעת הפלטים האלה מפרידים הפעלה מיושנת ממנהרה שבורה.
רשמו את זמן הניתוק, את זמן החיבור מחדש ואת ההפרש בין הבקשה הישנה לחדשה. הרשומה הזאת הופכת תלונה מעורפלת לדוח שמישהו יכול לפעול לפיו.