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

המסלול קיים אבל שום דבר לא יוצא

בדקו תחילה את טבלת המסלולים של הלקוח. שורה כמו default via 10.147.20.5 dev zt0 מוכיחה שהמסלול הותקן, לא שהיעד יקבל את התעבורה. הקפיצה הבאה חייבת להיות חבר שמוכן ומסוגל להעביר אותו.

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

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

שלושה חלקים שכולם חייבים להתקיים

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

PartWhere it livesWhat a failure looks like
Forwarding and NATExit node kernel and firewallTraffic arrives, no reply
Managed default routeZeroTier network controllerNo default via the tunnel on the member
Client acceptanceMember's per-network settingRoute offered but not installed
DNS behaviorClient resolver configurationPages fail by name, IP works

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

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

הגדירו את צומת היציאה להעביר ולתרגם

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

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i zt0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o zt0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

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

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

הכריזו על המסלול וקיבלו אותו בלקוח

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

zerotier-cli listnetworks
zerotier-cli set <network-id> allowDefault=1
ip route get 1.1.1.1

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

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

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

בקשו כתובת ציבורית משירות שמדווח על המקור, והשוו אותה לכתובת ה-WAN של צומת היציאה. לאחר מכן טענו אתר בשמו כדי לאשר ש-DNS עדיין מפענח, ובדקו יישום אחד שחשוב ולא רק דפדפן.

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

סינון נתיב הפוך ב-Linux יכול גם להפיל תעבורת יציאה תקפה בלקוח. ZeroTier מתעד שיקול של rp_filter עבור חברים משתתפים; שנו את ההגדרה בכוונה ורק לאחר אימות המסלול וה-NAT, לא כניסוי הראשון.

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

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