שלושה דברים חייבים להתלכד לפני שמנהרת Kerio מעבירה תעבורה: הכתובת בממשק kvnet, הערך שהלקוח תיעד ביומן, ומה שמדיניות השרת או ה-DHCP מצפים לו. כשהם אינם מתלכדים, המנהרה עדיין מאמתת ועדיין עולה, וזה בדיוק מה שהופך את התקלה למבלבלת. הממשק נוצר לכל התחברות, ולכן כתובת שנקבעה ביד שייכת לאותה הפעלה ולשום דבר אחר. זהו צורת הבעיה, והפתרון הוא הוק ולא קובץ תצורה. השאר הוא מהיכן לקרוא את הערך והיכן להחיל אותו.

למה הכתובת חוזרת שוב ושוב

kvnet הוא מתאם וירטואלי שהלקוח יוצר כשההתחברות מתחילה ומסיר כשהיא מסתיימת. לכן ip link set ידני שורד בדיוק כל עוד ההפעלה שאליה הוחל, וההתחברות הבאה מתחילה ממה שהלקוח מקצה. במכונה שבה הלקוח נכשל בהחלת הכתובת המצופה, כל התחברות מחדש מחזירה את אותו אי-התאמה, וכלל החכירה או הגישה דוחה את ההתקן שוב.

התבנית הזאת היא אבחון בפני עצמה. מנהרה שעובדת הפעלה אחת ונכשלת בהבאה אינה בעיית אישורים, כי אישורים אינם משתנים בין התחברויות.

קראו את הערך מהלקוח, לא מהממשק

לקוח הלינוקס כותב את פרטי המשא ומתן ליומן הניפוי שלו, והכתובת שהוא מתכוון להשתמש בה מופיעה שם כאסימון האחרון בצורת כתובת ברצף ההתחברות. השוו אותה למה שהליבה באמת מחזיקה, שזה במרחק readlink אחד: cat /sys/class/net/kvnet/address.

אם השתיים שונות, הלקוח ידע את הערך הנכון ונכשל בהחלתו, והוק שמחיל אותו לאחר שהממשק קיים סוגר את הפער. אם היומן אינו מכיל כתובת כלל, הבעיה מוקדמת יותר ושייכת לגרסת הלקוח או לפרופיל השרת ולא לסקריפט.

החילו אותו לאחר שהממשק קיים

משתמשי NetworkManager יכולים להניח סקריפט בתיקיית השולח שלו ולפעול רק כשממשק ה-VPN עולה. לקוח שמנוהל בידי systemd דורש זהירות רבה יותר: drop-in שרץ עם עליית השירות מופעל בדרך כלל לפני שהמתאם קיים, ולכן ההוק צריך להמתין לממשק במקום להניח אותו. קבעו את הכתובת אז, ואם הליבה מסרבת כשהקישור למעלה, הורידו אותו, קבעו את הכתובת והעלו אותו חזרה. קראו את האסימון שחולץ חזרה דרך תבנית MAC לפני שמעבירים אותו ל-ip link, כדי ששורת יומן בלתי צפויה לא תהפוך לארגומנט.

כל דבר שרץ כ-root מיומן של לקוח ראוי לבעלות צרה: קובץ בבעלות root, שאינו ניתן לכתיבה בידי אחרים, ובלי שום אינטרפולציית מעטפת מעבר לכתובת המאומתת. שמרו את בדיקת התבנית בתוך הסקריפט. אל תתנו לתוכן היומן להחליט איזו פקודה רצה.

אמתו את החכירה ולא את הקישור

ip -4 -o addr show dev kvnet אמור להראות כתובת בטווח המצופה, ip neigh show dev kvnet אמור להראות את השער, ושירות אחד מאחורי ה-VPN אמור להשיב. אחר כך התנתקו והתחברו מחדש פעם אחת; אם הכתובת חוזרת, ההוק פועל באירוע הלא נכון או שאינו פועל כלל.

ממשק שמופיע עם הכתובת הנכונה ואינו מקבל חכירה לעולם מצביע על צד השרת. זו בדיקה אחרת ובדרך כלל צוות אחר. אשרו שהחשבון מורשה ושהמאגר עדיין מחזיק כתובת לפני שעורכים את ההוק שוב.

בחנו מחדש את העקיפה לאחר שדרוג

גרסת לקוח שקובעת את הכתובת כראוי משאירה את ההוק שלכם מחיל ערך מיושן, וזו תקלה חדשה שהכניס תיקון. גם אל תעתיקו לעולם MAC ממכונה אחרת או מהודעת פורום; השתמשו בערך שהלקוח הזה מתעד עבור החשבון הזה, ורשמו את התאריך שבו אימתתם אותו.

שמרו על הסקריפט קצר מספיק לקריאה בישיבה אחת. עקיפות שמנתחות יומנים הן זמניות מטבען. אלה ששורדות הן אלה שקורא עתידי מבין בלי השרשור המקורי.

מאמרים קשורים