تونل کامل در برابر مسیر نقطه پایانی: دسترسپذیر نگه داشتن سرور VPN
تونل از روی شبکهای عبور میکند که جایگزین آن میشود. استثنای مسیر میزبان را با نشانه سوکت در سطح برنامه مقایسه کنید و بدانید هر یک چه زمانی از کار میافتد.
یک مسیر پیشفرض از طریق تونل اضافه کنید و بستههای خود تونل از آن پیروی میکنند. جدول سپس قاعدهای دارد که خودش را نقض میکند. اتصال رمزنگاریشده به سرور میکوشد داخل همان اتصالی سفر کند که در حال برقراری آن است.
دو سازوکار از این حلقه جلوگیری میکنند. یکی در جدول مسیریابی دیده میشود و دیگری درون برنامه زندگی میکند.
ترافیک داخلی و بیرونی دو تصمیم متفاوتاند
بسته برنامه وارد واسط مجازی میشود و کپسوله میگردد. نتیجه بسته جدیدی است که به نشانی عمومی سرور نشانهگذاری شده است. آن بسته به مسیری در شبکه فیزیکی نیاز دارد، چون هیچ بخشی از آن نباید وارد تونل شود.
هر دو تصمیم مسیریابیاند و تنها اولی به تونل تعلق دارد. وقتی کارخواه مسیر پیشفرضی نصب میکند که سرور را هم پوشش میدهد، بسته بیرونی نیز گرفتار میشود.
نشانهها فوری و کاملاند. دستدهی کامل میشود و سپس هیچ چیزی جریان نمییابد، یا اتصال در همان لحظه نصب مسیر قطع میشود. در هر دو حالت keepalive دیگر نمیتواند خارج شود.
گزینه یک: مسیر میزبان برای نقطه پایانی
رویکرد مستقیم مسیری برای نشانی سرور از طریق دروازه اصلی اضافه میکند. تنها یک خط میگیرد. برای هر کسی که جدول را بخواند دیده میشود. توضیح آن در سابقه تغییرات هم آسان است.
ضعف آن زمانی پدیدار میشود که مسیر زیرین تغییر کند. مسیر ذخیرهشده دروازه و واسطی از شبکه قدیمی را نام میبرد. پس از تغییر Wi-Fi ممکن است آن دروازه وجود نداشته باشد و مسیر عقب بماند، درست به نظر برسد و هیچ کاری نکند.
# before the tunnel: which path reaches the endpoint?
ip route get 198.51.100.7
# pin it through the current gateway
ip route add 198.51.100.7/32 via 192.168.1.1 dev wlan0
# after the tunnel is up, confirm the pin survived
ip route get 198.51.100.7
نام میزبان این را سختتر میکند. اگر نقطه پایانی نامی باشد که به چند نشانی تفکیک میشود، استثنا باید نشانیای را پوشش دهد که واقعاً استفاده میشود. جستوجوی بعدی میتواند چیزی برگرداند که مسیر هرگز پوشش نداده است.
گزینه دو: محافظت از سوکت
رویکرد دیگر هرگز به جدول مسیریابی دست نمیزند. کارخواه سوکتی را که تونل را حمل میکند نشانهگذاری یا محافظت میکند، بنابراین سیستمعامل ترافیک آن سوکت را طبق سیاست بیرون از تونل میفرستد. Android این سازوکار را مستقیماً در اختیار برنامههای VPN میگذارد. کارخواههای رومیزی معادلهای آن را با نشانههای دیوار آتش یا فراخوانهای اتصال به دستگاه پیاده میکنند.
مزیت این است که استثنا بهجای دروازه ذخیرهشده از اتصال پیروی میکند. تغییر شبکه مسیر زیرین را بازنویسی میکند و سوکت محافظتشده با آن جابهجا میشود، چون هرگز به نشانیای سنجاق نشده بود. جدول مسیرها پاک میماند.
هزینه آن دیدهشدن است. هیچ چیز در جدول مسیریابی استثنا را نشان نمیدهد، پس بازبینی که به دنبال مسیر میزبان است چیزی نمییابد و ممکن است نتیجه بگیرد طرح ناامن است. محافظت در کد کارخواه و در قواعد سیاستی که آن کد نصب میکند زندگی میکند.
انتخاب میان این دو
سازوکار سطح سوکت را وقتی کارخواه پشتیبانی میکند برگزینید، چون از تغییرات شبکهای که مسیر سنجاقشده را میشکنند جان سالم به در میبرد. مسیر میزبان را وقتی برگزینید که استثنا باید برای ابزارهای دیگر دیده شود، یا وقتی کارخواه چیز بهتری عرضه نمیکند.
هیچیک از این دو سازوکار نیاز به دسترسپذیر بودن نشانی سرور را از میان برنمیدارد. یک دروازه خصوصی نشانی شنونده عمومی دارد و همان نشانی است که باید بیرون از تونل بماند. شبکههای داخلی پشت آن تنها پس از وجود تونل دسترسپذیر میشوند.
هر کدام را برگزینید، آن را نزد مؤلفهای نگه دارید که مالک تونل است. یک مسیر میزبان سرگردان که با دست افزوده شده تا شبکه بعدی کار میکند و سپس به قطعی مرموز فردا تبدیل میشود.