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

פינג אחד מפצל את הבעיה לשניים

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

ip addr show tun0

קראו את ממשק הלקוח לפני כל דבר אחר, כי מסכת הרשת היא שמגדירה את הטופולוגיה. /24 או מסכת תת-רשת אחרת פירושה מאגר משותף; /30 עם כתובת עמית פירושה הפריסה הישנה של נקודה לנקודה, שבה לכל לקוח יש בדיוק שכן אחד, השרת.

net30 מול תת-רשת, כפי שנקרא מצד הלקוח

What you observenet30subnet
Client netmask/30 with a peer addressThe pool's own mask
Peers a client can address directlyOne, the serverEvery client in the pool
AddressingOne /30 block per client, with the server as the only peerOne pool mask shared by all clients
Effect of client-to-clientRequired for any peer trafficRequired for peer traffic, still no broadcast

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

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

client-to-client הוא שער נפרד

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

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

TUN מול TAP, ומה כל אחד יכול לשאת

PropertyTUNTAP
LayerLayer 3, IP packetsLayer 2, Ethernet frames
Broadcast and multicastNot carriedCarried
Bridging to the LANNot applicableRequired for a shared segment
Client platform supportEverywhereMissing on Android and iOS, limited on macOS

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

לשתי תחנות עבודה או שלוש שזקוקות לפתרון שמות, רשומת hosts או כתובת unicast זולה בהרבה מגשר. פנו ל-TAP כאשר פרוטוקול שאינכם יכולים להחליף תלוי בגילוי בשכבה 2, ולא לפני כן.

לקוחות באותה תת-רשת בלי גשר

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

ip neigh add proxy 10.50.1.250 dev eth0

Proxy ARP סוגר את הפער הזה בכך שהשרת עונה בשם הלקוח. לטווח, parpd מנהל את הרשומות כשהלקוחות באים והולכים, בעוד ש-sysctl net.ipv4.conf.eth0.proxy_arp=1 עונה לכל מה שמנותב למקום אחר, וזה רחב מספיק כדי ליצור הפתעות משלו בקטע עמוס.

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

לפני שמשנים משהו, תפסו ניסיון אחד בשרת עם tcpdump -ni tun0 ואמתו אם מנת העמית מגיעה בכלל. הגעה ואז השלכה מצביעה על client-to-client; אי-הגעה בכלל מצביעה על טופולוגיה או ניתוב. המדריך של OpenVPN 2.6 מתעד את שתי מילות המפתח ואת ברירת המחדל של הטופולוגיה, וכדאי להשוות אותו לגרסה שלכם לפני שמעתיקים שורה מפוסט בפורום.

  • ממשק tun מציג מסכת מאגר ולא זוג עמיתים /30.
  • פינג ישיר לכתובת המנהרה השנייה מצליח לפני שאתם בודקים את הגילוי.
  • תצורת השרת כוללת את client-to-client בכל פעם שעמיתים חייבים להחליף מנות.
  • נקבו בשם פרוטוקול הגילוי שאתם בודקים במקום לומר שהאפליקציה נכשלת.
  • השתמשו ב-TAP רק אם כל פלטפורמת לקוח בקבוצה תומכת בו.
  • הרחיקו NAT מהנתיב בין המנהרה ל-LAN כשנגישות בתוך אותה תת-רשת חשובה.

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