להכניס 0.0.0.0/0, ::/0 אל ה-AllowedIPs של עמית זה השלב שכולם זוכרים, והוא קובע רק איזה תעבורה העמית רשאי לשאת. הקידומות האלה לא יוצרות מסלולים, לא מעבירות דבר בצד השני ומשאירות את הפותר של כל יישום בדיוק במקום שבו היה. ארבעה דברים נפרדים חייבים להתקיים בו-זמנית כדי שמנהרה מלאה תהיה מנהרה מלאה, והכי טוב לבדוק אותם בסדר שלמטה, כי בדיקה מאוחרת לא יכולה להציל בדיקה מוקדמת. כל בדיקה למטה היא עובדה שאפשר לקרוא ממכונה, לא הגדרה שמקווים שהוחלה.

מה קידומת העמית בוחרת, ומה לא

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

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

לנתב את הלקוח, לא רק את רשימת העמיתים

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

[Interface]
Address = 10.8.0.2/32
DNS = 10.8.0.1

[Peer]
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = vpn.example.net:51820

שני פרטים נושאים את העבודה. השדה Address הוא קידומת מארח אחת ולא תת-רשת שהלקוח חושב שהוא מחזיק בה, והמנהל הוא זה שממיר את ה-AllowedIPs המוגדר כברירת מחדל למסלול ברירת מחדל אמיתי. העלה את אותו קובץ עם ip link ו-wg setconf ולא יופיע אף מסלול, מה שנראה כמו מנהרה שבורה ולמעשה הוא מנהרה בריאה שדילגה על שלב הניתוב. המדריך של wg-quick מתעד את הניתוב ואת התנהגות Table שמוסיפים המנהלים האלה.

קרא את התוצאה ולא את הקובץ: ip route get 1.1.1.1 אמור לנקוב בשם ממשק המנהרה, ו-wg show אמור לדווח על לחיצת יד עדכנית עם מונה העברה שזז. לחיצת יד בלי מסלול אומרת שהמנהל לא רץ מעולם, ועריכה נוספת של הפרופיל לא תתקן את זה. הפעל את הממשק כפי שהמשתמש יפעיל אותו, אחרת הבדיקה מודדת את ה-shell שלך במקום את הפריסה.

להשאיר את נקודת הקצה מחוץ למנהרה

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

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

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

העברה ונתיב החזרה בשער

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

sysctl net.ipv4.ip_forward net.ipv6.conf.all.forwarding
ip route get 1.1.1.1 from 10.8.0.2

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

DNS ומצב הכשל, נבדקים בנפרד

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

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

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

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