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

בדיקה 1: קראו את הכלל שאליו הליבה מתאימה

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

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

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

בדיקה 2: סימון חבילה או סימון חיבור

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

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

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

בדיקה 3: מי עוד כותב את הסימון הזה

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

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

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

בדיקה 4: המסכה קובעת מה נשאר לכם

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

תעדו את חלוקת הסיביות לצד מערך הכללים.

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

בדיקה 5: אמתו בזרימה אמיתית, לא בחיפוש

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

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

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

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