مجموعه nftables تغذیهشده از DNS به WireGuard: تحویل چگونه کار میکند
پاسخ DNS میتواند مجموعه nftables را تغذیه کند، اما مجموعه چیزی را مسیریابی نمیکند. چهار تحویل و سه عمر را دنبال کنید که تعیین میکنند هدایت کار میکند یا نه.
نامها به نشانیها تبدیل میشوند و این نشانیها میتوانند در مجموعهای در دیوار آتش قرار بگیرند که بعداً بر مسیریابی اثر میگذارد، و این هدایت بر پایه نام را بدون پروکسی ممکن میکند. مشکل اینجاست که چهار جزء باید درست تحویل بدهند: حلکننده، مجموعه، طبقهبند که جریان تازه را علامت میزند، و همتایی که آن را حمل میکند. هر تحویل به شکلی متفاوت شکست میخورد و هر یک زمان خودش را نگه میدارد.
طرح را زنجیره ببینید نه پیکربندی. پرسش در هر گام این است که کدام جزء صاحب تصمیم است و وقتی ورودیاش نباشد چه میشود.
پاسخ DNS چه میتواند بکند و چه نمیتواند
dnsmasq میتواند نشانیها را از پاسخها به مجموعه nftables کپی کند، که تغذیه است نه تصمیم مسیریابی. آن گزینه، که در راهنمای dnsmasq مستند شده، خانواده، جدول و مجموعه را نام میبرد و 4# آغازین آن فقط رکوردهای A را برمیگزیند، پس مقصدهای v6 ترتیب خودشان را میخواهند. مجموعه باید از قبل وجود داشته باشد، چون حلکننده عناصر را به چیزی اضافه میکند که صاحب دیوار آتش ساخته است. هیچ چیز در آن گام واسط، جدول یا همتا را انتخاب نمیکند.
کارخواست نیز باید برای نام از همان حلکننده استفاده کند. برنامهای با DNS رمزگذاریشده خودش، یا پاسخی ذخیرهشده از پیش از وجود سیاست، بدون ساختن هیچ ورودی در مجموعه وصل میشود.
مجموعه ورودی است، نه مسیر
عنصر در مجموعه یک شرط تطبیق است. چیزی باید به آن نگاه کند، تصمیم بگیرد که این بسته جریان تازهای را آغاز میکند و سیاستی را اعمال کند که جریان را از تونل میفرستد. در Linux این معمولاً یعنی مسیر خروجی مسیریابیپذیر که میتواند علامت بگذارد، قاعدهای که بستههای علامتخورده را به جدولی اختصاصی میفرستد، و مسیری در آن جدول به سمت دستگاه WireGuard. عضویت بهتنهایی هیچیک از اینها را نصب نمیکند.
nft add set inet vpn_select office_v4 { type ipv4_addr\; }
ip rule add fwmark 0x40 table 200
ip route add default dev wg0 table 200
wg show wg0 allowed-ips
همتا یک بررسی پوشش دوم اعمال میکند که مردم فراموش میکنند. WireGuard بسته را فقط برای همتایی رمز میکند که نشانیهای مجازش مقصد را در بر بگیرد، پس مسیر سیاستی به واسط کافی نیست وقتی فهرست همتا آن پیشوند را کنار میگذارد. فهرست را تحت کنترل صاحب مسیریابی نگه دارید نه اینکه به هر مسیری که مدیر تصادفاً میسازد تکیه کنید.
علامتها، جدولها و پوشش همتا
علامتها فضای نامی مشترکاند، پس هم مقدار و هم ماسک باید با هر چیز دیگری که از آنها استفاده میکند هماهنگ شود. قاعدهای که ترافیک علامتخورده را به جدول اختصاصی میفرستد وقتی آن جدول مسیر منطبقی ندارد به نتیجهای تعریفشده نیاز دارد، چون جستوجوی بیپاسخ میتواند به قاعده بعدی برود و بسته را از واسط فیزیکی بیرون بفرستد. مسیر پیشفرض blackhole درون جدول اختصاصی آن فرار خاموش را به حذف دیدنی تبدیل میکند. آنچه طرح هنوز نمیتواند، بسته شدن در صورت خطا برای مقصدی است که هرگز به مجموعه وارد نشده.
بستههای بیرونی خود تونل باید از طبقهبند بگریزند. ابزارهای WireGuard دقیقاً برای همین منظور علامت سوکت میدهند و استفاده از آن مانع میشود که کپسولهسازی به واسطی که آن را میسازد بازگردانده شود.
هر عمر را جداگانه بیازمایید
سه انبار با سه زمانبندی کهنه میشوند: حافظه حلکننده، عناصر مجموعه و اتصال ردیابیشده. آنها را به همین ترتیب بیازمایید و ببینید هر یک وقتی باید حرکت میکند یا نه. دستورهای زیر حلکننده، مجموعه، جدول اتصالها و قواعد سیاست را بدون تغییر چیزی میخوانند.
dig +short office.example
nft list set inet vpn_select office_v4
conntrack -L -d 10.60.8.15
ip rule show
جستوجوی تازهای که عنصری میافزاید ثابت میکند تغذیه کار میکند، در حالی که عنصر کهنهای که از پاسخش بیشتر میماند ناهمخوانی عمری است که ارزش نوشتن دارد. اتصال تازهای که با علامت مورد انتظار در جدول اتصالها پیدا میشود نشان میدهد طبقهبند اجرا شده، و اتصال قدیمی که علامت اصلی خود را نگه میدارد رفتار درست است نه اشکال. فهرست قواعد پاسخ میدهد که آیا جستوجوی سیاست اصلاً وجود دارد، که پرسشی متفاوت از این است که آیا تطبیق یافت. چهار خروجی را به همین ترتیب بخوانید و تحویل شکستخورده خودش را نشان میدهد.
جایی که الزام این است که نامی خاص همیشه از یک مسیر استفاده کند، مجموعه تغذیهشده از DNS نمیتواند آن را ثابت کند، چون نشانیهای مشترک نامهای دیگر را هم حمل میکنند. پروکسی یا سازوکاری در سطح برنامه ابزار آن تضمین است.