یک برنامه روی ماشین از VPN خارج می‌شود و دیگری نه، و هر دو کاربر سوگند می‌خورند که چیزی را تغییر نداده‌اند. تفاوت غالباً تصمیم بستن است که خود برنامه می‌گیرد: سوکتی بسته‌شده به یک دستگاه، نشانی مبدأ انتخاب‌شده پیش از اتصال، یا فضای نامی با جدول مسیریابی خودش. هر یک تغییر می‌دهد کدام مسیر اعمال شود و هیچ‌کدام در بررسی عمومی IP در مرورگر دیده نمی‌شود.

سه بستن متفاوت، سه اثر متفاوت

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

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

مشخص کنید برنامه واقعاً چه چیزی تنظیم می‌کند

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

در Linux گزینه‌های سوکت مانند SO_BINDTODEVICE دامنه و الزامات مجوز مستندی دارند و یک فرایند بدون امتیاز ممکن است اصلاً نتواند آن‌ها را تنظیم کند. این محدودیت سرنخ مفیدی است: اگر گزینه قابل اعمال نیست، احتمالاً برنامه منبع تفاوت نیست.

مسیریابی سیاستی مبدأ را می‌خواند

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

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

تونل تقسیم‌شده و فرایندهای کمکی

تونل تقسیم‌شده به‌ازای هر برنامه لایه دیگری می‌افزاید. کلاینت ممکن است بسته یا فرایند برنامه را تطبیق دهد و کمکی که سوکت خودش را باز می‌کند موضوعی جداست. یک راه‌انداز و سرویس پس‌زمینه‌اش می‌توانند زیر همان نام ظاهری اتصال‌های متفاوتی بسازند.

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

مسیر خود برنامه را آزمایش کنید

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

مرجع سوکت Linux گزینه SO_BINDTODEVICE و الزامات آن را مستند می‌کند. نخست پیکربندی خود برنامه را بخوانید، جست‌وجو را در همان بافت بازتولید کنید و تنها پس از آن تصمیم بگیرید که مسیر یا بستن باید تغییر کند.

مقالات مرتبط