یک خط در سند نیازمندی‌ها، «این برنامه می‌تواند از VPN استفاده کند و هیچ چیز دیگر»، بی‌صدا دو سازوکار می‌خواهد که هیچ کلید واحدی آن‌ها را فراهم نمی‌کند. ترافیک به مسیری از میان تونل موردنظر نیاز دارد، و ترافیکی که مستقیم بیرون می‌رفت باید رد شود. ابزارهایی که یکی از این دو را خوب انجام می‌دهند و دیگری را اصلاً انجام نمی‌دهند رایج‌اند، از این رو مقایسه‌ای که تنها می‌پرسد آیا چیزی می‌تواند مسدود کند، با اطمینان به نیمی از پرسش پاسخ می‌دهد. نخست مرز را بنویسید، سپس اجزایی را انتخاب کنید که هر دو نیمه آن را پوشش می‌دهند.

دو نیازمندی که در یک جمله پنهان شده‌اند

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

ApproachSteers trafficRefuses direct egressKnows the app identity
Per-app VPN profileYes, for the apps it namesOnly if a filter or firewall also blocksYes, within its own rules
Application proxy settingPartly, for requests that honour itNoNo
Content filterNoYesYes, if the filter is written that way
Local PF rulesetNoYes, by address and portNot reliably

جدول را مانند یک فهرست بررسی بخوانید، نه یک رتبه‌بندی. هیچ ردی هر دو ستون میانی را پر نمی‌کند، و ردیف‌هایی که آن‌ها را می‌پوشانند دو جزء همکار هستند: یکی مالک مسیر است و دیگری مالک رد. ستون هویت به دلیل دیگری اهمیت دارد، زیرا قاعده‌ای که نمی‌تواند برنامه را نام ببرد نمی‌تواند قاعده‌ای درباره آن برنامه اجرا کند. هر چیزی که مستقر کنید باید به هر سه پاسخ دهد، وگرنه مرز در سند نیازمندی‌ها همان مرز روی دستگاه نیست.

هدایت به‌تنهایی یک راه خروج باقی می‌گذارد

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

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

رد به‌تنهایی برنامه را از کار می‌اندازد

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

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

استقرار تعیین می‌کند آیا قاعده فردا هم وجود دارد

اینکه یک Network Extension چگونه در پلتفرم‌های Apple مستقر می‌شود به نوع ارائه‌دهنده، بسته‌بندی و نسخه سیستم‌عامل پیش روی شما بستگی دارد. افزونه برنامه در macOS در بافت کاربر اجرا می‌شود و وقتی آن کاربر خارج می‌شود پایان می‌یابد، در حالی که افزونه سیستم بافت جهانی دارد که به نشست وابسته نیست. اگر حفاظت باید از خروج جان سالم به در ببرد، آن تفاوت تمام طراحی است نه یک پانوشت. مسیر استقرار را پیش از وعده دادن به رفتار تأیید کنید، زیرا کد یکسان بسته به اینکه کدام نوع افزونه ارسال می‌شود متفاوت فرود می‌آید.

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

یک مورد پذیرش که برنامه را نام می‌برد

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

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

با نوشتن چهار مورد پایان دهید: برنامه از کدام اجزا ساخته شده، چه کسی مالک هدایت است، چه کسی مالک رد است، و حالت‌هایی که قاعده باید هنوز در آن‌ها برقرار بماند. یک مخزن عمومی می‌تواند یکی از معیارهای انتخاب باشد، اما یکی از آن چهار نیست، و همان موارد تعیین می‌کنند که آیا ابزار مشخصی نیازمندی شبکه را برآورده می‌کند.

مقالات مرتبط