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

שתי מעטפות, קישור פיזי אחד

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

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

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

עקבו אחרי בקשה אחת במסע

בחרו יעד ושאלו את הקרנל באיזה ממשק הוא ישתמש. הפקודה האחת הזו מכריעה את רוב הוויכוחים בשאלה אם המנהרה עושה משהו:

ip route get 203.0.113.7
ip -brief addr show
ip -4 addr show dev wg0

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

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

traceroute -n -m 3 203.0.113.7
sudo tcpdump -ni wg0 -c 5

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

שלוש כתובות, ורק אחת נראית לאתר

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

AddressWhere it appearsWho can see it
Endpoint addressOuter header, the peer you connect toYour access network and the path to it
Inner tunnel addressInside the envelope, on the virtual interfaceThe peer, and anything the peer routes to
Exit addressSource of the packet that reaches the websiteThe website and its upstream

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

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

היכן נפתחת המעטפה, ומה שורד אותה

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

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

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

בדקו את הנתיב שהאפליקציה באמת עברה

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

getent hosts example.com
ip route get "$(getent hosts example.com | awk '{print $1; exit}')"
ss -tnp state established '( dport = :443 )'

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

ארכיטקטורת האבטחה RFC 4301 מתארת את גרסת שכבת ה-IP של העטיפה הזו ב-IPsec, ואותה היגיון שכבות חל על WireGuard ו-OpenVPN. ברגע שאתם יכולים להצביע על המנה הפנימית ועל המנה החיצונית כעל עצמים נפרדים, רוב התנהגות המנהרה מפסיקה להיות מסתורית והופכת לטבלת ניתוב שאפשר לקרוא.

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