שני לקוחות OpenVPN על מארח Linux אחד: למי שייך המסלול?
שני לקוחות יכולים לחלוק מארח אם לכל קידומת יש בעלים. עברו על המטרה, המאגרים, שמות המופעים ומבחן עצירה לכל מנהרה, בסדר הזה.
שני הפרופילים מדווחים על חיבור ואחד מהם נושא בשקט תעבורה שמיועדת לשני. שני לקוחות על מארח אחד הם סידור נתמך; שני לקוחות בלי בעלים לכל קידומת אינם. העבודה עוסקת פחות בהעלאת המנהרה השנייה ויותר בהחלטה איזה תהליך רשאי לתבוע איזה מסלול. עברו לפי הסדר שלמטה והתצורה נגזרת מהתשובות.
התחילו בשאלה לשם מה נועדה המנהרה השנייה
שלושה מצבים נראים זהים בשורת המצב ודורשים עיצובים שונים. פיצול לפי יעד שולח קידומת אחת דרך פרופיל המשרד ואחרת דרך פרופיל המעבדה, ואף אחד מהם לא תובע מסלול ברירת מחדל. פיצול לפי יישום שומר בדרך כלל מנהרה מלאה אחת ומכוון תעבורה מסוימת בכללי מדיניות. מעבר חלופי מחזיק מנהרה אחת בדיוק פעילה בכל רגע, כלומר השנייה לא אמורה להתחיל אוטומטית.
רשמו את המקרה לפני שתפתחו קובץ תצורה כלשהו, כי התשובה הזאת קובעת את כל מה שאחריה.
הסידור השבור הנפוץ ביותר הוא שתי מנהרות מלאות שדחפו שתיהן מסלול ברירת מחדל, כאשר מי שהתחבר אחרון מנצח והראשונה ממשיכה להעמיד פנים. המצב הזה נראה מכוון משורת המצב ומבזבז יום מטבלת הניתוב. אם נותנים למקרה שם מראש הוא נעשה בלתי אפשרי ולא רק לא סביר.
הסתכלו על המאגרים לפני המסלולים
שני שרתים יכולים לחלק כתובות בקלות מטווח פרטי אחד, וכשהם עושים זאת הלקוח נשאר עם שני ממשקים בתוך קידומת אחת. אז אי אפשר לייחס שום יעד לממשק לפי כתובת, כי שניהם נראים נכונים באותה מידה. מספרו מחדש מאגר אחד במקום להמציא כלל שישבור את התיקו.
בדקו גם את הרשת המקומית, כי LAN ביתי או משרדי שחופף לטווח מנהרה יוצר את אותה עמימות מהצד השני. השוו את הכתובות על המארח עם שתי תצורות השרת לפני שאתם מאשימים את הלקוח. שינוי מאגר בשרת מעבדה הוא תיקון של חמש דקות, ואילו מעקף ניתוב מדיניות לקידומת חופפת הוא מס קבוע על כל מי שיקרא את התצורה אחר כך. החליטו איזה משניהם אתם רוצים לפני שתבחרו היכן להתערב.
שתי משפחות כתובות פירושן שני סבבים של הבדיקה הזאת. מאגרי IPv6 מתנגשים בשקט בדיוק כמו IPv4.
תנו לכל פרופיל בעלים
מופע אחד לכל פרופיל, קובץ תצורה אחד לכל מופע ושם אחד שמזהה את הזוג. באריזה בסגנון Debian השם שאחרי סימן ה-@ בוחר את הקובץ, ולכן שני פרופילים שחולקים שם מופע לא יוכלו לעולם לעבוד שניהם. אשרו את המיפוי מהיחידה המותקנת ולא ממדריך.
systemctl cat [email protected]
ip -4 addr showאחר כך החליטו מי מתקין מסלולים, וזו שאלה של מדיניות ולא של תחביר.
כששני השרתים דוחפים קבוצות לא תואמות, או הוסיפו route-nopull ופרטו רק את הקידומות שכל פרופיל צריך, או הניחו לאחד לשמור על מסלול ברירת המחדל שלו ו כוונו את השאר בכלל מדיניות. שני תהליכים ששניהם מתקינים מסלול ברירת מחדל מסיימים עם מנצח אחד ואף אחד לא יכול לומר למה. ברגע ששתי המנהרות נושאות תעבורה ממקורות שונים, תשובה עלולה לצאת דרך הלא נכונה, והתבנית שמחזיקה מעמד היא סימן חיבור שמשוחזר על תשובות ומנותב לטבלה שלו. הגבילו את הסימנים כך שהחבילות המוצפנות של המנהרות עצמן לא יתאימו להם לעולם.
אמתו לכל מנהרה, ואז עצרו אחת
כששתיהן למעלה, קחו שלוש קריאות: הכתובת בכל התקן מנהרה, המסלול למארח שחי מאחורי כל אחת מהן, והדרך שיעד מחוץ לשתיהן היה נוקט. רשימת מסלולים רגילה מפסיקה לתאר את החיפוש הסופי ברגע שכללים נכנסים למשחק, אז שאלו את הגרעין מה הוא היה בוחר באמת. אחר כך עצרו מופע אחד וראו מה נעלם. אם עצירת הראשונה מפריעה לשנייה, משהו עדיין משותף ביניהן: מסלול, שם התקן או כלל חומת אש שאיש לא הפריד.
ip rule show
ip route get 203.0.113.9החזירו את הפרופיל העצור וחזרו על אותן בדיקות, כי מנהרה שעובדת פעם אחת אחרי אתחול ואף פעם לא שוב היא באג מחזור חיים לבוש בתחפושת ניתוב.
רשמו בהערות הפריסה איזה פרופיל בעל איזו קידומת, לצד טווחי המאגרים. שתי מנהרות הן סידור מכוון, והקורא הבא צריך לראות את הגבול לפני שייגע באחד הפרופילים. בלי ההערה הזאת, הגבול מתגלה מחדש על ידי מי שתורן כשהקידומת המשותפת סוף סוף נשברת.