AllowedIPs הוא רשימת ניתוב, לא כלל חומת אש
הוא בוחר עמית לתעבורה יוצאת ומאמת מקורות נכנסים. זו אינה רשימת גישה, וכיבוי ניהול הנתיבים אינו מתקן מנהרה מפוצלת.
רוב האנשים קוראים את AllowedIPs כרשימת הרשאות, קבוצת הכתובות שמותר להן להתחבר לעמית, בדומה לכלל חומת אש שנכתב עבור מנהרה. זה לא כך. השדה הוא טבלת ניתוב שעובדת בשני הכיוונים: הוא בוחר עמית לחבילה יוצאת ומאמת את המקור של חבילה נכנסת. קריאה שלו כרשימת גישה מייצרת תצורות שמנתבות תעבורה שאיש לא ביקש.
שדה אחד, שני קוראים: בחירת יוצא ובדיקת מקור
בלקוח, הקידומות קובעות אילו יעדים נוסעים לעמית הזה ואילו נשארים ברשת הרגילה. לכן רשומה עבור 0.0.0.0/0 תופסת כל יעד IPv4, ולכן ייבוא פרופיל מנהרה מלאה שולח גלישה רגילה דרך המכונה המרוחקת. רשומות צרות עושות את ההפך: הן מנתבות רק את הרשתות שפירטת ומשאירות את כל השאר במקומו. הקטע על ניתוב מפתחות הצפנה בתיעוד WireGuard מציג את שתי המשימות במקום אחד: בחירת העמית היוצא ואימות המקור הנכנס.
בשרת, אותו שדה מתאר אילו כתובות מקור כל עמית רשאי להשתמש בהן. זו בדיקה הצפנתית ולא מסנן חבילות: חבילה שהמקור הפנימי שלה אינו תואם לרשימת העמית נזרקת בתוך WireGuard לפני שכל חומת אש במארח רואה אותה. שתי המשימות חולקות רשימה אחת, ובדיוק משום כך רשימה שהועתקה ממקום אחר מתנהגת באופן שגוי במקום שלא שקלת.
בלוק הלקוח הוא המקום שבו רוב הבלבול הזה מתחיל. מנהרה מפוצלת מפרטת את הרשתות המרוחקות, ומנהרה מלאה היא אותו שדה עם קידומת ברירת מחדל:
[Peer]
# split tunnel: only these networks
AllowedIPs = 10.77.0.0/24, 192.168.30.0/24
[Peer]
# full tunnel: everything, both families
AllowedIPs = 0.0.0.0/0, ::/0
שתי הצורות שלמות בעצמן, והן חלופות ולא שלבים. הראשונה שולחת רק את שתי הרשתות האלה דרך המנהרה; השנייה שולחת כל יעד, כשהרשומה ::/0 מוסיפה IPv6 לברירת המחדל IPv4. יהיה אשר תבחר, הקידומות האלה הן כל החלטת הניתוב עבור העמית הזה ברגע ש-wg-quick מתחיל להתקין נתיבים.
הרכז צריך רשימה אחרת
רכז מפרט את כתובת המנהרה של כל לקוח כקידומת מארח, ובנוסף כל רשת שנמצאת ממש מאחורי אותו לקוח. העתקת הרשימה הרחבה של לקוח לכל עמית ברכז אומרת לרכז שעמיתים רבים עשויים להשתמש באותן כתובות כמקור, וזו אינה תוכנית כתובות. השדה Endpoint שייך לשכבה אחרת לגמרי: הוא מפרט את הכתובת והפורט החיצוניים של העמית, ולעולם לא יעד בתוך המנהרה.
[Peer]
# laptop: tunnel address 10.77.0.2, office LAN behind it
AllowedIPs = 10.77.0.2/32, 192.168.30.0/24
קידומת המארח נושאת את כתובת המנהרה וקידומת הרשת נושאת את מה שנמצא מאחורי הלקוח, ושתיהן נדרשות. בלי קידומת המארח הרכז לא יכול להחזיר את התעבורה של הלקוח עצמו, ובלי קידומת הרשת ה-LAN שמאחוריו נשאר בלתי נגיש; עמית שאין מאחוריו דבר מקבל רק את קידומת המארח.
דילוג על התקנת נתיבים משאיר פער
wg-quick, העוזר שמעלה ממשק מקובץ תצורה, מתקין כתובות ממשק ונתיבים כחלק מהעבודה הזו. הגדרת Table = off אומרת לעוזר לדלג על עבודת הנתיבים, מה שאינו מתקין תחליפים ואינו הופך את הרשת הפרטית לנגישה. כשנתיבים אוטומטיים כבר עושים את העבודה, ציון הקידומות שאתם צריכים הוא התצורה הבהירה יותר. כיבוי ניהול הנתיבים והשארת התחליף בלי כתיבה אינו תכנון, אלא השמטה.
כלי wg הבסיסי מתנהג אחרת: הוא מגדיר את הממשק ולעולם אינו נוגע בנתיבים, ולכן התקנה שנבנתה ישירות עליו זקוקה לפקודות נתיב משלה. הוראות שנכתבו לכלי אחד עשויות להיראות שגויות כשעוקבים אחריהן עם האחר. גם פינג מוצלח הוא ראיה חלשה, מפני שהוא בודק נתיב אחד ולא כל נתיב אפליקציה שאתם צריכים.
DNS ו-IPv6 מוכרעים בנפרד
בדקו את כתובת שרת ה-DNS שהמנהרה מפרסמת, ואשרו שקיים נתיב לכתובת הזו דרך הקידומות שבחרתם. הגדרת פותר אינה הופכת את הפותר לנגיש, וצמצום מנהרה יכול להסיר בשקט את הנתיב שהוביל אליו. בדקו גם IPv6 בנפרד, כי פיצול IPv4 תקין אינו אומר דבר על נתיב ברירת מחדל IPv6 שעדיין מצביע על הקישור הפיזי. שלוש החלטות נפרדות יכולות להשתנות בבת אחת כשאתם עורכים בלוק עמית אחד.
לאחר מכן פתחו משאב פרטי אחד ואתר אינטרנט רגיל אחד מתצורת התחלה מוכרת. אם המשאב עונה והגלישה עדיין יוצאת דרך החיבור המקומי, הפיצול עושה את שביקשתם. אם הגלישה נשברת באותו רגע, המנהרה לקחה את נתיב ברירת המחדל ורשימת הקידומות היא המקום שבו צריך להסתכל.