Луковая маршрутизация используется в Tor для разделения информации о том, кто отправляет трафик и куда он направляется. На основе этой технологии работают и onion-сервисы, где обе стороны соединения взаимодействуют внутри сети Tor.
Для работы Tor нужны сетевые узлы и совместимое клиентское ПО. Значительную часть relays поддерживают независимые операторы и организации. Узлы отличаются скоростью, доступностью и пропускной способностью, поэтому сеть строит маршруты с учётом их параметров.
Технический смысл onion routing
Клиент заранее формирует цепочку из нескольких узлов. Для каждого участка используются отдельные криптографические ключи, а данные оборачиваются несколькими слоями. По мере прохождения цепочки каждый relay снимает или обрабатывает только предназначенный ему слой и передаёт пакет дальше.
Это отличается от обычного веб-прокси. Прокси действительно является посредником между клиентом и сервером, но один прокси обычно знает и адрес клиента, и направление запроса. В onion routing знание о маршруте распределяется между несколькими узлами.
Упрощённо это можно представить как последовательность пересадок: первый узел знает, откуда пришло соединение, но не обязан знать конечный сайт; промежуточный видит соседние участки; последний relay при выходе в открытый интернет знает назначение, но не исходный IP пользователя. Для onion-сервисов схема отличается тем, что соединение не выходит в обычный веб.
Маршруты не являются постоянными навсегда: Tor периодически строит новые цепочки. Это помогает не привязывать всю активность пользователя к одному набору промежуточных узлов.
За счёт такой архитектуры Tor меняет модель доверия: вместо одного посредника, которому известно всё соединение, информация распределяется между несколькими независимыми участниками. Это не отменяет всех рисков анализа трафика, но объясняет базовую идею, на которой построена сеть.