שני בעלים, כתובת אחת: כתובות IP כפולות על גשר TAP
לקוח VPN ששומר על הכתובת שלו רק כשהוא מתחבר ראשון מפסיד בהתנגשות ARP, לא במירוץ. מצאו כל בעל של הכתובת על הגשר.
לקוח Windows אחד מחזיק את 10.8.0.2 ועובד עד שסדר האתחול משתנה; אז אותה כתובת מדווחת כהתנגשות בעוד דבר לא השתנה בלקוח. מארח שני באותו מקטע מגושר תובע את אותו ערך, והמכונה שמסיימת את התצורה אחרונה היא זו שבדרך כלל מפסידה. שניהם מאמינים שהם הבעלים, והמפסיד מפסיק בשקט להשתמש בכתובת שנאמר לו להשתמש בה. בדיוק ההתייחסות לזה כאל בעיית תזמון היא מה שגורם לזה לחזור בכל אתחול.
קראו את ראיות ההתנגשות לפני שנוגעים בגשר
Windows מדווח על התנגשות כתובת יחד עם כתובת החומרה של התובע האחר. כתובת החומרה הזו היא העובדה השימושית, כי היא ממופה לממשק אחד במארח אחד, בעוד ששם האירוע המוצג לא אומר לכם דבר על המקום שבו נמצאת הכפילות. רשמו את כתובת החומרה לפני שאתם משנים משהו.
זיהוי כפילויות מבוסס ARP בודק בעלים מתחרים לפני שמשתמשים בכתובת וממשיך לצפות אחר כך. לכן מארח שהיה נעדר בזמן שהגדרתם את הרשת עדיין יכול לגרום להתנגשות גם כעבור שעה. הבדיקה אינה בדיקה חד-פעמית באתחול. מכונה שמופיעה אחר כך יכולה לתפוס כתובת שהייתה בשימוש שקט כל היום, ולכן התקלה נקראת כמירוץ ולא כשגיאת תצורה.
אירוע התנגשות לבדו לא אומר איזו תצורה יצרה את התביעה השנייה, וניקוי כתובות בניסוי הורס את המיפוי שהיה אומר לכם. מטרת הראיה היא להפוך כתובת חומרה לממשק שאפשר לבדוק. חיפוש במלאי לפי שם מכונה שולח אתכם בדרך כלל למארח הלא נכון.
עשו מלאי של כל תביעה במקטע
התקנת TAP מגושרת מחברת מקטעי Ethernet שהיו נפרדים בעבר, כך שכתובות שהיו ייחודיות בתוך הרשתות שלהן יכולות להתנגש ברגע שמסגרות חולקות קישור אחד. לכן מחלקת התקלות הזו קיימת ב-VPN ואינה קיימת ברשתות המנותבות שהיא החליפה. פרטו כל בעל אפשרי ולא את הראשון שאתם חושדים בו.
עברו על הרשימה בסדר הזה: הכתובות בכל התקן גשר ובפורטי החברים שלו, מאגר OpenVPN וכל הקצאה קבועה לכל לקוח, וכל שרת DHCP שמכסה את המקטע המגושר. אחר כך התאימו את כתובת החומרה מדוח ההתנגשות לממשקים שמצאתם.
ip -4 addr show | grep -E 'inet |^[0-9]+: '
bridge link show
ip neigh show dev br0
המאגר וטווח ה-DHCP הם שני הבעלים ששוכחים. הדפיסו את שני הטווחים יחד וחפשו חפיפה לפני שתעשו משהו אחר. כתובת גשר שהוקצתה ביד ומאגר שמנפיק את אותו ערך יתנגשו במוקדם או במאוחר, וההתנגשות נראית אקראית עד ששני הטווחים מודפסים זה לצד זה.
מספרו גשרים רק במקום שבו הם זקוקים לזהות
בגשר מארח רגיל, התקן הגשר נושא את תצורת השכבה השלישית של המארח, וחברי ה-Ethernet וה-TAP משמשים כפורטים. לתת לכל חבר כתובת משלו, או להעתיק סקריפט התקנה אחד לכמה מכונות בלי לשנות את הכתובת, הוא הדרך שבה מקטע אחד מגיע לשלושה בעלים של אותו ערך. החברים לא זקוקים לזהות משלהם כדי להעביר מסגרות. הם זקוקים בדיוק לזהות אחת לכל מארח שחייב להיות נגיש במקטע הזה.
גשר שרק מחליף מסגרות לא זקוק לכתובת במקטע הזה בכלל. השארתו ללא מספר מסירה מחלקה שלמה של התנגשויות, בתנאי שלמארח עדיין יש נתיב ניהול שאימתתם. אשרו קודם גישה, הסירו שני את הכתובת ובדקו שלישי את הנגישות.
אם הכתובת שאתם עומדים למחוק היא הדרך היחידה אל המכונה, מחיקתה כניסוי היא השבתה עצמית ולא אבחון. אמתו את הנתיב מחוץ לרצועה לפני שתבדקו משהו.
גרמו לתיקון לשרוד אתחול
שינוי ממשק פעיל מתקן את האתחול הנוכחי ושום דבר אחר. כל מה שיוצר מחדש את הכתובת באתחול יחזיר את ההתנגשות באתחול הבא, ואתם תסיקו שהתיקון לא עבד כאשר למעשה הוא מעולם לא היה מתמשך. רשמו איזה קובץ שיניתם, כדי שהאתחול הבא יאשר החלטה במקום לחשוף הפתעה.
מצאו את הבעלים של התצורה הזו: פרופיל מנהל רשת, קובץ לכל ממשק, הגדרת מכולה או מכונה וירטואלית, או קטע cloud-init. שנו אותו שם, ואז אתחלו בכוונה מארח אחד שנפגע כדי לאשר שהערך החדש הוא זה שחוזר. אתחול הוא המבחן היחיד שמוכיח התמדה.
הקצו את כתובות הגשר בתוך טווח ה-DHCP כהחרגות, או העבירו אותן אל מחוץ לו. הקצאה שקיימת רק בגיליון אלקטרוני אינה החרגה, והמקצה לא יקרא אותה.
הוכיחו זאת כשכל הלקוחות מחוברים
חיבור מוצלח אחד אינו מוכיח דבר, כי התסמין המקורי הופיע רק כשהסדר השתנה. העלו כל לקוח מתוכנן, שנו את סדר האתחול וחזרו על כך לאחר התחברות מחדש. אחר כך אתחלו את המארח שנהג להפסיד במירוץ ואשרו שהכתובת שורדת.
לאישור ישיר, בדקו אם קיים בעל כפול לפני הקצאת הכתובת וצפו בטבלת השכנים לאחר מכן. אם שום דבר לא עונה לבדיקה והכתובת נשארת בבעלות ייחודית לאורך מחזור אתחול שלם, ההתנגשות נפתרה ולא רק הוסתרה. הפקודות שלהלן מבצעות את שתי הבדיקות בהתקן הגשר. RFC 5227 מתאר את התנהגות הבדיקה וההכרזה שהכלים האלה מפעילים, וזהו המקור שיש לצטט כאשר מישהו מציע להשבית את הזיהוי במקום.
arping -D -I br0 10.8.0.2
ip neigh show dev br0 | grep 10.8.0.2
בדיקה שאינה מקבלת תשובה היא התוצאה הצפויה במקטע נקי. בדיקה שמושכת תשובה נותנת לכם את כתובת החומרה של הבעל שנותר, אותה ראיה שאירוע Windows נתן לכם בהתחלה. שמרו את הפלט הזה עם רשומת השינוי, כי היא ההוכחה היחידה שהכתובת מוחזקת באופן ייחודי.