دو پرش VPN پشت سر هم: واقعاً چه کسی ترافیک شما را میبیند؟
پرشهای سریالی در نخستین دروازه رمزگشایی و دوباره رمزگذاری میکنند؛ پرشهای تودرتو فقط لایه بیرونی را برمیدارند. هر دو طرح را بپیمایید و ببینید کدام اپراتور چه چیزی میخواند.
هر پروفایل مشتری یک سرور را نام میبرد، پس از جای کاربر یک تونل و یک نقطه وجود دارد که حفاظت در آن پایان مییابد. آنچه پس از آن دروازه نخست رخ میدهد تصمیمی طراحی است که مشتری هرگز آن را نمیبیند، و دو طرح رایج زیر بررسی بسیار متفاوت رفتار میکنند. در زنجیره سریالی دروازه نخست رمزگشایی و دوباره رمزگذاری میکند. در زنجیره تودرتو لایه بیرونی را برمیدارد و تونل درونی را که نمیتواند باز کند، جلو میفرستد. شمار پرشها در هر دو یکسان است، به همین دلیل تفاوت باید کشیده شود نه شمرده.
از مشتری آغاز کنید و هر دو سر را نام ببرید
از جایی آغاز کنید که کاربر آغاز میکند، در پروفایل اتصال. یک نشانی راهدور، یک روش احراز هویت و، هنگامی که طرح پشتیبانی میکند، فهرستی از مسیرها دارد. آن تونل بیرونی از مشتری تا دروازه A را برچسب بزنید و نشانیهای نمونه بدهید: نشانی تونل مشتری 10.77.0.2، نشانی A 10.77.0.1، و نقطه پایانی عمومی A 198.51.100.10، برگرفته از بازه مستندسازی TEST-NET-2 تا هیچ چیز در نمونه با میزبان واقعی برخورد نکند.
هیچ چیز در آن پروفایل از دروازه B نام نمیبرد، و این نقص نیست. پرش دوم از آن A است، و تنها وظیفه مشتری رساندن ترافیک به A و پذیرفتن آنچه بازمیگردد است. اینکه A تونل را پایان میدهد، جلو میفرستد یا تازهای باز میکند، پرسشی است که بقیه این بررسی پاسخ میدهد، و همان تعیین میکند A چه چیزی میتواند بخواند.
سریالی: A رمزگشایی میکند، سپس دوباره رمزگذاری
در طرح سریالی A ترافیک را دو بار پایان میدهد. حفاظت را از مشتری برمیدارد، بسته IP برنامه را میگیرد، و سپس آن بسته را از تونل دومی که A به سوی B میسازد میفرستد. میان این دو عمل، بسته در مسیر ارسال A بهعنوان یک بسته IP معمولی که به مقصدی خصوصی نشانه رفته است مینشیند.
این دو پیامد دارد که گفتن صریحشان میارزد. A میتواند بر بسته درونی سیاست اعمال کند، در قالب مسیرها، قواعد پالایش و ثبت مبدأ و مقصد، و A باید دو مجموعه اعتبارنامه نگه دارد: یکی بهعنوان سرور برای مشتری و یکی بهعنوان مشتری B. حفاظت در هر لحظه هست، اما شیء حفاظتشده در A هویت عوض میکند.
از این برنمیآید که A متن آشکار برنامه را میخواند. هنگامی که مشتری و سرویس TLS اجرا میکنند و گواهی یکدیگر را بررسی میکنند، A جریان رکورد TLS میبیند نه درخواست خواندنی. تأیید اینکه آن حفاظت کجا پایان مییابد نیازمند نگاه به زنجیره گواهی سرویس است، نه به نمودار تونل.
تودرتو: A فقط لایه بیرونی را برمیدارد
در طرح تودرتو مشتری نخست تونل درونی به B میسازد و سپس آن تونل را درون تونل بیرونی به A میبرد. A سرآیند بیرونی را برمیدارد، تونل درونی مییابد و آن را بدون نگهداشتن کلیدهایش جلو میفرستد، پس حفاظت درونی همچنان در B پایان مییابد.
آنگاه پیوند بالاروی مشتری دو لایه حمل میکند، در حالی که مسیر میان A و B یک لایه. A نشانیهای بیرونی تونل درونی را میبیند، که برای دانستن وجود ترافیک و تقریباً جهت آن کافی است و برای خواندن محموله کافی نیست. این تمام تفاوت با حالت سریالی است، و هیچ شمارنده پرشی آن را نشان نمیدهد. آنچه A هنوز میتواند بکند رد کردن فرستادن چیزی است که نمیتواند بخواند، و این همیشه برای اپراتور آن دروازه در دسترس است.
تودرتوسازی بهای این ویژگی را میگیرد. هر لایه سرآیند اضافه میکند، پس برنامهریزی MTU و MSS اجباری میشود نه فقط مرتب، و مسیری که با یک لایه کار میکند میتواند با دو لایه بستههای بزرگ را بیصدا بیندازد. هر لایه رفتار بازاتصال و زندهنگهداشتن خود را هم لازم دارد، و شکست در یک لایه از میان دیگری مانند قطعی جزئی دیده میشود.
ناظران را بکشید، نه فقط تونلها را
تونلها بخش آسان نقاشی هستند. ناظران همان چیزی هستند که طرح درباره آن است، پس برای هر نقطه دید یک ردیف بنویسید و پر کنید که هر کدام واقعاً چه میتواند بخواند.
| Vantage point | Serial chain | Nested chain |
|---|---|---|
| Client's access network | Outer tunnel only | Outer tunnel only |
| Operator of A | Inner IP packet between A and B | Outer addresses of the inner tunnel, not its payload |
| Path between A and B | Second tunnel | Second tunnel |
| Operator of B | Inner packet re-originated by A | Payload after the inner layer is removed |
| Service edge | Traffic from the exit address | Traffic from the exit address |
دو ردیف پیوسته با هم اشتباه میشوند: اپراتور A و فراهمکننده تونل مشتری. آنها میتوانند یک نهاد باشند، و نامهای جداگانه دروازه آنها را مستقل نمیکند. مالکیت مستقل کنترل اداری جدا، اعتبارنامه جدا و ثبت جدا میخواهد.
فراداده در هر دو طرح زنده میماند. زمانبندی، اندازه بستهها و شمار اتصالها در هر پرش قابل مشاهده میمانند، پس دو پرش هزینه همبستگی را بالا میبرد نه اینکه سیگنال را بردارد. طرحی که ناپیدایی وعده میدهد باید پیش از تکیه کسی بر آن با این فهرست سنجیده شود.
پیش از انتخاب، مسیرهای شکست را بپیمایید
از سمت مشتری عمداً چیزها را بشکنید، به همان ترتیبی که کاربر با آنها روبهرو میشود. با رابط و MTU آن آغاز کنید، چون تودرتوسازی در اندازه بسته بسیار پیشتر از احراز هویت شکست میخورد.
ip -4 addr show dev tun0
ip link show dev tun0 | grep mtu
ping -M do -s 1380 -c 2 10.77.1.1
سپس نقاط پایانی حفاظت را تأیید کنید نه اینکه فرضشان بگیرید. از سرویس گواهیاش را از درون هر تونلی که باز است بخواهید، و زنجیرهای را که مشتری میبیند با زنجیرهای که سرویس واقعاً ارائه میدهد مقایسه کنید. دروازهای که دوباره امضا یا شنود میکند آن گواهی را تغییر میدهد، و بررسی با یک فرمان آشکار میشود.
openssl s_client -connect intranet.example.com:443 -brief < /dev/null
با ماتریس بازاتصال تمام کنید: تونل مشتری میافتد، تونل B میافتد، مسیر میان A و B تغییر میکند. بنویسید چه بازمیگردد و چه نه، و آیا اتصال درونی هرگز به مسیری بیرون از حامل موردنظرش میافتد. نشانیهایی را که هر آزمون به کار برده ثبت کنید، چون تکرار آن در شبکه دسترسی دیگر به پرسش دیگری پاسخ میدهد. آزمون MTU را هم پس از هر بازاتصال تکرار کنید، چون مسیر تغییرکرده میتواند اندازه قابل استفاده را پایین بیاورد بیآنکه یک خط پیکربندی تکان بخورد.
سریالی را برگزینید هنگامی که A باید بر بسته درونی سیاست اعمال کند، یا هنگامی که مشتری نمیتواند دو تونل رویهمافتاده اجرا کند. تودرتو را برگزینید هنگامی که محموله درونی باید در A ناخواندنی بماند. انتخاب را با ناظران و شمارههای MTU آن بنویسید، و نفر بعد لازم نیست تمام تصویر را دوباره بکشد تا به یک پرسش پاسخ دهد.