
אחסון עצמי מאחורי CGNAT: גשר VPS ומנהרת WireGuard
מחסור בכתובות IPv4 גרם לספקיות לשתף כתובת ציבורית אחת בין שכונות שלמות, והפניית פורטים בבית הפסיקה לעבוד. המחבר מתאר פתרון: גשר VPS זול ומנהרת WireGuard.
בעבר היה די לפתוח פורט בנתב הביתי ולהצביע על כתובת דינמית באמצעות Dynamic DNS כדי להריץ שירותים מהבית. המחסור בכתובות IPv4 שינה זאת: ספקיות התקשורת חולקות היום כתובת ציבורית אחת בין שכונות שלמות ומעבירות בקשות דרך שכבת NAT נוספת בתוך הרשת שלהן — carrier-grade NAT, או CGNAT. כתובת הנתב נשארת פרטית ומתורגמת ביציאה, כך שהכתובת הציבורית שייכת לספק והפניית פורטים אינה עובדת עוד.
בפוסט בבלוג מתאר דייוויד אלוורז רוסה כיצד הוא בכל זאת מאחסן שירותים בעצמו: הם רצים על מכונה בינונית במרתף של אמו בצפון ספרד ומגיעים לאינטרנט דרך שרת VPS זול שמשמש כגשר במרכז נתונים בצרפת.
גשר, לא ספק אחסון
החוליה בין שתי המכונות היא מנהרת WireGuard דו-כיוונית שמעבירה כל חבילה בכל פורט מהגשר אל המכונה הביתית ובחזרה. היתרון המרכזי הוא שהמנהרה נפתחת דווקא מהבית, ולכן אין צורך בכתובת IP סטטית וייעודית בבית. רכישת כתובת סטטית מספק ספרדי היא חלופה תקפה בכ-20 אירו לחודש, והמחיר של הגשר הוא 39 מילישניות RTT נוספות.
תצורה: DNAT, טבלת ניתוב נפרדת וכתובות IP אמיתיות
בצד הגשר לממשק wg0 יש כתובת 10.0.0.1/24 והוא מאזין בפורט 51820 עם עמית בודד — 10.0.0.2/32. פקודת PostUp מגדירה כללי NAT והעברה ברמת הליבה באמצעות iptables, ו-PostDown מסיר אותם כשהמנהרה נופלת. שני הכללים הראשונים מחריגים את פורט 2222 (SSH) ואת 51820 (המנהרה עצמה), והשאר מעבירים את כל התעבורה בכל הפורטים למכונה הביתית. כתובת היעד נכתבת מחדש אך לא כתובת המקור, ולכן המכונה הביתית רואה את כתובות ה-IP האמיתיות של הלקוחות.
בצד הבית ל-wg0 יש כתובת 10.0.0.2/24 ו-Table = off; PostUp מוסיף נתיב ברירת מחדל דרך המנהרה בטבלת ניתוב 200 וכלל ip rule לתעבורה מ-10.0.0.2. כך התשובות חוזרות דרך הגשר ואילו התעבורה של המכונה הביתית עצמה נשארת בנתב הביתי. מאותו רגע SSH לכתובת ssh.alvarezrosa.com בפורט 22 מגיע למכונה הביתית, ופורט 2222 מגיע לגשר. את המנהרה מחזיקים AllowedIPs 0.0.0.0/0 ו-PersistentKeepalive 25.
מה יכול להיכשל
שלושה רכיבים עלולים להיכשל. משימת cron במכונה הביתית בודקת אם SSH עדיין מגיב, ואם לא — מאתחלת את המכונה. אם הגשר נופל, המחבר ממליץ על נקודת כניסה חלופית, למשל Cloudflare tunnel או Tailscale ישירות למכונה הביתית. נפילה קצרה של המנהרה מתחדשת מעצמה, ותקלות ארוכות יותר מכוסות בשני המקרים הקודמים.
SiTech — פיתוח אתרים בכוח ה-AI
אנחנו בונים אתרים מהירים ומודרניים ומשלבים AI בתהליכי עבודה אמיתיים. יש לכם פרויקט או שאלה? נשמח לעזור.