دو آزمایشگاه می‌توانند یک توپولوژی VPN را مدل کنند و به روش‌های کاملاً متفاوتی شکست بخورند: یکی در فضای نام‌های شبکه زندگی می‌کند و دیگری روی مسیرهای خود میزبان. نسخه فضای نام هر رابط، مسیر و سوکت را در بافتی نگه می‌دارد که می‌توانید حذفش کنید، در حالی که نسخه میزبان سریع‌تر شروع می‌شود و حالت را پشت سر می‌گذارد. همان حالت باقی‌مانده دلیلی است که آزمایشگاه دوم یک ماه بعد سخت تکرار می‌شود. اول پاک‌سازی را مقایسه کنید، چون تعیین می‌کند که آیا می‌توانید آزمایش را دو بار اجرا کنید.

دو راه برای ساختن همان آزمایشگاه، و اینکه کدام یک کجا برنده است

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

AspectNamespace labHost-route lab
IsolationFull stack per roleShares the host stack
CleanupDelete named namespacesManual route and rule removal
RealismStrong for routingNeeded 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

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

پاک‌سازی همان چیزی است که اجرای بعدی را تکرارپذیر می‌کند

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

برای آزمایشگاه از اعتبارنامه‌های تولیدشده محلی استفاده کنید و حساب‌های تولید را از نمونه‌های مشترک دور نگه دارید. سپس هر فضای نام را حذف کنید و تأیید کنید که نمای میزبان تغییر نکرده است، که تمام دلیل انتخاب این مدل است. آزمایشگاهی که نمی‌توانید پاک حذفش کنید یک تغییر میزبان با گام‌های اضافی است.

مقالات مرتبط