مسیریابی VPN را بدون دستزدن به مسیرهای میزبان در فضای نامها آزمایش کنید
سه نقش شبیهسازیشده، سه بافت جداگانه و یک veth برای هر پیوند. پیش از دستزدن به میزبان، آزمایشگاه فضای نام را با آزمایشگاه مسیرهای میزبان مقایسه کنید.
دو آزمایشگاه میتوانند یک توپولوژی VPN را مدل کنند و به روشهای کاملاً متفاوتی شکست بخورند: یکی در فضای نامهای شبکه زندگی میکند و دیگری روی مسیرهای خود میزبان. نسخه فضای نام هر رابط، مسیر و سوکت را در بافتی نگه میدارد که میتوانید حذفش کنید، در حالی که نسخه میزبان سریعتر شروع میشود و حالت را پشت سر میگذارد. همان حالت باقیمانده دلیلی است که آزمایشگاه دوم یک ماه بعد سخت تکرار میشود. اول پاکسازی را مقایسه کنید، چون تعیین میکند که آیا میتوانید آزمایش را دو بار اجرا کنید.
دو راه برای ساختن همان آزمایشگاه، و اینکه کدام یک کجا برنده است
در آزمایشگاه مسیرهای میزبان، یک رابط تونل و مسیرها را به ماشینی که روی آن کار میکنید اضافه میکنید، پس آزمایش سرنوشتش را با پوسته، مدیر بسته و هر اتصال دیگری شریک میشود. در آزمایشگاه فضای نام، هر نقش پشته خودش از رابطها، نشانیها، مسیرها و سوکتها را میگیرد و حذف فضای نام همه آن را برمیدارد. هیچکدام از دو مدل درستتر نیست، چون به پرسشهای متفاوتی پاسخ میدهند. وقتی موضوع مسیریابی و ارسال است فضای نام را انتخاب کنید و وقتی موضوع نحوه یکپارچهشدن یک کلاینت رومیزی است، آزمایشگاه میزبان را.
| Aspect | Namespace lab | Host-route lab |
|---|---|---|
| Isolation | Full stack per role | Shares the host stack |
| Cleanup | Delete named namespaces | Manual route and rule removal |
| Realism | Strong for routing | Needed for GUI clients |
قاطیکردن این دو اشتباه معمول است: آزمایشگاه فضای نامی که در برابر کلاینتی فقط روی میزبان آزمایش میشود درباره هیچیک از دو چیدمان چیزی ثابت نمیکند. پیش از ساختن اولین پیوند تصمیم بگیرید چه پرسشی میپرسید.
یک بافت برای هر نقش، بهعمد به هم متصل
برای هر نقش یک فضای نام بسازید و هر سر هر جفت veth را به بافتی که مالک آن است منتقل کنید. چهار فرمان اول کافی است تا شکل را ببینید:
ip netns add client
ip netns add gateway
ip link add veth-c type veth peer name veth-g
ip link set veth-c netns clientبه آزمایشگاه بازههایی بدهید که با هیچچیز روی میزبان همپوشانی نداشته باشند و پیش از شروع بنویسید کدام فضای نام مالک کدام نشانی است. آزمایشگاه کارآمد به دو مسیر جدا نیاز دارد: یکی بیرونی تا نقطه پایانی VPN به همتای خود برسد و یک مسیر بازگشت برای منبعی که محافظت میشود. آنها را دو تصمیم مدل کنید، چون آزمایشگاهی که فقط نیمه خروجی را میسازد از آزمون دستدادن میگذرد و در آزمون برنامه شکست میخورد.
نقش ارسال همان جایی است که آزمایشگاهها جالب میشوند
یک نقش باید ارسال کند، یعنی ارسال را درون آن فضای نام فعال کنید و قاعدهای را که طراحی لازم دارد اضافه کنید. حالت ارسال به ازای هر فضای نام است، پس تنظیم میزبان برای آزمایشگاه بیربط است و تنظیم آزمایشگاه به بیرون نشت نمیکند، همانطور که مستندات فضای نامهای شبکه توصیف میکند. WireGuard مستند میکند که یک رابط و سوکت بیرونیاش میتوانند در فضای نامهای متفاوت زندگی کنند، که ترفندی سودمند و راهی عالی برای گیجکردن خودتان است. فرض نکنید که جابهجایی یک رابط هر بخش اتصال را به یک شکل جابهجا میکند.
پس از یک بسته آزمایشی شمارنده ارسال را بررسی کنید، چون قاعدهای که هرگز مطابقت نکرد و قاعدهای که بسته را انداخت در جدول مسیر یکسان به نظر میرسند. فقط شمارندهها آنها را جدا میکنند.
یک خط پایه ثبت کنید، سپس یک مسیر را بشکنید
با ثبت آنچه وجود دارد شروع کنید و بافت را کنار هر خط بنویسید. فضای نامها را بخوانید، سپس مسیری که یک مقصد آزمایشی درون یکی از آنها میپیماید، سپس شمارندههای روی پیوندی که آن را حمل میکند:
ip netns list
ip -n client route get 10.0.0.5
ip -n gateway -s link show veth-gفرمان سوم همانی است که مردم از آن میگذرند و شواهد همانجا زندگی میکند: شمارندههای انداختهشده و خطاها به شما میگویند آیا بسته اصلاً به نقش ارسال رسیده است. پس از یک تغییر همان سه نما را ثبت کنید و بگذارید تفاوت شاهد باشد نه حافظهتان از آن. سپس دقیقاً یک چیز را بشکنید، یا با حذف یک مسیر یا با افزودن قاعده رد در مسیر ارسال، و نشانهای را که پیشبینی کردید تأیید کنید: دستدادن کاملشده بدون پاسخ، یا شکست در تفکیک نام بهجای پایان مهلت. آزمایشگاهی که فقط موفقیت را نشان میدهد بسیار کم میآموزد.
پاکسازی همان چیزی است که اجرای بعدی را تکرارپذیر میکند
پاکسازی را محدود به منابعی نگه دارید که نام بردهاید، چون بازنشانی کلی دیوار آتش یا حذف مسیر میزبان تکرارپذیری نیست، یک حادثه دوم است. توپولوژی، فرمانهای دقیق و مشاهداتی که انتظار داشتید را ذخیره کنید تا اجرای بعدی همان شکست را بازتولید کند نه اینکه حدس بزند حالت قبلی در کدام بافت بود. بدون آن ثبت، آزمایشگاه یک داستان است نه یک رویه.
برای آزمایشگاه از اعتبارنامههای تولیدشده محلی استفاده کنید و حسابهای تولید را از نمونههای مشترک دور نگه دارید. سپس هر فضای نام را حذف کنید و تأیید کنید که نمای میزبان تغییر نکرده است، که تمام دلیل انتخاب این مدل است. آزمایشگاهی که نمیتوانید پاک حذفش کنید یک تغییر میزبان با گامهای اضافی است.