Как запустить Tor-релей на VPS: пошаговое руководство
Узнайте, как настроить guard или middle релей на Linux VPS. В статье разобраны лимиты трафика в torrc, мониторинг через nyx и причины долгого вхождения релея в консенсус сети.
Что делает Tor-релей на VPS
Tor-релей — это демон Tor на машине с публичным IP-адресом, который пересылает зашифрованный трафик других пользователей. Directory authorities публикуют информацию о нем, а Tor-клиенты строят через него цепочки соединений. Guard- или middle-релей передает трафик только другому релею, поэтому он никогда не устанавливает соединение с веб-сайтом от имени постороннего лица. Именно этот факт объясняет отсутствие жалоб на злоупотребления и делает запуск релея подходящим вкладом для обычного VPS.
Объем работы невелик: один пакет, пятнадцать строк конфигурации, одно правило firewall, один перезапуск. Остальная часть этого руководства посвящена моментам, в которых часто возникают ошибки. Это расчет пропускной способности на тарифах с лимитированным трафиком, а также причина, по которой совершенно исправный новый релей может выглядеть неактивным в течение недели.
Guard, middle, bridge или exit: выбор перед установкой
Один демон выполняет все четыре роли. Ваша конфигурация вместе с directory authorities определяет, какую именно роль вы будете исполнять.
- Middle relay. Принимает трафик от guard и передаёт его другому реле. Никогда не обращается к целевому сайту напрямую. Каждое новое реле начинает работу в этой роли.
- Guard relay. Та же конфигурация, но с дополнительным флагом. Directory authorities присваивают флаг Guard реле, которые достаточно долго работали быстро и стабильно. Вы не выбираете эту роль. Вы её заслуживаете, а приведенная ниже конфигурация помогает этого добиться.
- Bridge. Реле, которое намеренно скрыто из публичного каталога и предоставляется пользователям в частном порядке там, где Tor заблокирован. Это наименьшая нагрузка из всех четырёх ролей: низкая пропускная способность, отсутствие в публичных списках и подходящий первый шаг, если ваши ресурсы ограничены.
- Exit relay. Последний узел, который открывает соединение с целевым сайтом. Каждый запрос пользователя исходит с вашего IP-адреса, поэтому жалобы на злоупотребления и запросы правоохранительных органов приходят владельцу этого адреса.
Роль exit не подходит для VPS общего назначения. Запускайте exit только у провайдера, который заранее согласился на такой трафик, предоставил выделенный IP-адрес и опубликовал контакт для жалоб. Большинство стандартных условий хостинга запрещают это, и игнорирование правил обычно приводит к блокировке сервера и потере IP-адреса. Guard или middle relay передают тот же пользовательский трафик без подобных рисков.
Всё, что описано ниже, относится к настройке guard/middle relay. ExitRelay 0 — это строка, которая ограничивает работу реле именно этими ролями.
Что необходимо для VPS перед началом работы
The Tor Project публикует строгие требования к реле. По состоянию на август 2026 года они таковы: один публичный IPv4-адрес для реле, пропускная способность не менее 10 Мбит/с в каждом направлении (рекомендуется 16 Мбит/с), не менее 100 ГБ исходящего трафика в месяц и 512 МБ оперативной памяти при скорости ниже 40 Мбит/с или 1 ГБ при более высокой скорости. Фиксированных требований к аптайму нет, но реле, работающее менее двух часов в сутки, приносит сети мало пользы.
Значение 10 Мбит/с описывает возможности канала, а не настройки. Вам нужен порт, способный обеспечить такую скорость. Какую часть этого канала разрешить использовать реле — отдельное решение, которое принимается с учетом месячного лимита трафика. Изучите свой тарифный план, прежде чем приступать к настройке. Если вы еще выбираете сервер, сколько на самом деле стоит VPS в месяц описывает, как продаются лимиты трафика, а измерение реальной пропускной способности сети VPS показывает, как узнать возможности канала с помощью iperf3, не полагаясь на рекламные страницы.
Сначала защитите машину. Реле — это публичный сервис на публичном адресе, и этот адрес начинают сканировать через несколько минут после публикации. Ограничение доступа по SSH с помощью ключей и усиление конфигурации sshd занимает десять минут и должно быть выполнено до запуска реле, а не после.
Установка Tor из репозитория Tor Project
Используйте собственный apt-репозиторий Tor Project, а не пакет из дистрибутива. Код ретрансляторов обновляется быстрее, чем стабильные релизы, поэтому исправления попадают в этот репозиторий первыми, в то время как пакеты дистрибутива отстают между релизами.
sudo apt update
sudo apt install -y apt-transport-https gnupg wgetДобавьте ключ подписи, а затем репозиторий. Кодовое имя считывается с машины, поэтому один и тот же блок работает как в Ubuntu 24.04 (noble), так и в Debian 13 (trixie).
wget -qO- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc \
| gpg --dearmor \
| sudo tee /usr/share/keyrings/deb.torproject.org-keyring.gpg >/dev/null
CODENAME=$(. /etc/os-release && echo "$VERSION_CODENAME")
echo "$CODENAME"
sudo tee /etc/apt/sources.list.d/tor.sources >/dev/null <<EOF
Types: deb deb-src
URIs: https://deb.torproject.org/torproject.org/
Suites: $CODENAME
Components: main
Signed-By: /usr/share/keyrings/deb.torproject.org-keyring.gpg
EOF
sudo apt update
sudo apt install -y tor deb.torproject.org-keyring
tor --versiontor --version выводит версию, которую вы только что установили. Если apt update выдал ошибку NO_PUBKEY, значит, ключ в формате dearmor отсутствует по пути, указанному в строке Signed-By:, и у apt нет ключа для проверки файла релиза. Пакет deb.torproject.org-keyring важен для дальнейшей работы: он поставляет ключ подписи как обычный пакет, поэтому apt продолжит работу при смене ключа.
Включите автоматические обновления, а затем добавьте в них новый источник.
sudo apt install -y unattended-upgrades apt-listchangesВ Ubuntu добавьте источник Tor в блок Allowed-Origins в файле /etc/apt/apt.conf.d/50unattended-upgrades:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
"TorProject:${distro_codename}";
};В Debian этот же файл использует Origins-Pattern, где нужно добавить строку "origin=TorProject";. Проверьте результат с помощью sudo unattended-upgrade --debug --dry-run, которая выводит источники, с которыми будет работать система, и не вносит никаких изменений.
Файл torrc, который имеет значение
Пакет устанавливает длинный, снабженный подробными комментариями /etc/tor/torrc. Для реле важны лишь несколько строк. Добавьте их в конец файла.
Nickname mynicerelay
ContactInfo relay-ops[at]example.com
ORPort 9001
ExitRelay 0
SocksPort 0Nickname — это имя длиной от 1 до 19 символов, состоящее только из букв и цифр. Оно не является уникальным в сети и не служит вашим идентификатором; идентификатором является отпечаток (fingerprint). Это имя поможет вам найти свой реле в строке поиска, поэтому выберите то, что легко продиктовать по телефону.
ContactInfo публикуется в дескрипторе реле — публичном документе, который может скачать любой желающий, поэтому адрес будет собран парсерами. Используйте адрес, который вы будете проверять и через два года, и при необходимости скройте его. Это единственный канал, через который Tor Project может предупредить вас о проблеме с вашим реле.
ORPort 9001 — это порт, к которому подключаются другие реле и клиенты. Стандартным считается 9001. Порт 443 — другой распространенный выбор, так как некоторые ограничивающие сети разрешают только исходящий трафик через 443, поэтому реле, работающее на этом порту, доступно большему числу клиентов. Выбирайте 443, только если он не занят другими сервисами на сервере.
SocksPort 0 отключает локальный SOCKS-прокси, который не используется реле, и удаляет один слушающий сокет на машине. ExitRelay 0 фиксирует это намерение в файле: данное реле никогда не будет подключаться к целевым узлам от имени пользователя, и любому, кто будет читать конфигурацию позже, не придется выяснять это по настройкам по умолчанию.
Если VPS имеет IPv6-адрес, добавьте вторую строку ORPort. Tor не может привязываться к «любому» IPv6-адресу так же, как к IPv4, поэтому укажите адрес в квадратных скобках.
ORPort 9001
ORPort [2001:db8::1]:9001На VPS с 1 ГБ оперативной памяти добавьте MaxMemInQueues 512 MB. Tor определяет лимит очереди на основе объема памяти, доступного системе, что на небольшом виртуальном сервере может привести к чрезмерному потреблению ресурсов. Установка лимита вручную заставляет Tor отбрасывать очереди пакетов при высокой нагрузке, что позволяет реле продолжить работу, вместо того чтобы разрастаться до тех пор, пока ядро не завершит процесс принудительно.
Открытие ORPort в межсетевом экране
Входящий трафик на ORPort должен быть доступен из любой точки интернета. Исходящий трафик для реле должен быть разрешен полностью: он устанавливает соединения с тысячами других реле по множеству различных портов, и список разрешенных исходящих соединений (allowlist) приведет к некорректной работе узла.
sudo ufw allow 9001/tcp comment 'tor ORPort'
sudo ufw status verboseЗатем проверьте сетевой экран на стороне провайдера. Многие панели управления используют фильтр пакетов перед виртуальной машиной, поэтому правила, добавленные через ufw, там не действуют: порт будет выглядеть открытым на самой машине, но закрытым снаружи. Если вы не знакомы с ufw, в статье правила ufw, которые должны быть на каждом VPS описаны политика по умолчанию и порядок обработки правил.
Расчет пропускной способности согласно вашему тарифу
В руководстве RelayBandwidthRate описывается как отдельный маркерный корзинный алгоритм (token bucket), который ограничивает «среднюю входящую пропускную способность для ретранслируемого трафика на этом узле до указанного количества байт в секунду, а среднюю исходящую пропускную способность — до того же значения». Прочитайте это дважды. Ограничение применяется к каждому направлению отдельно. Ретранслятор, настроенный на 1 Mbit/s, может передавать 1 Mbit/s входящего и 1 Mbit/s исходящего трафика одновременно, а провайдер, учитывающий оба направления, выставит счет за их сумму.
The data behind this chart
[
{
"label": "1 Mbit/s",
"torrc_rate": "125 KBytes",
"gb_per_day": 21.6,
"gb_per_month": "648"
},
{
"label": "2 Mbit/s",
"torrc_rate": "250 KBytes",
"gb_per_day": 43.2,
"gb_per_month": "1,296"
},
{
"label": "5 Mbit/s",
"torrc_rate": "625 KBytes",
"gb_per_day": 108,
"gb_per_month": "3,240"
},
{
"label": "10 Mbit/s",
"torrc_rate": "1250 KBytes",
"gb_per_day": 216,
"gb_per_month": "6,480"
},
{
"label": "20 Mbit/s",
"torrc_rate": "2500 KBytes",
"gb_per_day": 432,
"gb_per_month": "12,960"
}
]Эти 5 строк являются арифметическим расчетом, а не измерением: они показывают стоимость скорости, если ретранслятор поддерживает её в течение полных 30 дней в обоих направлениях. Реальный ретранслятор большую часть времени работает ниже своего лимита, особенно в первые недели. Используйте таблицу, чтобы исключить настройки, которые не вписываются в бюджет, а не для прогнозирования счета с точностью до гигабайта.
При скорости 1 Mbit/s в каждом направлении ретранслятор передает около 21.6 GB в день, поэтому за 30-дневный месяц расходуется примерно 648 GB учитываемого трафика. Это укладывается в лимит 1 TB с запасом для обновлений и резервных копий. При переходе на 2 Mbit/s месячный расход составит 1,296 GB, что уже превышает план в 1 TB. Последняя строка, 20 Mbit/s, требует 12,960 GB в месяц и предназначена для портов с безлимитным трафиком. Если ваш провайдер тарифицирует только исходящий трафик, разделите каждое значение пополам. Выясните, какой тип тарификации у вас, прежде чем устанавливать скорость, так как ответы отличаются в два раза.
Теперь перейдем к конфигурации. Сначала ограничение скорости, затем квота.
RelayBandwidthRate 125 KBytes
RelayBandwidthBurst 250 KBytes
AccountingMax 400 GBytes
AccountingRule sum
AccountingStart month 1 00:00RelayBandwidthBurst — это размер маркерной корзины, который позволяет кратковременные всплески выше установленной скорости при сохранении среднего значения. Значение, примерно в два раза превышающее скорость, является разумным.
AccountingRule — это параметр, который упускают большинство операторов. Значение по умолчанию — max, которое сравнивает с квотой большее из двух направлений. При настройках по умолчанию AccountingMax 400 GBytes разрешает 400 GB входящего и 400 GB исходящего трафика, что составляет 800 GB на счетчике, учитывающем оба направления. AccountingRule sum учитывает сумму чтения и записи против одной квоты, что соответствует тому, как на самом деле измеряется лимит передачи данных.
Также укажите AccountingStart, никогда не используйте AccountingMax отдельно. Квота — это число, а строка начала периода — это время, когда она сбрасывается. Квота без указания периода приведет к тому, что ретранслятор уйдет в спящий режим без возможности автоматического возобновления работы.
Спящий режим — это грубый инструмент. Когда квота исчерпывается, tor записывает это в логи и перестает принимать задачи:
Bandwidth soft limit reached; commencing hibernation. No new connections will be acceptedРетранслятор также не просыпается в точное время начала следующего периода. Tor отслеживает, как быстро была израсходована предыдущая квота, и выбирает случайную точку внутри нового интервала, чтобы тысячи ретрансляторов не возвращались в сеть в одну и ту же секунду. Ретранслятор, который исчезает на последнюю неделю каждого месяца, теряет стабильность, по которой его оценивают directory authorities. Установите RelayBandwidthRate так, чтобы лимит никогда не достигался, а AccountingMax оставьте как крайнюю меру для защиты от лишних расходов.
Запуск реле и проверка доступности
sudo systemctl restart tor@default
sudo systemctl status tor@default
sudo journalctl -u tor@default -n 50В течение нескольких минут в логе должна появиться следующая строка:
Self-testing indicates your ORPort is reachable from the outside. Excellent. Publishing server descriptor.Эта фраза означает, что другие реле подключились к вашему ORPort и построили через него цепочку. Пока эта строка не появится, ваше реле не включено в каталог и не передает никакой трафик. Ошибка выглядит следующим образом:
Your server has not managed to confirm reachability for its ORPort(s) at 203.0.113.10:9001. Relays do not publish descriptors until their ORPort and DirPort are reachable. Please check your firewalls, ports, address, /etc/hosts file, etc.Разбирайтесь с ней последовательно. Открыт ли ORPort в ufw? Открыт ли он также во внешнем сетевом файрволе провайдера? Является ли адрес в этом сообщении адресом, по которому интернет действительно маршрутизирует трафик к вам, а не частным адресом из конфигурации NAT? Протестируйте порт с другой машины с помощью nc -vz 203.0.113.10 9001. Tor самостоятельно повторяет проверку, поэтому исправленный файрвол будет замечен без вашего участия, а перезапуск ускорит этот процесс.
Постоянным идентификатором вашего реле является его отпечаток (fingerprint):
sudo cat /var/lib/tor/fingerprintПримерно через три часа после публикации дескриптора реле появится в Relay Search. Выполните поиск по псевдониму или вставьте отпечаток. Эта страница показывает, как сеть воспринимает ваше реле: какие флаги оно имеет, какой вес ему присваивают узлы-авторитеты и какую версию оно публикует.
Почему новый Tor-релей почти не получает трафика?
Потому что сеть еще не оценила его пропускную способность, а на измерения уходят недели. The Tor Project описывает процесс постепенного наращивания нагрузки в четыре этапа, но операторы, которые не ознакомились с этой информацией, часто решают, что релей неисправен, и начинают менять настройки.
В течение первых трех дней релей считается неизмеренным. Он сообщает результаты собственных тестов, но directory authorities в любом случае ограничивают его опубликованный вес значением 20 KB, поэтому клиенты почти никогда его не выбирают. Примерно с третьего по восьмой день bandwidth authorities проводят реальные измерения, и вес релея растет, но он используется только как промежуточный узел (middle hop), так как ни один клиент не готов сделать новый релей своим первым узлом (guard).
Примерно на восьмой день релей получает право на флаг Guard. Получение этого флага приводит к падению трафика, что многих удивляет: клиенты пропускают guard-узлы при выборе промежуточных узлов, полагая, что guard-узел и так занят, поэтому релей теряет промежуточный трафик быстрее, чем получает трафик в качестве guard-узла. Нагрузка восстанавливается только по мере того, как клиенты обновляют свои списки guard-узлов, на что уходят недели. Примерно к 68 дню достигается стабильное состояние, при котором количество клиентов, исключающих релей из списка, уравновешивается количеством клиентов, добавляющих его.
Таким образом, объективно стоит ожидать отсутствия трафика в течение трех дней, появления некоторой нагрузки через неделю и полноценной работы через два месяца. Измените одну настройку и подождите неделю, чтобы увидеть результат. Собственная страница статуса Uptime Kuma с TCP-проверкой порта 9001 — более полезное применение для нервной энергии: она отвечает на вопрос, который вы действительно можете контролировать, а именно — продолжает ли порт отвечать на запросы.
Мониторинг реле через nyx
nyx — это терминальный монитор для работающего реле. Он взаимодействует с control port в Tor, поэтому сначала включите его в torrc:
ControlPort 9051
CookieAuthentication 1
CookieAuthFileGroupReadable 1ControlPort прослушивает только 127.0.0.1, а cookie authentication означает, что программа должна прочитать секретный файл, прежде чем сможет отправлять команды. Tor записывает этот файл cookie в /run/tor/control.authcookie от имени пользователя debian-tor с правами доступа 600, чтобы никто другой не мог его прочитать. CookieAuthFileGroupReadable 1 открывает доступ к файлу для группы, что позволяет вашей учетной записи запускать nyx без sudo.
sudo apt install -y nyx
sudo adduser "$USER" debian-tor
sudo systemctl restart tor@defaultВыйдите из системы и войдите снова, затем запустите nyx. Новая группа должна быть применена при входе в систему, поэтому запуск nyx в той же сессии оболочки приведет к ошибке доступа к файлу cookie, даже если конфигурация верна. nyx отображает текущую пропускную способность, время работы, поток логов и список соединений. В первые недели основной показатель, за которым стоит следить — это график пропускной способности, чтобы он оставался в пределах вашего RelayBandwidthRate.
Запуск нескольких ретрансляторов: MyFamily и ключи семейства
Если у вас только один ретранслятор, пропустите этот раздел. Если вы управляете двумя или более ретрансляторами, необходимо указать их взаимосвязь. Это предотвратит построение клиентами цепочек, которые входят и выходят через ваши узлы, что позволило бы одному оператору видеть оба конца соединения.
Традиционный способ — использование MyFamily в файле torrc каждого ретранслятора с перечислением отпечатков (fingerprints) всех остальных узлов:
MyFamily AAAAAAAAAA,BBBBBBBBКаждый ретранслятор должен содержать список всех остальных, поэтому добавление четвертого узла требует редактирования четырех файлов. В Tor 0.4.9 этот механизм был заменен ключом семейства. Сгенерируйте один ключ и распространите его:
tor --keygen-family myfamilyЭта команда создает файл myfamily.secret_family_key и выводит строку FamilyId. Скопируйте файл ключа на каждый ретранслятор в подкаталог keys внутри DataDirectory (/var/lib/tor/keys в Debian и Ubuntu), сохранив суффикс .secret_family_key. Добавьте выведенную строку FamilyId в каждый файл torrc и выполните перезагрузку с помощью sudo systemctl reload tor@default. Пока оставьте список MyFamily на месте. Клиенты, которые еще не поддерживают сертификаты семейств, продолжают использовать старый список. Tor Project объявит, когда его можно будет удалить.
Что может выйти из строя в процессе работы
Версия устаревает. Автоматические обновления заменяют пакет, но запущенный процесс продолжает использовать старый бинарный файл до тех пор, пока его не перезапустят. Сравните tor --version на сервере с версией, указанной на странице Relay Search. Если они различаются, сеть всё ещё видит старую версию, поэтому перезапустите службу.
Системное время расходится. Документы консенсуса и сертификаты ограничены по времени, поэтому сервер с неверным временем отклоняет консенсус и прекращает публикацию данных. timedatectl должен показывать, что системные часы синхронизированы. Если это не так, включите systemd-timesyncd или установите chrony.
Меняется IP-адрес. Дескриптор содержит адрес, и клиенты не могут подключиться к серверу, если он сменил местоположение. После любой миграции к другому провайдеру или смены адреса перезапустите tor и дождитесь появления строки с результатами самопроверки.
Скорость реле ниже ожидаемой. Криптография реле Tor эффективно работает на современных процессорах; по оценкам Tor Project, процессор с поддержкой AES-NI обеспечивает пропускную способность примерно от 400 до 450 Мбит/с в каждом направлении. Ограничения по скорости порта и лимиты трафика достигаются значительно раньше, чем предел производительности процессора, поэтому раздел учета трафика выше важнее, чем аппаратные характеристики.
FAQ
Сколько трафика потребляет Tor-реле?
Ровно столько, сколько вы разрешите, и не более. RelayBandwidthRate ограничивает ретранслируемый трафик для каждого направления отдельно, поэтому реле с лимитом 1 Mbit/s может одновременно передавать 1 Mbit/s на вход и 1 Mbit/s на выход. Это составляет примерно 21.6 ГБ в сутки или 648 ГБ за 30-дневный месяц с учетом обоих направлений. Добавьте AccountingMax с AccountingRule sum в качестве жесткой месячной квоты поверх этой скорости.
Будут ли приходить жалобы на злоупотребления при запуске Tor-реле?
Guard- или middle-реле передает трафик только другим реле Tor и никогда не подключается к веб-сайтам от имени пользователя, поэтому жалобы на действия через Tor направляются оператору exit-реле, а не вам. Вы можете столкнуться со сканированием портов и попаданием в списки репутации IP-адресов, так как адрес публично указан как реле. Именно exit-реле получают письма с жалобами и юридические уведомления, поэтому для них требуется провайдер, заранее согласный на такую работу. Ознакомьтесь с условиями вашего провайдера перед запуском любого типа реле.
Почему мое новое Tor-реле не получает трафик?
Потому что новые реле намеренно ограничиваются в трафике до момента их измерения. В течение первых трех дней директории (directory authorities) ограничивают опубликованный вес на уровне 20 KB, поэтому клиенты почти никогда не выбирают такое реле. Примерно с третьего дня системы измерения пропускной способности (bandwidth authorities) начинают замеры, около восьмого дня реле получает флаг Guard, после чего объем трафика может временно снизиться, так как клиенты избегают использовать Guard-узлы в качестве промежуточных звеньев. Полная нагрузка достигается примерно через 68 дней. Убедитесь, что в логах есть запись "Self-testing indicates your ORPort is reachable from the outside", и оставьте реле в покое.
Можно ли запустить Tor-реле на VPS с лимитом трафика 1 TB?
Да, при скорости около 1 Mbit/s в каждом направлении, что составляет RelayBandwidthRate 125 KBytes. Это примерно 648 ГБ в месяц, если провайдер учитывает оба направления, оставляя запас для обновлений и резервных копий. Добавьте AccountingMax 400 GBytes с AccountingRule sum и AccountingStart month 1 00:00, чтобы реле переходило в режим гибернации вместо превышения лимита плана. Если провайдер тарифицирует только исходящий трафик, вы можете удвоить скорость.
Нужно ли настраивать MyFamily, если у меня только одно реле?
Нет. Объявление семейства (family) нужно для того, чтобы клиенты не строили цепочку через два реле одного оператора, что бессмысленно при наличии одного узла. Настройте это сразу после добавления второго реле: укажите отпечаток (fingerprint) каждого реле в строке MyFamily каждого из них или используйте ключ семейства, представленный в Tor 0.4.9, который позволяет распространять один FamilyId вместо постоянно растущего списка.