В современных реалиях иногда бывает так, что кто-то очень хочет, чтобы вы не попали на какой-то ресурс. Кто именно и что это за ресурс — для этой статьи неважно: механика везде одна.
Сначала блокируют по-простому: адрес сайта вносят в чёрный список, ответ DNS подменяют. От этого спасает любой VPN или прокси — трафик уходит на чужой сервер за пределами блокировки, и тот сам ходит на нужный сайт. На следующем шаге этот кто-то ставит DPI, и обычные средства перестают помогать: VPN не подключается, прокси рвётся через секунду после начала. DPI не нужно знать, что внутри туннеля, — он узнаёт сам туннель по виду трафика и обрывает его, как бы надёжно туннель ни был зашифрован.
Что такое DPI и на что он смотрит, разберём ниже по порядку. А сама статья — о связке, сделанной против этого: Xray с протоколом VLESS, потоком XTLS Vision и маскировкой REALITY. Со стороны такое соединение выглядит как обычный HTTPS к большому зарубежному сайту, и даже если проверяющий подключится к серверу сам, он увидит этот сайт с его настоящим сертификатом.
Двадцать две части подряд мы говорили «TLS» одной фразой: «шифрование поверх TCP, на котором работает HTTPS». Пора разобрать его как протокол. IPsec защищал пакеты на сетевом уровне, и приложения о нём не знали; TLS, Transport Layer Security, делает обратное: он живёт внутри одного TCP-соединения (десятая часть), и приложение само решает им пользоваться. Зато ему не нужны ни шлюзы, ни туннели, ни права администратора: библиотека в браузере и библиотека на сервере — и всё. Поэтому именно TLS защищает подавляющую часть трафика в интернете: HTTPS, почту между серверами, DNS в DoT и DoH из двенадцатой части, OpenVPN из двадцатой.
Половина этой части — не о шифровании, а о доверии: откуда браузер знает, что разговаривает именно с www.example.com, а не с тем, кто встал посередине. Шифрование без этого бесполезно, и ответ на этот вопрос — сертификаты.
OSPF из прошлой части строит карту одной сети и считает по ней кратчайшие пути. Интернет — это семьдесят с лишним тысяч независимых сетей, у каждой свой владелец, свои деньги и свои интересы, и никто не согласится отдать соседу карту своей сети, а «кратчайший путь» там не критерий: провайдер повезёт трафик туда, где ему дешевле, а не ближе. Для этого нужен протокол другого рода — не про расстояния, а про политику. Это BGP, Border Gateway Protocol, версия 4, RFC 4271, 1994 год: единственный протокол маршрутизации между сетями, и единственный, на котором держится интернет целиком.
У меня в блоге уже есть серия о BGP на практике — там кластер Kubernetes анонсирует адреса роутеру. Здесь — сам протокол с нуля.
В шестой части таблица маршрутов роутера заполнялась тремя способами: подключённые сети появлялись сами, статические писал администратор, а динамические «приходили от протоколов маршрутизации, по которым роутеры рассказывают друг другу о своих сетях». Пора разобрать, как именно рассказывают. Внутри одной организации — офиса, кампуса, дата-центра, сети провайдера — это почти всегда OSPF, Open Shortest Path First, RFC 2328. Между организациями — BGP, и он в следующей части.
В девятнадцатой части мы разобрали IPsec и IKEv2 как протоколы: пакеты, обмены, ключи. Сегодня — что из них получается на машине пользователя, когда он нажимает «Подключиться», и чем это отличается от другого способа пустить трафик через чужой сервер — прокси. Слово «VPN» затёрто до неузнаваемости: им называют и туннель между офисами, и кнопку в браузере, и это разные вещи с разной механикой. Серия построена на уровнях, и именно уровни дают точный ответ: VPN работает на сетевом уровне, прокси — на транспортном или прикладном. Всё остальное из этого следует.
Всё, что мы разбирали до сих пор, ходило по сети открытым текстом: заголовки, данные, пароли в PAP из четвёртой части, запросы DNS. Защиту мы встречали только выше транспорта — TLS, протокол шифрования внутри TCP-соединения, на котором работает HTTPS: он защищает данные одного приложения, и только если приложение его использует. IPsec делает защиту на сетевом уровне: шифрует и подписывает IP-пакеты целиком, так что приложения о ней не знают, а защищённым оказывается всё — любой протокол, любой порт. На IPsec построены туннели между офисами, подключение сотрудников к корпоративной сети и, как увидим в следующей части, большинство «VPN» в настройках телефона.
IPsec — это два слоя. IPsec в узком смысле — формат защищённых пакетов и правила их обработки: что шифровать, каким ключом, как проверять. IKE — Internet Key Exchange, протокол, по которому две стороны договариваются об алгоритмах, проверяют друг друга и вырабатывают ключи для первого слоя. Разберём снизу вверх.
VLAN из прошлой части режет один коммутатор на много сетей. Но у него два ограничения, которые в дата-центре становятся стенами. Первое — номеров всего 4094, а облачный провайдер хочет изолированную сеть каждому клиенту, и клиентов у него сотни тысяч. Второе важнее: VLAN — это L2, и она заканчивается там, где начинается роутер. Виртуальная машина, переезжающая с сервера в одной стойке на сервер в другой, хочет сохранить IP-адрес и остаться в «своей» сети, а между стойками — маршрутизаторы. Растягивать L2 через весь дата-центр на VLAN и STP значит получить один огромный домен широковещания с одним деревом STP, и это не работает уже на нескольких сотнях коммутаторов.
VXLAN, Virtual eXtensible LAN, RFC 7348, решает обе задачи одним приёмом из первой части — протокол внутри протокола: кадр Ethernet заворачивается в UDP-датаграмму и едет через любую IP-сеть, как обычный пакет. Для хостов внутри это L2-сегмент, для сети снаружи — UDP-трафик между серверами.
Во второй части коммутатор делил домены коллизий, но не домен широковещания: ARP-запрос, DHCP DISCOVER и Router Advertisement получали все, кто воткнут в коммутатор. Один коммутатор — одна сеть, одна подсеть IP. В офисе с бухгалтерией, гостевым Wi-Fi, телефонами и серверами это означало бы по коммутатору и по кабелю на каждую сеть. VLAN, Virtual LAN, IEEE 802.1Q, решает задачу иначе: один коммутатор и один кабель несут несколько независимых сетей, которые друг друга не видят, как будто это разные коммутаторы. Это самая часто используемая технология сегментации, и, как обычно, нас интересует, что для этого добавили в кадр и что делает с ним коммутатор.
SLAAC из прошлой части даёт хосту адрес, шлюз и DNS без единого сервера, и для дома этого достаточно. Но у безсерверности есть цена: никто не знает, какой адрес у какого устройства, набор параметров ограничен, а роутер абонента должен откуда-то получить свой блок префиксов. Для этого в IPv6 есть DHCPv6, RFC 8415. Название обещает «тот же DHCP», но это другой протокол: у него свой формат, свои идентификаторы клиентов, свои режимы и, главное, он не заменяет Router Advertisement, а дополняет. Без RA из четырнадцатой части DHCPv6-клиент даже не начнёт работать.
Чтобы было с чем сравнивать, держите под рукой DHCPv4.
В четырнадцатой части роутер рассылал Router Advertisement, и в нём был префикс сегмента с флагом auto: «из этого префикса можно собрать себе адрес». Сегодня — о том, как хост это делает. Механизм называется SLAAC, Stateless Address Autoconfiguration, RFC 4862, и слово «stateless» в нём главное: никто не хранит, кому какой адрес выдан. Нет сервера, нет аренд, нет таблицы. Роутер говорит «префикс такой», хост сам придумывает вторую половину адреса, проверяет, что она свободна, и начинает работать. Для домашней сети и для телефонов это основной и часто единственный способ получить адрес IPv6.
Половину механизма мы уже знаем: RA и DAD из прошлой части. Осталось понять, откуда берётся вторая половина адреса и как адреса живут и умирают.