WireGuard: دو مسیر نیمه در برابر 0.0.0.0/0 در wg-quick
دو بازه /1 همان نشانیهایی را پوشش میدهند که /0 پوشش میدهد، اما wg-quick آنها را متفاوت مسیریابی میکند. پیش از ویرایش، قواعد سیاست، علامتها و مسیر نقطه پایانی را بررسی کنید.
دو پیشوند /1 دقیقاً همان نشانیهای IPv4 را پوشش میدهند که یک /0 تنها پوشش میدهد، و این برابری فقط درون فهرست پیشوندهای مجاز همتا معتبر است. همان لحظهای که ابزار راهاندازی درباره نحوه مسیریابی تصمیم میگیرد، این برابری از اعتبار میافتد، زیرا wg-quick در لینوکس با پیشوند پیشفرض بهعنوان یک حالت ویژه رفتار میکند، نه بهعنوان حساب. شاخه ویژه یک جدول اختصاصی، دو قاعده سیاست، یک علامت سوکت و تنظیمات مسیر معکوس نصب میکند که یک جفت مسیر نیمه هرگز آنها را دریافت نمیکند. پس وقتی یک پروکسی یا مرورگر پس از ویرایش از کار میافتد، پیشوندها کمترین بخش جالب تغییر هستند.
فهرست پیشوندها تمام پیکربندی نیست
AllowedIPs همزمان دو کار انجام میدهد و تنها یکی از آنها درباره پوشش است. برای خود WireGuard این فهرست مسیریابی کلید رمزنگاری است: تعیین میکند کدام مقصدها بهسوی یک همتا رمز میشوند و آن همتا میتواند از کدام نشانیهای مبدأ استفاده کند. برای wg-quick همین فهرست نقش مشخصات مسیر را هم بازی میکند و مسیری که تولید میکند به این بستگی دارد که فهرست بهطور تصادفی با کدام شاخه جور شود. بنابراین پوشش یکسان در دو شکل متفاوت فهرست هیچ چیزی درباره وضعیت یکسان میزبان نمیگوید.
پیکربندی پیشفرض این تصمیم را از دست شما میگیرد، زیرا Table بهطور پیشفرض خودکار است و ابزار خودش انتخاب میکند مسیرها کجا بنشینند. مدیر شبکه متفاوت، بستهبندی توزیع یا مقدار سفارشی Table نتیجه را دوباره تغییر میدهد، و به همین دلیل توصیهای که برای یک میزبان نوشته شده ممکن است روی میزبان بعدی نادرست به نظر برسد.
شاخه پیشفرض چه چیزی فراتر از یک مسیر اضافه میکند
یک ورودی /0 ابزار wg-quick را به مسیر پیشفرض خود میفرستد: یک جدول مسیریابی جداگانه پیشفرض را دریافت میکند، یک قاعده سیاست ترافیک بیعلامت را به آنجا میفرستد، قاعده دوم مسیرهای دقیقتر جدول اصلی را معتبر نگه میدارد، و رابط یک علامت فایروال روی سوکت خودش میگیرد. همان علامت نگهبان حلقه است. بستههای داده رمزشدهای که ترافیک تونل را حمل میکنند با علامت تنظیمشده خارج میشوند، تا قاعدهای که همه چیز دیگر را به تونل میراند بستههای انتقال خود تونل را نبلعد.
در عوض یک جفت ورودی /1 مسیر عادی را میگیرند. دو مسیر در جدول پیکربندیشده مینشینند و هیچیک از سازوکارهای پیرامون ظاهر نمیشود، نه از آن رو که غیرضروری است، بلکه از آن رو که هرگز به آن مسیر کد وارد نشده است.
کجا دو چیدمان از هم جدا میشوند
واگرایی نخست بهصورت بازگشت ظاهر میشود. وقتی مسیرهای نیمه در جدول اصلی هستند، نشانی انتقال خود همتا درون یک پیشوند تونل میافتد، پس بستهای که باید تونل را حمل کند با مسیری منطبق میشود که به درون تونل اشاره دارد. چیزی باید آن را مستثنا کند: یک مسیر میزبان برای نقطه پایانی کنونی، علامتی که دستی اعمال شده، یا قاعدهای ویژه همان رابط. مسیر میزبان تا زمانی کار میکند که نشانی نقطه پایانی تغییر کند، چیزی که با نقاط پایانی مبتنی بر DNS، کارخواههای سیار و پیکربندیهای چندهمتا رخ میدهد.
دوم، هر چیزی که درباره علامتها استدلال میکند رفتارش عوض میشود. پروکسی شفافی که اتصالها را بهصورت محلی تغییر مسیر میدهد سوکتهای تازهای میسازد که علامتها و مبدأهایشان با جریان اصلی کارخواه تفاوت دارد، و قواعد سیاستی که شاخه پیشفرض تولید میکرد بخشی از چیزی بودند که آن جریانها را جدا کرد. خواندن اتصال خروجی خود پروکسی تمرینی متفاوت از آزمودن دسترسپذیری مقصد اصلی است.
پیش از ویرایش، قواعد و علامتها را بخوانید
وضعیت کنونی را در حالی که تونل سالم است ثبت کنید، سپس پس از تغییر دوباره، و دو خروجی را مقایسه کنید نه اینکه از فایل پیکربندی استدلال کنید. قواعد سیاست، هر جدول، علامت رابط و نقاط پایانی ثبتشده را بگنجانید.
ip rule show
ip -4 route show table all | grep -E 'default|wg1'
wg show wg1 fwmark
wg show wg1 endpoints
اگر خط اول خروجی قاعده ترافیک بیعلامت را از دست داده و جدول اختصاصی خالی است، شاخه پیشفرض اجرا نمیشود و هیچ مقدار محاسبهای روی پیشوندها اثرهایش را بازنمیگرداند. علامت صفر روی رابطی که پیشتر یکی داشت همان نشانه است، در یک مقدار واحد دیده میشود.
پیش از انتشار، از دست رفتن تونل را تمرین کنید
اگر چیدمان مسیرهای نیمه انتخاب آگاهانه است، باید قطعههای غایب را صریح تأمین کند: مسیری برای نقطه پایانی که از تغییر نشانی جان سالم به در ببرد، رفتار موردنظر هنگام افتادن تونل، و برخورد همارز برای IPv6. اینها را بهعنوان الزام بنویسید نه اینکه هنگام یک قطعی کشفشان کنید. سپس شکست را تمرین کنید، زیرا تونل کاملی که بیصدا به پیوند فیزیکی بازمیگردد بدتر از تونلی است که از کار میافتد.
sudo ip -4 route add 198.51.100.20/32 via 192.0.2.1 dev eth0
ip -4 route get 198.51.100.20
sudo wg-quick down wg1
جستوجوی مسیر باید نقطه پایانی را از رابط فیزیکی حل کند بدون آنکه تونل را بپیماید، و پایین آوردن رابط باید میزبان را در وضعیتی بگذارد که طراحی وعده داده بود. پروکسیای که پس از جایگزینی کار میکند ثابت میکند وضعیت تولیدشده میزبان اهمیت داشت؛ اما ثابت نمیکند که جلوگیری از حلقه و رفتار در حالت خاموش از ویرایش جان سالم به در بردهاند.