לחיצת יד פעילה, הכתובת נעלמה: שלושה מצבים של WireGuard
לחיצת יד טרייה מוכיחה שהעמית ענה, לא שהממשק שומר על כתובתו או שהחבילה הבאה יוצאת בקישור העולה המיועד.
WireGuard יכול להחזיק לחיצת יד טרייה ובלי כתובת בו בזמן, והמצב הזה עקבי ולא סותר. לחיצת היד היא אירוע של העמית, הכתובת שייכת לממשק, והנתיב קובע באיזה קישור עולה חבילה יוצאת. שלוש שכבות, שלושה בעלים, וכל אחת יכולה להיכשל בזמן שהשתיים האחרות נראות בריאות.
לקרוא אותן כמצב אחד הוא מה שהופך אבחון של שתי דקות לאחר צהריים שלם של הפעלה מחדש של שירותים.
לחיצת יד היא אירוע של העמית, לא אירוע של כתובות
לחיצת היד של WireGuard מוכיחה שהעמית המוגדר ענה במפתח תקף ושמפתחות הסשן עדכניים. היא לא אומרת דבר על הכתובת המקומית בממשק, ולא על כך שנתיב כלשהו מצביע לשם. עוזר או מנהל רשת מקצה את הכתובת, בעוד שתצורת הפרוטוקול רק נוקבת בשמות עמיתים ומפתחות. ערבוב השניים הוא הדרך שבה לחיצת יד בריאה נקראת כמנהרה שעובדת.
לכן wg show יכול לדווח על לחיצת יד בת שניות בממשק שאינו יכול לקבל אפילו חבילה אחת מיישום.
מנהל שיוצר מחדש את הממשק יכול להפיל את הכתובת בלי לגעת בתצורת העמית, ולחיצת היד הבאה מצליחה מיד כי המפתחות לא השתנו מעולם. שורת היומן על לחיצת יד מוצלחת מדויקת וחסרת רלוונטיות לתקלה.
| Observation | Which layer it belongs to | Wrong conclusion it invites |
|---|---|---|
| Handshake a few seconds old | Peer and keys | The tunnel is usable for application traffic |
Address present on wg0 | Interface configuration | Traffic actually egresses through it |
Route points at wg0 | Forwarding table | The outer packet uses the intended uplink |
לכתובת הממשק יש בעלים משל עצמה
כתובת במכשיר המנהרה יכולה לבוא משורת Address של עוזר, מלקוח DHCP שרץ בממשק, או מדמון ניהול שיוצר אותה בזמן החיבור. יהיה מה שיהיה, אותו רכיב הוא הבעלים של הכתובת והוא ישחזר אותה או לא לפי ההיגיון שלו. קריאת הכתובת בלי לנקוב בשם בעליה מותירה אותך בלי הסבר מדוע נעלמה.
שני בעלים בממשק אחד הם התקלה הקלאסית. הפעלת עוזר ומנהל רשת שולחני על אותו מכשיר יוצרת מירוץ שבו האחד מסיר את מה שהשני זה עתה הגדיר, ונקודת הקצה ממשיכה לענות כל הזמן.
בחר בעלים אחד ותן לכלי השני לצפות ולא לנהל. החלטה כזו שווה כתיבה, כי התסמין מופיע שבועות אחר כך ונראה כמו אובדן כתובת אקראי.
נתיב בוחר קישור עולה, לא הממשק
נתיב פנימי שמצביע אל wg0 קובע שהתעבורה נכנסת למנהרה. החלטה נפרדת שולחת את החבילות החיצוניות המוצפנות אל העמית, ובמארח עם כמה קישורים עולים ההחלטה הזו מגיעה מטבלת ההעברה ומכללי המדיניות. נדידת Wi-Fi יכולה לשנות את הנתיב החיצוני בלי לגעת בכתובת הפנימית.
אם כך, מנהרה שעובדת ועמית שאינו נגיש הם מצבים תואמים, וכך גם עמית תקין ונתיב פנימי שבור. את שלוש התצפיות יש לקחת יחד, באותו רגע, אחרת ההשוואה חסרת משמעות.
השווה את שלושת המצבים במעבר אחד
שלוש פקודות לקריאה בלבד עונות על שלוש השאלות בסדר שמבודד את התקלה מהר ביותר. הרץ אותן בלי לשנות דבר ביניהן.
ip address show dev wg0
ip route get 10.80.0.1
wg show wg0 latest-handshakes transfer
הראשונה מראה אם לממשק יש כתובת בכלל, והשנייה מראה באיזה מכשיר יעד מסוים ישתמש כעת. השלישית מדווחת על זמן לחיצת היד האחרונה ועל מוני הבתים, והיא היחידה מבין השלוש שמתארת את העמית ולא את המארח המקומי.
קרא את המונים וגם את חותמת הזמן. לחיצת יד שמתחדשת ללא הרף בזמן שההעברה נשארת שטוחה פירושה שהעמית עונה אבל שום דבר שימושי לא עובר, מה שמצביע על ניתוב או על ACL ולא על מפתחות. חותמת זמן שמפסיקה להתקדם כשיש כתובת מצביעה דווקא לכיוון מעלה. שתי הקריאות מגיעות מאותה שורת פלט, ואף אחת מהן לא נראית אם רק בודקים שלחיצת יד קיימת.
תקן את המצב המסוים שאינו נכון, ואז בדוק מחדש את היישום ולא את המנהרה. לחיצת יד טרייה היא ראיה על העמית, וראיה על העמית אינה ראיה שהבקשה הבאה מהדפדפן שלך תמצא כתובת, נתיב וקישור עולה שעובד. המדריך של wg-quick אומר במפורש אילו מאלה העוזר מגדיר ואילו שייכים לפרוטוקול.