چگونه یک وبسایت را بیرون از تونل WireGuard خود مسیریابی کنید
یک مسیر /32 از طریق دروازه LAN یک سایت را روی اتصال عادی شما نگه میدارد، به شرطی که فایروال اجازه دهد و DNS بر سر نشانی توافق کند.
کنار گذاشتن یک نام میزبان کاری است که یک تونل نمیتواند انجام دهد. اما یک مسیر میتواند یک نشانی واحد را از تونل دور بزند و از دروازه خانه بیرون ببرد، و این معمولاً برای یک سایت کافی است. مشکل این است که همهچیزِ پاییندستِ مسیر باید توافق داشته باشد: فایروال باید بسته را بیرون بفرستد، DNS باید نشانیای را که مسیریابی کردید برگرداند، و سایت باید همچنان از آن نشانی استفاده کند. وقتی هر یک از این سه بلغزد، استثنا بدون آنکه خودش را اعلام کند از کار میافتد.
پیش از دست زدن به تونل، نشانی مقصد را بخوانید
سایت را یک بار با تونل روشن بارگذاری کنید، سپس نشانی همتا را که مرورگر واقعاً به آن وصل شد ببینید. در لینوکس، ss -tunp نشانی دور هر سوکت باز را فهرست میکند، و dig +short روی همان نام نشان میدهد که resolver چه برگردانده است. هر دو عدد را پیش چشم نگه دارید.
دو پاسخ اغلب با هم نمیخوانند، و همین ناهمخوانی تمام مشکل است. سایتهای بزرگ یک شبکه محتوا را جلوی مبدأ خود میگذارند، پس نشانیای که resolver اکنون برمیگرداند ممکن است همان نباشد که مرورگر یک دقیقه پیش استفاده کرد. آنچه روی سوکت دیدید را مسیریابی کنید، نه آنچه یک راهنمای قدیمی فهرست میکند. اگر پاسخها همچنان میان مناطق میچرخند، استثنای نشانی ابزار اشتباهی برای همان سایت خاص است.
جستوجو را بار دوم از شبکهای دیگر اجرا کنید و پاسخ IPv6 را همراه پاسخ IPv4 ثبت کنید. تونلی که هر دو خانواده را حمل میکند در هر دو استثنا لازم دارد، وگرنه مرورگر بیصدا به مسیر IPv6 که هرگز به آن دست نزدهاید برمیگردد. نشانیها و تاریخ را جایی بنویسید که دوباره نگاه کنید.
یک مسیر میزبان روی کلاینت بگذارید
فرض کنید رابط home-wg نام دارد و روتر LAN روی 192.168.1.1 است. NetworkManager مسیری را میگیرد که دروازهاش همان روتر است و طول پیشوندش تمام 32 بیت را پوشش میدهد، و هسته آن را ترجیح میدهد زیرا پیشوند بلندتر برنده است.
nmcli connection modify home-wg +ipv4.routes "198.51.100.20/32 192.168.1.1"
nmcli connection up home-wg
ip route get 198.51.100.20
دروازه باید بدون تونل در دسترس باشد؛ نشانهرفتن گام بعدی به نشانی تونل هدف را نقش بر آب میکند، زیرا بسته دوباره به رابطی وارد میشود که میکوشید از آن دوری کنید. پس از آنکه اتصال دوباره بالا آمد، ip route get برای استثنا باید دروازه LAN را چاپ کند، و همان فرمان برای یک resolver عمومی باید همچنان دستگاه تونل را چاپ کند.
نمایه wg-quick هیچ فیلد مسیری ندارد، پس همان استثنا در خط PostUp زندگی میکند که مسیر میزبان را با رابط LAN بهعنوان دستگاهش به جدول اصلی اضافه میکند. پس از ویرایش رابط را پایین و دوباره بالا بیاورید، زیرا رابط در حال اجرا هرگز پرونده خود را دوباره نمیخواند. قواعد fwmark که wg-quick نصب میکند فقط بستههای کپسوله خودش را هدایت میکند، پس ترافیک عادی مرورگر همچنان از جدول اصلی پیروی میکند و /32 شما را پیدا میکند.
کلید قطع اضطراری چیز بعدی است که آن را مسدود میکند
سیاست فایروالی که ترافیک را فقط روی رابط تونل میپذیرد، استثنا را دور میریزد حتی وقتی مسیر کاملاً درست است. قواعد پشت کلید را بخوانید نه اینکه به کلید اعتماد کنید، زیرا آنهایی که کلید قطع اضطراری را پیاده میکنند معمولاً به نام یک رابط محدودند.
آنچه میخواهید اجازهای باریک برای رابط فیزیکی و همان یک مقصد است، پیش از حذف قرار گرفته، در حالی که سیاست پیشفرض دستنخورده میماند. متوقف کردن کامل کلید قطع اضطراری نکته را ثابت میکند، اما ماشین را تا زمانی که یادتان برود دوباره روشنش کنید در معرض میگذارد.
دو جهت را جداگانه آزمایش کنید. درخواست به نشانی استثنا باید موفق شود، در حالی که درخواست به سایتی نامرتبط همچنان از تونل خارج میشود. اگر هر دو موفق شوند اما دومی نشانی خانه را گزارش کند، ترتیب قواعد فایروال اشتباه است نه مسیر.
DNS تعیین میکند مرورگر کدام نشانی را بگیرد
وقتی نام درون تونل تجزیه میشود، resolver ارائهدهنده میتواند با نشانیای متفاوت از نشانی محلی پاسخ دهد. آنگاه مسیر شما به نشانیای اعمال میشود که مرورگر هرگز با آن تماس نمیگیرد، و صفحه از طریق تونل بارگذاری میشود انگار هیچ چیز تغییر نکرده است. این خرابی مثل یک استثنای شکسته به نظر میرسد حتی وقتی جدول مسیریابی درست است.
پرسوجوهای آن نام را نیز از resolver محلی بفرستید، یا نامها را کاملاً نادیده بگیرید و نشانی را مستقیم آزمایش کنید. جدا کردن نشانی در حالی که DNS درون تونل میماند رایجترین نسخه نیمهتمام این تنظیم است، و همچنین سختترین برای توجه، زیرا سایت همچنان کار میکند، فقط نه آنطور که میخواستید.
همان استثنا روی روتر، یک بار، برای هر دستگاه
با اجرای تونل روی روتر، مسیر میزبان به جدول مسیریابی سیاستی روتر تعلق دارد و به دروازه WAN اشاره میکند نه دروازه LAN. هر دستگاهی پشت آن استثنا را به ارث میبرد، که برای یک جعبه پخش یا لپتاپ کاری که نمیتوانید تنظیمات شبکهاش را تغییر دهید مهم است.
تونل را خروج پیشفرض برای هر کلاینت دیگر بگذارید، سپس از یک ماشین کلاینت بررسی کنید نه از کنسول روتر. سایت استثنا و یک سایت دوم را در همان نشست مرورگر بارگذاری کنید و نشانیهای خروج را مقایسه کنید؛ اگر دومی همچنان تونل را نشان میدهد، جدول سیاست همان کاری را میکند که خواستهاید.
نشانی، تاریخ و دلیل را در یادداشتهای روتر بنویسید. استثنایی که حول نشانیای ساخته شده که بعداً جابهجا میشود، به نقصی تبدیل میشود که یک سال بعد هیچکس نمیتواند توضیح دهد، و راهحل همیشه مثل یک معما به نظر میرسد تا کسی یادداشت قدیمی را پیدا کند.