Тунель купує топологію, а не шифрування чи затримку
Тунель дає логічний шлях і, можливо, окремий контекст пересилання. Він сам не шифрує і не обіцяє затримку.
Припущення полягає в тому, що тунель — це приватний швидкий провід: ви його будуєте, і трафік усередині шифрується, шлях коротший, а канал поводиться як кабель між двома майданчиками. Кожна частина цього припущення — окрема властивість, і тунель дає лише перше, про що його попросили, а саме логічний шлях. Усе інше треба вибирати й налаштовувати навмисно. Змішування властивостей — це те, як проєкт зрештою отримує зашифрований канал, який ніхто не може діагностувати, і обіцянку затримки, яку ніхто не може виконати.
Міф: один тунель, три гарантії
Тунель надійно робить одну річ. Він змушує дві кінцеві точки, не з'єднані напряму, поводитися як сусідні для якоїсь мети, поки проміжна мережа передає зовнішні пакети. Це зміна топології, і сама по собі вона справді корисна.
Шифрування, перенесення протоколів і ізоляція пересилання — це окремі рішення, накладені зверху. У тунелю GRE немає жодного з трьох у криптографічному сенсі, а тунель IP-in-IP — це слушний проєкт зовсім без конфіденційності. Ні те ні інше не є помилкою; це тунелі, що роблять саме те, що роблять тунелі. Позначка на схемі не каже, які властивості присутні.
Щойно ви розділяєте властивості, питання стають відповідальними: чи несе цей тунель сусідство маршрутизації, чи несе кадри, чи приховує внутрішні адреси, чи обіцяє щось щодо затримки? Це чотири різні відповіді з чотирма різними наслідками для налаштування.
Що тунель насправді додає до карти
Кінцеві точки отримують шлях, якого раніше не мали. Чи поводиться цей шлях як маршрутизований хоп, чи як сегмент Ethernet, цілком залежить від інкапсуляції, і різниця змінює те, що два майданчики можуть із ним робити. Маршрутизований тунель дає наступний хоп і префікс; розширення Ethernet дає широкомовну поведінку й значно більший домен відмови.
Тунель IP не робить віддалений майданчик автоматично частиною тієї самої підмережі й не змушує протокол маршрутизації працювати через нього, якщо реалізація не підтримує це сусідство. Multicast — ще одне окреме питання зі своєю відповіддю.
ip -d link show type gre ip route get 10.20.0.5 traceroute -n -T -p 443 10.20.0.5 mtr -n --report -c 20 10.20.0.5
Ці команди відповідають на різні частини питання. Перша каже, який тип інтерфейсу існує, друга — який шлях обрало б ядро, а останні дві показують фактичну поведінку нижнього рівня, а не обіцянку позначки.
Перенесення — окреме рішення від доступності
Тунель може переносити протокол, який нижній рівень не пересилає. IPv6 поверх шляху IPv4 — класичний випадок, і він працює, бо кінцеві точки розуміють обидві родини, а маршрутизаторам між ними треба лише доставити зовнішні пакети. Нижньому рівню потрібен робочий шлях до кінця тунелю і нічого більше.
Однак кінцевим точкам потрібна повна підтримка: пересилання, адреси й застосунок, який справді використовує внутрішню родину. Призначення префікса IPv6 тунелю не робить сервіс, що працює лише з IPv4, доступним через IPv6 і не робить нижній рівень двостековим.
Перенесення кадрів — більше зобов'язання, ніж перенесення протоколів. Розширення широкомовного домену через тунель переносить разом із ним поведінку остовного дерева, ARP і поширення відмов, а це проєктне рішення, а не перемикач функції.
Ізоляція — це не конфіденційність
Провайдерські VPN тримають маршрути й трафік клієнтів в окремих контекстах пересилання, і це розділення реальне та цінне. Це не шифрування. Специфікація BGP/MPLS VPN прямо каже, що конфіденційність походить із моделі пересилання, а не з криптографії, і саме ця відмінність губиться на слайді, який просто каже VPN.
Якщо вам потрібна конфіденційність, вам потрібен криптографічний механізм з автентифікацією та керуванням ключами, і ви маєте знати, де він закінчується. Тунель, що забезпечує розділення, і тунель, що забезпечує шифрування, можуть бути тим самим тунелем, але лише коли хтось налаштував обидва.
Практичний наслідок у тому, що «це у VPN» відповідає на питання про контекст маршрутизації й нічого не каже про те, хто може читати байти на шляху. Дві команди можуть обидві мати рацію й при цьому описувати різні речі. Коли постає питання безпеки, питайте де закінчується криптографія і що автентифікує партнерів, а не чи існує тунель.
Затримка й QoS ідуть за нижнім рівнем
Логічний край — це не коротший фізичний шлях. Зовнішні пакети все ще проходять тими самими каналами, чергами й провайдерами, а інкапсуляція додає витрати на пакет плюс обробку на обох кінцях. Тунель може бути швидким тому, що нижній рівень добрий, ніколи тому, що це тунель.
Обробка якості обслуговування гірша, бо залежить від адміністративних доменів, якими ви можете не керувати. Внутрішні позначки треба навмисно відображати на зовнішні, і кожен провайдер на шляху має пропонувати очікувану вами обробку. Шифрування не створює пріоритету; воно приховує поле, яке проміжний пристрій міг використати для класифікації потоку.
Виміряйте нижній рівень, перш ніж щось обіцяти. Звіт, що показує стабільну затримку й відсутність втрат на зовнішньому шляху, — це доказ; схема з тунелем на ній — ні.
Виберіть тунель для потрібного мережевого відношення, потім окремо вкажіть шифрування, політику доступу, розмір пакета й продуктивність. Чотири рішення, чотири докази й жодної позначки, яка заміняла б будь-яке з них.