نشانه‌ای که در nftables تعیین می‌شود باید یک کلاس ترافیک را از تونل بفرستد، اما ترافیک همچنان از رابط فیزیکی خارج می‌شود. مجموعه قواعد به‌تنهایی درست به نظر می‌رسد. آنچه معمولاً رخ داده این است که چیز دیگری همان نشانه را نوشته است، یا قاعده مسیریابی با ماسکی منطبق می‌شود که مقدار جدید دیگر آن را برآورده نمی‌کند.

بررسی 1: قاعده‌ای را بخوانید که هسته با آن منطبق می‌شود

از قاعده سیاست شروع کنید نه از دیوار آتش. هسته قواعد را به ترتیب اولویت بررسی می‌کند و نخستین تطابق جدول را تعیین می‌کند. مقدار fwmark و ماسک را از خود قاعده بخوانید، سپس تأیید کنید که بسته‌ای با نشانه‌ای که تعیین کرده‌اید واقعاً با آن منطبق می‌شود. قاعده‌ای که مقدار کامل 32 بیتی انتظار دارد با بسته‌ای که تنها یک بیت دارد منطبق نخواهد شد.

سپس تأیید کنید که آن قاعده کدام جدول را انتخاب می‌کند و جدول چه دارد. قاعده‌ای که به جدول خالی اشاره می‌کند جست‌وجوی ناموفق تولید می‌کند، که در بسیاری از سیستم‌ها یعنی بسته به قاعده بعدی می‌افتد و از رابط فیزیکی خارج می‌شود.

دو فرمان این را روشن می‌کند: فهرست قواعد، و جست‌وجوی مسیر برای مقصد در آن جدول.

بررسی 2: نشانه بسته یا نشانه اتصال

nftables می‌تواند نشانه‌ای روی بسته و نشانه‌ای روی مدخل ردیابی اتصال بگذارد، و این‌ها اشیای متفاوتی هستند. نشانه بسته برای گذر پردازشی بسته زنده است، در حالی که نشانه اتصال برای جریان باقی می‌ماند و باید آگاهانه کپی شود. گذاشتن یکی و انتظار دیگری نیمه‌راه‌حل رایجی است.

اگر قاعده مسیریابی بر نشانه بسته تکیه کند، بازگرداندن نشانه اتصال در ادامه مسیر هیچ کاری برای آن تصمیم نمی‌کند، زیرا تصمیم پیش‌تر گرفته شده است.

تصمیم بگیرید کدام شیء مالک سیگنال مسیریابی است، سپس آن را در نقطه‌ای تعیین کنید که تصمیم مسیریابی گرفته می‌شود.

بررسی 3: چه کس دیگری آن نشانه را می‌نویسد

ابزارهای خود WireGuard بسته‌های UDP خود را نشانه‌گذاری می‌کنند تا انتقال رمزنگاری‌شده به تونلی که به آن تعلق دارد بازمسیریابی نشود. اگر مجموعه قواعد شما مقداری نامرتبط را به همان فیلد اختصاص دهد، آن استثنا از بین می‌رود و ترافیک بیرونی تونل تلاش می‌کند به خودش وارد شود. نشانه آن تونلی است که برقرار می‌شود و سپس از عبور ترافیک بازمی‌ماند.

نشانه‌ها همچنین توسط ابزارهای دیگر دیوار آتش، شبکه‌بندی کانتینر و مسیریابی سیاستی برای مقاصد دیگر استفاده می‌شوند، بنابراین نوشتن کل فیلد توسط دو زیرسیستم تعارض است حتی وقتی هر یک به‌تنهایی درست باشد.

پیش از افزودن یکی دیگر، نویسندگان را فهرست کنید.

بررسی 4: ماسک تعیین می‌کند چه چیزی را نگه می‌دارید

نشانه یک فیلد 32 بیتی است و ماسک‌ها روش اشتراک آن میان چند مالک هستند. تعیین مقدار با ماسک بیت‌هایی را که مالکشان نیستید حفظ می‌کند؛ تعیین کل فیلد بیت‌های همه دیگران را نابود می‌کند. ماسک را در هر قاعده‌ای که فیلد را لمس می‌کند بخوانید، از جمله آن‌هایی که خودتان ننوشته‌اید.

تخصیص بیت‌ها را کنار مجموعه قواعد مستند کنید.

وگرنه نفر بعدی مقداری را بازاستفاده می‌کند که از پیش مالک دارد، و تعارض در اینجا شبیه باگ مسیریابی به نظر می‌رسد در حالی که باگ آدرس‌دهی است. مستندات nftables درباره فراداده بسته خود عملیات نشانه را توصیف می‌کند.

بررسی 5: با یک جریان واقعی تأیید کنید، نه با جست‌وجو

جست‌وجوی ساده مسیر نشانه‌ای حمل نمی‌کند، پس می‌تواند مسیری متفاوت از بسته واقعی نشان دهد. ترافیکی را که برایتان مهم است تولید کنید و شمارنده‌ها، مدخل ردیابی اتصال و رابطی که واقعاً از آن خارج می‌شود را ببینید. هم کلاس شامل و هم کلاس مستثنی را آزمایش کنید، زیرا نشانه‌ای که بیش از حد گسترده است استثنا را می‌شکند در حالی که موفق به نظر می‌رسد. اگر کلاس شامل کار کند و کلاس مستثنی هم وارد تونل شود، نشانه بیش از حد گسترده است نه بیش از حد باریک.

از پاک کردن وضعیت اتصال برای تحمیل تازه‌سازی در یک نشست زنده بپرهیزید، چون جریان‌های جدید و موجود می‌توانند به‌طور مشروع مسیرهای متفاوتی بگیرند.

نشانه، ماسک و جدول را در یک جا ثبت کنید، آنگاه ویرایش بعدی قابل بازبینی می‌شود.

مقالات مرتبط