یک ماشین، دو کار، یک فایروال: یک اتصال بالادست Wi-Fi، یک زیرشبکه کوچک Ethernet پشت آن، و یک کلاینت VPN رومیزی که فرض می‌کند هر چیزی که از ماشین خارج می‌شود محلی است. برنامه‌هایی که محلی اجرا می‌شوند از مسیر خروجی محلی بیرون می‌روند. دستگاه‌های پشت ایستگاه کاری روی پورت Ethernet می‌رسند و به تصمیم ارسال نیاز دارند. استثنایی که برای مسیر اول نوشته شده هرگز مسیر دوم را نمی‌بیند، و به همین دلیل مرورگر تونل را دور می‌زند ولی دستگاه‌ها نه.

دو مسیر بسته، یک سیاست

OriginPathDecision owner
Application on the workstationOUTPUT then egressThe VPN app's routing policy
Device behind the workstationPREROUTING then FORWARDThe workstation's own forwarding policy

سطر اول چیزی است که بیشتر راهنماهای split-tunneling توصیف می‌کنند. سطر دوم پیکربندی یک روتر است که تصادفاً روی همان ماشین زندگی می‌کند. ادغام این دو در یک مدل ذهنی همان اشتباه است؛ آن‌ها هسته را شریک‌اند، نه سیاست را. پیش از ویرایش هر قاعده‌ای هر دو مسیر را رسم کنید، و بقیه طراحی از این نتیجه می‌شود که کدام مسیر غایب است.

جدول همچنین توضیح می‌دهد چرا یک ماشین می‌تواند در یک آزمون قبول و در آزمون دیگر رد شود. مرورگر روی ایستگاه کاری مسیر محلی را اثبات می‌کند؛ لپ‌تاپی که به پورت Ethernet وصل است مسیر ارسال را اثبات می‌کند. هر تغییر را با هر دو اعتبارسنجی کنید، وگرنه دومی هر چند بار هم که مرورگر تازه شود آزموده‌نشده می‌ماند.

استثنای برنامه در واقع چه چیزی را طبقه‌بندی می‌کند

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

هر چه انتخاب‌گر باشد، این دو فهرست یک فهرست نیستند، و تمام نکته همین است. راهنمای Mullvad برای Linux علامت‌هایی را توصیف می‌کند که فایروال و سیاست مسیریابی آن مصرف می‌کنند، و نمونه‌هایش خروجی محلی را هدف می‌گیرند؛ آن‌ها توصیف پشتیبانی‌شده‌ای از یک روتر پایین‌دست نیستند. کپی کردن آن‌ها ماشینی می‌دهد که گمان می‌کند استثنا دارد در حالی که همه چیز را به تونل می‌فرستد.

قرارداد ترانزیت را بنویسید

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

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

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

علامت‌ها به برنامه‌ای تعلق دارند که مالک آن‌هاست

مقادیر علامت، شماره جدول‌ها و اولویت‌های زنجیره بخشی از سیاست برنامه VPN هستند، نه ثابت‌های جاودان. شبکه‌ای بادوام که به درج قاعده‌ای در جدولی وابسته است که برنامه دیگری آن را بازتولید می‌کند، در به‌روزرسانی بعدی می‌شکند، معمولاً هنگام اتصال دوباره و نه در زمانی مناسب.

افزودن زنجیره پایه دوم با حکم accept لزوماً حکم drop زنجیره بعدی را باطل نمی‌کند. زنجیره‌های پایه قلاب و اولویت دارند و نخستین حکم در ترتیب برنده است؛ یک accept در یک زنجیره dropی را که زنجیره دیگری زودتر به آن می‌رسد لغو نمی‌کند. به مجموعه کامل قواعد و ترتیب سیاست مسیریابی نگاه کنید، نه به تنها شمارنده‌ای که بالا رفته است. شمارنده ثابت می‌کند قاعده‌ای اجرا شده، هرگز ثابت نمی‌کند که حکم آن همان بوده که اعمال شده.

ادغام کنید، یا زیرشبکه را جابه‌جا کنید

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

دومی را انتخاب کنید وقتی شبکه پایین‌دست باید در طول به‌روزرسانی‌های VPN کار کند، یا وقتی هیچ‌کس نمی‌تواند سیاست ادغام‌شده را پس از هر انتشار آزمون کند. اولی را فقط وقتی انتخاب کنید که ادغام مستند شده و کسی مسئول آن است.

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

مقالات مرتبط