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

קודם רשמו את הזוגות המיועדים

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

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

הפכו את התוויות לפני ההשוואה

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

המשיב עשוי לצמצם הצעה לתת־קבוצה מקובלת במקום לדחות אותה. התוצאה הזו גרועה מכישלון נקי, משום שהיא עובדת חצי. בקשו 10.0.0.0/16 כשהמדיניות מתירה 10.0.5.0/24, ואתם עלולים לסיים עם SA בן שמכסה רק את ה־/24 הזה. מארח אחד עונה, כל השאר נופל בחוץ, ושום דבר בלקוח לא אומר זאת. קראו את הבוררים שהתקבלו ולא את אלה שהתבקשו לפני שאתם מסיקים שהמשא ומתן הצליח.

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

קראו את הדחייה מניסיון אחד

אספו את שני היומנים מאותו ניסיון התחברות. פרופיל שמור מראה מה הגדרתם, לא מה הוצע, וב־strongSwan הפקודה swanctl --log מדפיסה את ההודעה שהתקבלה יחד עם הבוררים שהיא נשאה.

לאחר מכן בדקו מה הותקן בפועל. swanctl --list-sas מציג את הבוררים של SA הבן, ו־ip xfrm policy מציג את אותם טווחים כרשומות מדיניות בקרנל. SA בן ברשימה הזו עם בוררים שלא התכוונתם אליהם הוא אירוע צמצום; היעדר SA בן יחד עם TS_UNACCEPTABLE ביומן הוא סירוב.

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

בדקו מה מכווץ את הקבוצה בשקט

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

הגבלות פרוטוקול ופורט הן השלישית. כשהמדיניות מתירה רק TCP 445, SA בן יכול לעלות בעוד ICMP ו־UDP נשארים מחוצה לו, והמשתמש מדווח על מנהרה שבורה כשפרוטוקול אחד היה כל מה שאי־פעם הותר.

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

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

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

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

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

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