Представете си браузър, който зарежда HTTPS страница, докато SSH клиент достига до друг сървър и резолвер отговаря на заявка — всичко през една сесия на OpenVPN. На физическия интерфейс виждате един разговор; вътре в тунела виждате три. И двете гледни точки са верни и да знаете защо е разликата между полезен запис и объркващ такъв. Проследете един вътрешен поток от сокета до кабела и слоевостта престава да бъде абстрактна.

Един външен разговор, много вътрешни потоци

Всяко приложение отваря свой сокет и ядрото му дава кортеж от пет елемента: адрес на източника, порт на източника, адрес на местоназначението, порт на местоназначението и протокол. Тези кортежи съществуват преди да се появи какъвто и да е тунел. След това маршрутизацията решава, че всички те излизат през тунелното устройство, така че пакетът, предаден на OpenVPN, все още носи оригиналните заглавки вътре в себе си. OpenVPN криптира този вътрешен пакет и увива резултата в един външен разговор по UDP или TCP с партньора. Затова външният разговор е един, а потоците в него са толкова, колкото приложения са отворени.

Нищо не се срутва. Вътрешните кортежи оцеляват от край до край и точно затова далечната страна все още различава трите потока.

Портът, който остава непроменен

Непроменен остава външният кортеж: вашият адрес, локалният порт, който клиентът е заел, адресът на партньора и конфигурираният порт на услугата. Точно този кортеж трябва да пропусне защитна стена или NAT по пътя, и точно той ще покаже запис върху горното звено. Той е и този, който се променя след повторно свързване или смяна на мрежата, защото клиентът може да заеме друг локален порт. Един тунел не означава един фиксиран порт на източника завинаги.

Вътрешните портове са това, което е важно за крайните точки. Потокът HTTPS запазва порт на местоназначението 443 вътре в тунела, макар външният транспорт да стои на порта, който операторът е конфигурирал. Крайните точки на приложенията никога не научават за външния.

Какво променя декапсулацията в далечния край

При партньора външният слой се сваля и остава вътрешният пакет. Оттам препращането и политиката за достъп се прилагат към вътрешното местоназначение и протокол. Уеб сървърът все още получава HTTPS връзка, демонът SSH все още получава SSH, а резолверът все още получава заявка.

Затова правило, което разрешава външния транспорт, не е същото правило като разрешаването на вътрешна услуга. Първото описва път; второто описва оторизация.

Външен TCP означава един поток, а не една връзка

Когато външният транспорт е UDP, съдбата на всеки вътрешен поток е независима: загубена дейтаграма засяга един трансфер до собственото му повторно предаване. Когато външният транспорт е TCP, всички вътрешни потоци споделят един надежден байтов поток.

Този споделен поток е частта, която хората пропускат. Възстановяването се случва веднъж, за всичко, така че един загубен сегмент забавя трафика на всяко приложение, мултиплексирано вътре. Все още има много връзки в крайните точки и една връзка по кабела, а именно по кабела живее ефектът на блокиране на главата на опашката. Броят на слушащите портове не ви казва нищо за това, затова броенето на портове е лош начин да се разсъждава за производителността на тунела.

Опишете собствената си настройка точно

Назовавайте избрания вътрешен трафик и конкретния външен транспорт, който го носи, вместо да казвате, че машината изпраща всичко през един порт. Локалните услуги, вторият тунел и другото семейство адреси създават потоци, които така и не влизат в този разговор. Записът върху горното звено показва външния кортеж; записът вътре в тунела показва вътрешните.

Вземете и двата и поставете времевите марки една до друга. Ако трябва да докажете кое приложение е създало кой вътрешен поток, таблицата на сокетите на хоста е по-добрият инструмент, защото свързва портовете директно с процесите. След това запишете външния кортеж, който сте наблюдавали, и момента, в който сте го наблюдавали, защото следващият запис след повторно свързване може съвсем законно да покаже различни числа.

Подобни статии