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

התחילו ביומן לחיצות הידיים בכל מכשיר

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

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

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

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

wg show wg0 public-key
wg show wg0 latest-handshakes
wg show wg0 endpoints
wg show wg0 transfer

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

הקצו זהות שנייה כראוי

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

umask 077
wg genkey > newdevice.key
wg pubkey < newdevice.key

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

הוציאו את הכפיל משירות בלי לשבור את המקור

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

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

בדקו את שני המכשירים בנפרד וביחד

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

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

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