פרוטוקול 47 מול פורט TCP 47: שני כותרות, שני כללים
מספר פרוטוקול ופורט חיים בכותרות שונות, ולכן כלל אחד לא יכול להחליף את האחר. PPTP מפריד בין השניים, ותיבת פורט לא יכולה לבטא GRE.
רשתות מלונות וחומות אש של כנסים מציגות לעיתים קרובות תיבת הרשאה מותאמת, ומישהו מקליד בה 47 בתקווה ש-PPTP יעבוד. הכלל נוצר, המנהרה עדיין נכשלת, והניסיון הבא משתמש במספר אחר. הטעות נמצאת בחבילה עצמה: ב-IPv4 יש שדה פרוטוקול שמציין מה מגיע אחרי כותרת IP, בעוד של-TCP ול-UDP יש שדות פורט שקיימים רק כשנמצאים בתוך אחת הכותרות האלה. אלה לא שתי צורות כתיבה של אותה הרשאה.
כותרת IPv4 מציינת את הפרוטוקול הבא
שדה הפרוטוקול הוא בייט אחד בכותרת IPv4, והוא מחזיק מספר שמתאר את המטען: 6 עבור TCP, 17 עבור UDP, 47 עבור GRE, 50 עבור ESP. כל מה שמסנן חבילות קורא את הערך הזה לפני שהוא מסתכל לעומק, כי הכותרת העמוקה יותר מקבלת משמעות רק לאחר שהסוג ידוע. שנה פורט בהמשך השיחה, והשדה הזה לא זז.
לכן כלל שנכתב נגד פרוטוקול 47 מתאר את שכבת IP. שום פורט לא משתתף בהחלטה כלל.
פורטים קיימים בתוך TCP ו-UDP, בשום מקום אחר
פורטים הם מזהים בני שישה עשר ביט בתוך כותרות TCP ו-UDP, ותפקידם להפריד שיחות שחולקות כתובת אחת. כותרת GRE נושאת ערך סוג פרוטוקול, לעתים קרובות EtherType, בתוספת מפתחות אופציונליים לריבוב. לכן הביטוי פורט 47 אינו מציין דבר שחבילת GRE יכולה להתאים לו.
ממשקי חומות אש שונים בכמה מזה הם חושפים. חלקם מקבלים מספר פרוטוקול, חלקם מציעים רשימה עם שמות, ומעטים מקבלים רק TCP או UDP עם פורטים.
PPTP משתמש בשתי השכבות בו-זמנית
PPTP הוא הדוגמה הברורה ביותר משום שהוא מחלק את עבודתו בין השתיים בכוונה. חיבור הבקרה הוא הפעלת TCP לפורט 1723, ונתיב הנתונים הוא GRE, פרוטוקול 47, בלי ששום פורט יהיה מעורב בשום מקום. חומת אש שמתירה 1723 ושום דבר אחר נותנת למשא ומתן להתחיל ואז משליכה את המטען. המנהרה נראית תלויה לאחר האימות במקום להיכשל בהתחברות, ולכן הסימפטום מדווח לעתים קרובות כבעיית סיסמה.
| Path | Outer protocol | Port |
|---|---|---|
| Control channel | TCP, protocol 6 | 1723 |
| Data channel | GRE, protocol 47 | None |
קרא את שתי השורות בנפרד כשאתה כותב את הכלל, ובדוק כל אחת מול התחביר של הספק. שורה אחת צריכה פורט, השנייה צריכה מספר פרוטוקול, ואף רשומה אחת לא מכסה את שתיהן.
למה דף העברת פורטים לא יכול לבטא GRE
טופס העברה שמקבל רק TCP ו-UDP לא יכול לתאר GRE, איך שלא ייקרא הטופס. תרגום כתובות מוסיף קושי שני, כי ל-GRE אין פורטים והמתרגם חייב לעקוב אחרי מזהה הקריאה במקום. חלק מהנתבים הביתיים מגיעים עם עוזר שמטפל בזה; רבים לא, ואף רשומת הרשאת TCP נוספת לא תיצור התנהגות כזו.
כשהדרישה האמיתית היא מנהרה מודרנית, בחר עיצוב שמשתמש ב-TCP או ב-UDP בכוונה במקום לקוות שמתרגם ינחש נכון.
הכימוס קובע מה רואה המסנן
הכימוס משנה את החבילה החיצונית, והחבילה החיצונית היא מה שכלל מתאים לו. ESP מקורי הוא פרוטוקול 50, בעוד שמעבר NAT עוטף ESP בתוך UDP 4500 כדי שישרוד את תרגום הכתובות. מסנן שמתיר UDP 4500 לעולם לא רואה פרוטוקול 50, ומסנן שנכתב עבור פרוטוקול 50 לעולם לא מתאים לצורה העטופה.
שאל על איזה כימוס הסכימו הלקוח והשער, ואז כתוב את הכלל בדיוק עבור הצורה החיצונית הזו ושום דבר יותר.
כתוב את הכלל כך שמישהו יוכל לבדוק אותו
הבע כל כלל כמשפחת כתובות, פרוטוקול חיצוני, פורטי תעבורה אם יש, כיוון ושתי נקודות הקצה. סוקר יכול להשוות את המשפט הזה ללכידת חבילות ולהגיע לפסק דין. הוראה לפתוח 47 איש לא יכול לבדוק, וכך היא שורדת שנים במדריכי נהלים.
הוסף את הבדיקה שמוכיחה זאת: התחבר בזמן שאתה לוכד בממשק החיצוני, ואשר את הפרוטוקול והפורט החיצוניים שמופיעים בפועל בעקבה.