Две 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 и следващият човек няма да трябва да пречертава цялата картина, за да отговори на един въпрос.