Владельцам узлов

  • Не используйте пакеты из репозиториев Ubuntu. Они не всегда корректно обновляются. С ними вы будете пропускать важные обновления, обеспечивающие стабильность и защиту.
  • Определите версию Ubuntu с помощью такой команды:
     ‪$ lsb_release -c
    
  • Работая с правами суперпользователя, добавьте следующие строки в файл "/etc/apt/sources.list". Замените "version" на версию Ubuntu, определенную ранее:
     deb https://deb.torproject.org/torproject.org version main
     deb-src https://deb.torproject.org/torproject.org version main
    
  • Добавьте GPG-ключ для подписи пакетов:
     ‪$ curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | sudo apt-key add -
    
  • Установите Tor и проверьте подписи:
     ‪$ sudo apt-get update
     ‪$ sudo apt-get install tor deb.torproject.org-keyring
    

Tor вполне работает с динамическими IP-адресами узлов. Оставьте строчку "Адрес" в torrc пустой, и Tor самостоятельно определит адрес.

Нет. Если правоохранительные органы проявят интерес к трафику вашего выходного узла, это может привести к изъятию компьютера. Поэтому лучше не держать выходной узел дома (и не использовать домашнее подключение к интернету).

Лучше подумайте о том, чтобы разместить выходной узел на сервере компании, которая симпатизирует Tor. Обеспечьте для своего выходного узла отдельный IP-адрес. Не пропускайте через узел собственный трафик. Разумеется, лучше воздержаться от хранения любой важной или личной информации на компьютере, где поддерживается выходной узел.

Ваш узел Tor использует больше памяти, чем вам бы хотелось? Вот почему это может происходить:

  • Если вы используете Linux, вероятны проблемы фрагментации памяти в реализации функции "malloc" в библиотеке "glibc". Иными словами, когда Tor освобождает память для системы, кусочки памяти настолько фрагментированы, что их сложно использовать повторно. Архив исходных кодов Tor поставляется с реализаций функции "malloc" из OpenBSD. В ней меньше проблем с фрагментацией, но выше нагрузка на процессор. Можно указать Tor использовать эту реализацию функции "malloc" следующим образом: ./configure --enable-openbsd-malloc.
  • Если у вас быстрый узел (много открытых TLS-соединений), вы наверняка теряете много памяти на внутренние буферы библиотеки OpenSSL (по 38+ Кб на соединение). Мы изменили OpenSSL, чтобы библиотека активнее освобождала неиспользуемые буферы. Если вы используете OpenSSL 1.0.0 или более позднюю версию, процесс сборки Tor автоматически использует эту возможность.
  • Если потребление памяти по-прежнему велико, попробуйте уменьшить пропускную способность, анонсируемую вашим узлом. Анонс меньшей пропускной способности привлечёт меньше пользователей. Узел не так сильно будет потреблять память. Подробнее опция MaxAdvertisedBandwidth описана в руководстве.

Быстрые узлы Tor обычно потребляют довольно много памяти. Быстрый выходной узел вполне может требовать 500-1000 Мб памяти.

Если вы поддерживаете выходной узел, некоторые сервисы, к которым пользователи подключаются через вас, будут запрашивать обратное соединение, чтоб собрать больше информации. Например, сервер чата IRC подключается к порту identd, чтобы узнать, какой пользователь устанавливает соединение. (У IRC в данном случае ничего не получится, потому что у Tor просто нет этой информации). Кроме того, пользователи вашего выходного узла могут привлечь внимание других пользователей IRC, сайта и прочих, кто хотел бы узнать побольше об узле, с которого они подключаются.

Те, кто сканирует интернет в поисках открытых прокси-серверов, могут заметить, что иногда узлы Tor открывают свой SocksPort всему миру. Мы рекомендуем ограничить доступ к SocksPort локальной сетью.

В любом случае нужно выполнять обновления безопасности. Другие идеи о безопасности узлов Tor изложены в этой статье.

Отлично. Именно поэтому мы реализовали политики исходящего трафика.

У каждого узла Tor есть политика исходящего трафика. Она определяет допустимые соединения от лица этого узла. Политики исходящего трафика влияют на клиентов Tor через директорию. Если конечное назначение, выбранное клиентом, запрещено в политике исходящего трафика узла, такой узел автоматически не будет предлагаться. Так владелец каждого узла может сам определять, с какими сервисами и сетями разрешать соединения. Если вы используете политику исходящего трафика по умолчанию, прочтите на нашем сайте о возможных проблемах. Мы также рекомендуем советы Майка Перри (Mike Perry) о том, как поддерживать выходной узел с минимальными рисками.

Политика исходящего трафика по умолчанию разрешает доступ ко многим популярным сервисам (например, просматривать интернет-страницы). Она ограничивает доступ к некоторым сервисам, где выше вероятность возникновения проблем (например, к электронной почте), а также к создающим недопустимо большую нагрузку на сеть Tor (например, к обычным портам файлообменных сервисов). Вы можете изменить политику исходящего трафика в файле torrc. Если вы хотите избежать большинства, если не всех потенциальных злоупотреблений, установите для него значение "reject *:*". Эта настройка позволит вашему узлу передавать трафик внутри сети Tor, но не разрешит соединяться с внешними сайтами и другими сервисами.

Если вы разрешаете исходящие соединения, убедитесь, что ваш компьютер может корректно преобразовывать имена в IP-адреса. Если какие-либо ресурсы недоступны с вашего компьютера (например, вы ограничены брандмауэром или контентным фильтром), пожалуйста, явным образом укажите эти ресурсы в строчках "reject" вашей политики исходящего трафика. В противном случае пользователи Tor также не смогут пользоваться ими.

Мы ищем людей с относительно стабильным интернетом, готовых поделиться как минимум 10 Mбитi/с в обе стороны. Если это вы, пожалуйста, подумайте о том, чтобы поддерживать у себя узел Tor.

Даже если у вас нет этих 10 Мбит/с, вы можете помочь сети Tor, если станете поддерживать у себя мост Tor с obfs4. В этом случае понадобится минимум 1 Мбит/с в обе стороны.

Tor узнает свой IP-адрес, запрашивая у компьютера имя хоста и определяя IP по нему. Нередко бывает, что у людей в файле /etc/hosts хранятся старые записи, которые указывают на старые IP-адреса.

If that doesn't fix it, you should use the "Address" config option to specify the IP address you want it to pick. If your computer is behind a NAT and it only has an internal IP address, see the following Support entry on dynamic IP addresses.

Кроме того, если у вас много адресов, можете настроить "OutboundBindAddress", чтобы исходящие соединения были с того IP-адреса, который вы хотите "показывать миру".

Tor частично поддерживает IPv6, и мы рекомендуем каждому оператору узла включить функциональность IPv6 в их конфигурационных файлах torrc, если доступно подключение IPv6. В настоящее время Tor требует для своих узлов адреса IPv4. Вы не можете организовать узел Tor только с IPv6.

Если ваш узел относительно новый, дайте ему время. Tor эвристически выбирает узлы для использования на основе данных контролирующих узлов. На контролирующих узлах собирается информация о пропускной способности вашего узла. Контролирующий узел направляет на ваш узел больше трафика, пока его загрузка не станет оптимальной. О том, как действует новый узел, подробно рассказано в нашем блоге. Если ваш узел действует уже какое-то время, а проблемы остаются, попросите совет в списке "tor-relays".

If you're using Debian or Ubuntu especially, please use the Tor Project's repository, so you can easily receive updates. Кроме того, использование пакета предоставляет и другие удобства:

  • Your ulimit -n gets set to a high number, so Tor can keep open all the connections it needs.
  • The package creates and uses a separate user, so you don't need to run Tor as your own user.
  • The package includes an init script so Tor runs at boot.
  • Tor can bind to low-numbered ports, then drop privileges.

Вы можете запустить узел в Windows, следуя этим руководствам:

Вы должны запускать узел на Windows только в том случае, если вы сможете обеспечить его работу 24/7. Если вы не можете гарантировать это, Snowflake — лучший способ предоставить свои ресурсы сети Tor.

При поиске узла мы показываем янтарную точку рядом с ником узла, если он перегружен. Это означает, что сработала одна или несколько из следующих метрик нагрузки:

Обратите внимание, что если узел достигает перегруженного состояния, мы выводим сигнал перегрузки в течение 72 часов после восстановления узла.

Если Вы заметили, что Ваш узел перегружен, пожалуйста:

  1. Проверьте https://status.torproject.org/ на наличие выявленных проблем в категории "Tor network".

  2. Рассмотрите возможность настройки sysctl вашей системы для сети, памяти и загрузки ЦП.

  3. Рассмотрите возможность включения MetricsPort, чтобы понять, что происходит.

Настройка sysctl для сети, памяти и загрузки процессора

Исчерпание TCP-порта

В случае исчерпания TCP-порта рассмотрите возможность расширения диапазона локальных портов. Это можно сделать с помощью

# sysctl -w net.ipv4.ip_local_port_range="15000 64000"

или

# echo 15000 64000 > /proc/sys/net/ipv4/ip_local_port_range

Имейте в виду, что приведенная выше настройка sysctl не является постоянной и будет утрачена при перезапуске. Чтобы сделать ее постоянной, Вам следует добавить конфигурацию в /etc/sysctl.conf или в файл /etc/sysctl.d/.

MetricsPort

Чтобы понять состояние узла Tor и сети Tor, жизненно важно предоставить и иметь доступ к метрикам узла. Информация о перегрузке узла была добавлена в дескрипторы узла с версии 0.4.6+, но только после tor >= 0.4.7.1-alpha был доступен интерфейс к базовым метрикам ретрансляции: порт метрик.

Включение MetricsPort

Tor предоставляет доступ к порту метрик через опцию конфигурации torrc под названием MetricsPort.

Важно понимать, что публичное раскрытие MetricsPort tor опасно для пользователей сети Tor, поэтому этот порт не включен по умолчанию, и его доступ должен регулироваться политикой доступа. Пожалуйста, примите дополнительные меры предосторожности при открытии этого порта и закройте его при завершении отладки.

Предположим, что вы единственный пользователь на сервере, на котором запущен узел Tor. Вы можете включить порт метрик, добавив это в файл torrc:

MetricsPort 127.0.0.1:9035
MetricsPortPolicy accept 127.0.0.1

И тогда вы сможете легко получить метрики с помощью:

# curl http://127.0.0.1:9035/metrics

в формате Prometheus по умолчанию.

Примечание: Каждый пользователь на этом сервере сможет получить доступ к этим метрикам узла в приведенном выше примере. В общем, установите очень строгую политику доступа с помощью MetricsPortPolicyи рассмотрите возможность использования функций брандмауэра ваших операционных систем для глубокой защиты.

Для более подробного объяснения о MetricsPort и MetricsPortPolicy см. справочную страницу tor.

Выходные данные MetricsPort

Вот пример того, какие выходные данные будут получены при включении MetricsPort (мы опустили все метрики, связанные с контролем перегрузки, поскольку нам все еще нужно стабилизировать этот интерфейс):

# HELP tor_relay_connections Total number of opened connections
# TYPE tor_relay_connections gauge
tor_relay_connections{type="OR listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="OR listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="OR listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="OR listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="OR",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="OR",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="OR",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="OR",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Exit",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Exit",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Exit",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Exit",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Socks listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Socks listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Socks listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Socks listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Socks",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Socks",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Socks",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Socks",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Directory listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Directory listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Directory listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Directory listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Directory",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Directory",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Directory",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Directory",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Control listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Control listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Control listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Control listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Control",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Control",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Control",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Control",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Transparent pf/netfilter listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Transparent pf/netfilter listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Transparent pf/netfilter listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Transparent pf/netfilter listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Transparent natd listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Transparent natd listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Transparent natd listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Transparent natd listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="DNS listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="DNS listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="DNS listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="DNS listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Extended OR",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Extended OR",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Extended OR",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Extended OR",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Extended OR listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Extended OR listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Extended OR listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Extended OR listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="HTTP tunnel listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="HTTP tunnel listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="HTTP tunnel listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="HTTP tunnel listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Metrics listener",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Metrics listener",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Metrics listener",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Metrics listener",direction="received",state="opened",family="ipv6"} 0
tor_relay_connections{type="Metrics",direction="initiated",state="opened",family="ipv4"} 0
tor_relay_connections{type="Metrics",direction="initiated",state="opened",family="ipv6"} 0
tor_relay_connections{type="Metrics",direction="received",state="opened",family="ipv4"} 0
tor_relay_connections{type="Metrics",direction="received",state="opened",family="ipv6"} 0
# HELP tor_relay_connections_total Total number of created/rejected connections
# TYPE tor_relay_connections_total counter
tor_relay_connections_total{type="OR listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="OR listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="OR listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="OR listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="OR listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="OR listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="OR",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="OR",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="OR",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="OR",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="OR",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="OR",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Exit",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Exit",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Exit",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Exit",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Exit",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Exit",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Socks listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Socks listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Socks listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Socks listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Socks listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Socks listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Socks",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Socks",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Socks",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Socks",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Socks",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Socks",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Directory listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Directory listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Directory listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Directory listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Directory listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Directory listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Directory",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Directory",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Directory",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Directory",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Directory",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Directory",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Control listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Control listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Control listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Control listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Control listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Control listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Control",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Control",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Control",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Control",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Control",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Control",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Transparent pf/netfilter listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Transparent natd listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="DNS listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="DNS listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="DNS listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="DNS listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="DNS listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="DNS listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Extended OR listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Extended OR listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="HTTP tunnel listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Metrics listener",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Metrics listener",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Metrics listener",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Metrics listener",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Metrics listener",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Metrics listener",direction="received",state="rejected",family="ipv6"} 0
tor_relay_connections_total{type="Metrics",direction="initiated",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Metrics",direction="initiated",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Metrics",direction="received",state="created",family="ipv4"} 0
tor_relay_connections_total{type="Metrics",direction="received",state="created",family="ipv6"} 0
tor_relay_connections_total{type="Metrics",direction="received",state="rejected",family="ipv4"} 0
tor_relay_connections_total{type="Metrics",direction="received",state="rejected",family="ipv6"} 0
# HELP tor_relay_flag Relay flags from consensus
# TYPE tor_relay_flag gauge
tor_relay_flag{type="Fast"} 0
tor_relay_flag{type="Exit"} 0
tor_relay_flag{type="Authority"} 0
tor_relay_flag{type="Stable"} 0
tor_relay_flag{type="HSDir"} 0
tor_relay_flag{type="Running"} 0
tor_relay_flag{type="V2Dir"} 0
tor_relay_flag{type="Sybil"} 0
tor_relay_flag{type="Guard"} 0
# HELP tor_relay_circuits_total Total number of circuits
# TYPE tor_relay_circuits_total gauge
tor_relay_circuits_total{state="opened"} 0
# HELP tor_relay_streams_total Total number of streams
# TYPE tor_relay_streams_total counter
tor_relay_streams_total{type="BEGIN"} 0
tor_relay_streams_total{type="BEGIN_DIR"} 0
tor_relay_streams_total{type="RESOLVE"} 0
# HELP tor_relay_traffic_bytes Traffic related counters
# TYPE tor_relay_traffic_bytes counter
tor_relay_traffic_bytes{direction="read"} 0
tor_relay_traffic_bytes{direction="written"} 0
# HELP tor_relay_dos_total Denial of Service defenses related counters
# TYPE tor_relay_dos_total counter
tor_relay_dos_total{type="circuit_rejected"} 0
tor_relay_dos_total{type="circuit_killed_max_cell"} 0
tor_relay_dos_total{type="circuit_killed_max_cell_outq"} 0
tor_relay_dos_total{type="marked_address"} 0
tor_relay_dos_total{type="marked_address_maxq"} 0
tor_relay_dos_total{type="conn_rejected"} 0
tor_relay_dos_total{type="concurrent_conn_rejected"} 0
tor_relay_dos_total{type="single_hop_refused"} 0
tor_relay_dos_total{type="introduce2_rejected"} 0
# HELP tor_relay_load_onionskins_total Total number of onionskins handled
# TYPE tor_relay_load_onionskins_total counter
tor_relay_load_onionskins_total{type="tap",action="processed"} 0
tor_relay_load_onionskins_total{type="tap",action="dropped"} 0
tor_relay_load_onionskins_total{type="fast",action="processed"} 0
tor_relay_load_onionskins_total{type="fast",action="dropped"} 0
tor_relay_load_onionskins_total{type="ntor",action="processed"} 0
tor_relay_load_onionskins_total{type="ntor",action="dropped"} 0
tor_relay_load_onionskins_total{type="ntor_v3",action="processed"} 0
tor_relay_load_onionskins_total{type="ntor_v3",action="dropped"} 0
# HELP tor_relay_exit_dns_query_total Total number of DNS queries done by this relay
# TYPE tor_relay_exit_dns_query_total counter
tor_relay_exit_dns_query_total 0
# HELP tor_relay_exit_dns_error_total Total number of DNS errors encountered by this relay
# TYPE tor_relay_exit_dns_error_total counter
tor_relay_exit_dns_error_total{reason="success"} 0
tor_relay_exit_dns_error_total{reason="format"} 0
tor_relay_exit_dns_error_total{reason="serverfailed"} 0
tor_relay_exit_dns_error_total{reason="notexist"} 0
tor_relay_exit_dns_error_total{reason="notimpl"} 0
tor_relay_exit_dns_error_total{reason="refused"} 0
tor_relay_exit_dns_error_total{reason="truncated"} 0
tor_relay_exit_dns_error_total{reason="unknown"} 0
tor_relay_exit_dns_error_total{reason="tor_timeout"} 0
tor_relay_exit_dns_error_total{reason="shutdown"} 0
tor_relay_exit_dns_error_total{reason="cancel"} 0
tor_relay_exit_dns_error_total{reason="nodata"} 0
# HELP tor_relay_load_oom_bytes_total Total number of bytes the OOM has freed by subsystem
# TYPE tor_relay_load_oom_bytes_total counter
tor_relay_load_oom_bytes_total{subsys="cell"} 0
tor_relay_load_oom_bytes_total{subsys="dns"} 0
tor_relay_load_oom_bytes_total{subsys="geoip"} 0
tor_relay_load_oom_bytes_total{subsys="hsdir"} 0
# HELP tor_relay_load_socket_total Total number of sockets
# TYPE tor_relay_load_socket_total gauge
tor_relay_load_socket_total{state="opened"} 0
tor_relay_load_socket_total 0
# HELP tor_relay_load_tcp_exhaustion_total Total number of times we ran out of TCP ports
# TYPE tor_relay_load_tcp_exhaustion_total counter
tor_relay_load_tcp_exhaustion_total 0
# HELP tor_relay_load_global_rate_limit_reached_total Total number of global connection bucket limit reached
# TYPE tor_relay_load_global_rate_limit_reached_total counter
tor_relay_load_global_rate_limit_reached_total{side="read"} 0
tor_relay_load_global_rate_limit_reached_total{side="write"} 0

Давайте выясним, что на самом деле означают некоторые из этих строк:

tor_relay_load_onionskins_total{type="ntor",action="dropped"} 0

Когда узел начинает видеть "dropped", обычно это проблема ЦП/ОЗУ.

Tor, к сожалению, является однопоточным,за исключением случаев, когда обрабатываются «луковые оболочки». "Onion skins" (луковые оболочки) - это криптографическая работа, которая должна быть выполнена на знаменитых "onion layers" (луковых слоях) в каждой цепи.

Когда tor обрабатывает слои, мы используем пул потоков и передаем всю эту работу этому пулу. Может случиться так, что этот пул начнет сбоить из-за нагрузки на память или на процессор, и это вызовет состояние перегрузки.

Это, скорее всего, будет выявлено, если ваш сервер работает на полную мощность.

tor_relay_exit_dns_error_total{...}

Любой счетчик в области «*_dns_error_total» (кроме счетчика успешных запросов) указывает на потенциальную проблему, связанную с DNS. Однако в процессе выпуска релиза 0.4.7 мы поняли, что ошибки DNS слишком зашумлены и содержат много ложных срабатываний, чтобы быть полезными для целей отчетности о перегрузке. Поэтому мы больше не используем их для этой цели, начиная с релизов 0.4.6.9 и 0.4.7.4-alpha. Тем не менее, мы по-прежнему сохраняем метрики DNS, чтобы дать оператору узла представление о том, что происходит с его узлом.

Проблемы и ошибки с тайм-аутом DNS относятся только к выходным узлам.

tor_relay_load_oom_bytes_total{...}

Вызов Out-Of-Memory указывает на проблему с RAM. Узлу требуется больше RAM или имеется утечка памяти. Если вы заметили, что в процессе tor присутствует утечка памяти, пожалуйста, сообщите о проблеме либо через Tor gitLab, либо отправив электронное письмо в список рассылки tor-relays.

Tor имеет свой собственный обработчик OOM, и он запускается в случае, если достигнуто 75% от общей памяти, которую tor считает доступной. Таким образом, предположим, что tor думает, что ему доступно в общей сложности 2 ГБ памяти, тогда при использовании 1,5 ГБ памяти он начнет её освобождать. Это считается состоянием перегрузки.

Чтобы оценить объем доступной памяти, при запуске tor будет использовать MaxMemInQueues или, если он не установлен, посмотрит на общую RAM, доступную в системе, и применит следующий алгоритм:

    if RAM >= 8GB {
      memory = RAM * 40%
    } else {
      memory = RAM * 75%
    }
    /* Capped. */
    memory = min(memory, 8GB) -> [8GB on 64bit and 2GB on 32bit)
    /* Minimum value. */
    memory = max(250MB, memory)

Чтобы избежать состояния перегрузки, мы рекомендуем запускать узел с объёмом RAM более 2 ГБ на 64bit. Рекомендуется 4 ГБ, хотя, конечно, не помешает добавить больше RAM, если у вас имеется такая возможность.

Важно заметить, что сам tor может быть завершён обработчиком OOM ОС. Поскольку tor использует всю доступную ему в системе память при запуске, в случае, если в общей системе запущено много других приложений, работающих с использованием RAM, он в конечном итоге потребляет слишком много памяти. В этом случае обработчик OOM ОС могла бы завершить tor, даже при отсутствии перегрузки памяти tor.

tor_relay_load_socket_total

Если количество открытых сокетов близко к общему количеству доступных сокетов или совпадает с ним, это указывает на то, что в реле заканчиваются сокеты. Решение заключается в том, чтобы увеличить ulimit -n для процесса tor.

tor_relay_load_tcp_exhaustion_total

Эти строки указывают на то, что у узла заканчиваются TCP-порты.

Попробуйте настроить sysctl как описано выше.

tor_relay_load_global_rate_limit_reached_total

Если этот счетчик увеличивается на некоторое заметное значение за короткий промежуток времени, то узел перегружен. Скорее всего, он используется в качестве сторожа большим onion-ресурсом или для осуществляемой DDoS в сети.

Если ваш узел по-прежнему перегружен и вы не знаете почему, свяжитесь с network-report@torproject.org. Вы можете зашифровать свою электронную почту с помощью ключа network-report OpenPGP.

When upgrading your Tor relay, or moving it to a different computer, be sure to keep the same identity keys (stored in keys/ed25519_master_id_secret_key and keys/secret_id_key in your DataDirectory).

If you are a bridge operator, also make sure to keep pt_state/. It contains data required for your bridge to keep working with the same bridge line.

Для простоты, обычное копирование всего каталога данных тоже должно сработать.

Возможно, вы захотите сохранить резервные копии этих идентификационных ключей, а также pt_state для моста, чтобы вы могли восстановить ретрансляцию, если что-то пойдет не так.

Открытые по умолчанию порты перечислены ниже, но имейте в виду, что любой порт или порты могут быть открыты оператором узла посредством конфигурации в torrc или изменения исходного кода. Значение по умолчанию в соответствии с src/or/policies.c (line 85 и line 1901) из исходного кода release-0.4.6:

reject 0.0.0.0/8
reject 169.254.0.0/16
reject 127.0.0.0/8
reject 192.168.0.0/16
reject 10.0.0.0/8
reject 172.16.0.0/12

reject *:25
reject *:119
reject *:135-139
reject *:445
reject *:563
reject *:1214
reject *:4661-4666
reject *:6346-6429
reject *:6699
reject *:6881-6999
accept *:*

BridgeDB реализует шесть механизмов для распространения мостов: HTTPS, Moat, Email, Telegram, Settings и Reserved. Операторы моста могут проверить, какой механизм использует их мост, воспользовавшись Поиском узлов. Введите <HASHED FINGERPRINT> моста в форму и нажмите «Поиск».

Операторы также могут выбрать метод распространения своего моста. Чтобы изменить метод, измените настройку BridgeDistributionв файле torrc на одну из следующих: https, moat, электронная почта, telegram, настройки, нет, любой.

Более подробную информацию см. в разделе пост-установка.

  • Выходные узлы. Однако поддержка такого узла сопряжена с наибольшей публичностью и рисками (в частности, вы не должны запускать их из дома).
  • Если вы предпочитаете минимум усилий для запуска, попробуйте организовать быстрый входной узел
  • Или мост.

Мы хотим, чтобы организация узла Tor была простой и удобной:

  • Ничего, если узел иногда оказывается офлайн. Управляющие узлы быстро замечают эту проблему и перестают использовать ваш узел. Постарайтесь, чтобы это не происходило слишком часто. Ведь любое соединение, которое использовало ваш узел в момент выхода его из строя, прервётся.
  • У каждого узла Tor есть политика исходящего трафика. В ней определяется, какие типы исходящих соединений разрешены (или не разрешены) для этого узла. Если вы не хотите, чтобы люди могли использовать ваш узел как выходной, настройте эту политику так, чтобы разрешать только подключения к другим узлам Tor.
  • Ваш узел в пассивном режиме будет оценивать и анонсировать вашу недавнюю пропускную способность. Узлы с высокой пропускной способностью привлекают больше пользователей, чем узлы с низкой пропускной способностью. Но последние тоже полезны.

Почему изменяется нагрузка на узел

Tor управляет пропускной способностью по всей сети. Это обеспечивает умеренную работу для большинства узлов. Но цели Tor отличаются от таких протоколов, как BitTorrent. Tor нужны веб-страницы с низкой задержкой, что требует быстрых соединений с запасом прочности. BitTorrent нужны массовые загрузки, что требует использования всей пропускной способности.

Мы работаем над новым сканером пропускной способности, который легче понять и поддерживать. Он будет обеспечивать диагностику для узлов, которые не измеряются, и узлов, которые имеют низкие показатели.

Зачем Tor нужны сканеры пропускной способности?

Большинство провайдеров сообщают вам максимальную скорость вашего локального соединения. Но у Tor есть пользователи по всему миру, и они подключаются к одному или двум узлам Guard случайным образом. Поэтому нам нужно знать, насколько хорошо каждый узел может соединиться со всем миром.

Таким образом, даже если все операторы ретрансляции установят заявленную пропускную способность на уровне скорости локального соединения, нам все равно потребуются полномочия по пропускной способности, чтобы сбалансировать нагрузку между различными частями Интернета.

Что такое нормальная нагрузка на узел?

Для большинства узлов нормальная загрузка составляет 30%-80% от их мощности. Это хорошо для клиентов: перегруженный узел имеет высокую задержку. (Мы хотим, чтобы узлов было достаточно для загрузки каждого узла на 10%. Тогда Tor будет почти таким же быстрым, как и более широкий Интернет).

Иногда узел работает медленно, потому что его процессор медленный или его соединения ограничены. В других случаях это медленная сеть: узел имеет плохой пиринг с большинством других узлов tor, или слишком большое расстояние до узла.

Определение причины ограничения узла

У замедления узла может быть много причин. Вот как их определить.

Системные ограничения

  • Проверьте использование RAM, процессора и дескриптора порта/файла на вашем узле

Tor регистрирует некоторые из них при запуске. Другие можно просмотреть с помощью популярных или аналогичных инструментов.

Ограничения провайдера

  • Проверьте пиринг в Интернете (пропускная способность, задержка) от вашего поставщика узла к другим узлам. Узлы, проходящие через Comcast, временами были медленными. Узлы за пределами Северной Америки и Западной Европы обычно медленнее.

Ограничения сети Tor

Пропускная способность узла может быть ограничена собственной пропускной способностью узла или измеренной управляющими серверами пропускной способностью. Вот как можно узнать, какое измерение ограничивает ваш узел:

  • Проверьте каждый из голосов за ваш узел на consensus-health (страница с большим объемом данных) и проверьте медиану. Если ваш узел не помечен как Running некоторыми управляющими серверами:
    • Проверьте правильность адреса IPv4 или IPv6?
    • Возможно его IPv4 или IPv6 адрес недоступен из некоторых сетей?
    • Возможно на его IPv4-адресе более 2 узлов?

В противном случае проверьте наблюдаемую пропускную способность узла и предельную скорость передачи данных. Найдите свой узел в Метриках. Затем наведите курсор мыши на заголовок полосы пропускания, чтобы увидеть наблюдаемую полосу пропускания и скорость передачи данных.

Вот еще несколько деталей и примеров: Снижение веса консенсуса и Скорость нарастания выходного узла.

Как это исправить

Наименьшая из этих цифр ограничивает полосу пропускания, выделяемую для узла.

  • Если это скорость полосы пропускания, увеличьте BandwidthRate/Burst или RelayBandwidthRate/Burst в вашем torrc.
  • Если это наблюдаемая полоса пропускания, ваш узел не будет запрашивать дополнительную полосу пропускания, пока не увидит, что он становится быстрее. Вам нужно выяснить, почему он медленный.
  • Если это медиана измеренной пропускной способности, ваш узел выглядит медленным для большинства управляющих серверов. Вам нужно выяснить, почему измеренные ими значения низкие.

Cобственные измерения параметров работы узла

Если ваш узел считает, что он медленный, или управляющие серверы думают, что он медленный, вы можете проверить пропускную способность самостоятельно:

  • Запустите тест с использованием tor, чтобы увидеть, как быстро tor может работать в вашей сети

    Для этого вам нужно настроить клиент tor на использование вашего ретранслятора в качестве входа. Если у вашего реле есть только флаг Guard, установите EntryNodes с fingerprint вашего реле в torrc. Если у вашего реле нет флага Guard или у него есть флаги Guard и Exit, вы не можете установить свое реле в качестве узла входа (см. https://gitlab.torproject.org/tpo/core/tor/-/issues/22204), но вы можете установить его в качестве своего моста, даже если это не мост. Чтобы настроить ваш ретранслятор в качестве моста, добавьте в свой torrc:

    Bridge <ip>:<port>
    UseBridge 1
    

    Затем загрузите большой файл, используя свой Sock sPort в качестве socks-прокси. Для этого вы можете использовать curl, например:

    curl https://target/path --proxy socks5h://<user>:<password>@127.0.0.1:<socks-port>
    

    Использование разных user/password гарантирует разные схемы. Вы можете использовать $RANDOM.

    Это даст вам некоторое представление о том, какой объем трафика может выдержать ваш ретранслятор.

    В качестве альтернативы вы можете запустить relay_bw, чтобы протестировать ваш ретранслятор, используя 2 схемы перехода, аналогично тому, как это делает sbws.

  • Run a test using tor and chutney to find out how fast tor can get on your CPU. Продолжайте увеличивать объем данных до тех пор, пока пропускная способность не перестанет увеличиваться.

Да, при определённых атаках.

Простой пример: у самого злоумышленника есть несколько узлов Tor. Злоумышленник увидит, что трафик исходит от вас, но не сможет узнать, появился ли этот трафик на вашем компьютере или вы просто посредник.

В некоторых случаях это не работает. Например, если злоумышленник имеет возможность отслеживать весь ваш входящий и исходящий трафик. В этом случае ему нетрудно выяснить, какие данные вы просто передаёте, а какие изначально ваши. (В этом случае адреса назначения все еще скрыты от злоумышленника, если только злоумышленник также не отслеживает их. Ваша ситуация не лучше, чем если бы вы были обычным клиентом.)

Поддержка узла Tor имеет свои минусы. Во-первых, у нас всего несколько сотен узлов. Если вы поддерживаете один из них, это может навести злоумышленника на мысль о том, что анонимность имеет для вас большое значение. Во-вторых, есть менее явные виды атак, недостаточно исследованные, которые используют знание того, что вы поддерживает узел Tor. Например, злоумышленник может следить за тем, пересылаете ли вы трафик, даже без доступа к вашей сети. Он будет перенаправлять трафик на ваш узел и отмечать изменения во времени прохождения пакетов данных.

Чего тут больше – плюсов или минусов – сказать трудно. Многое зависит от того, какие типы атак волнуют вас сильнее. Для большинства пользователей поддержка узла Tor – разумный ход.

См. инструкции по настройке проброса портов в вашем маршрутизаторе.

Если ваш узел запущен во внутренней сети, вам потребуется настроить проброс портов. Проброс TCP-соединений зависит от системы, и в firewalled-clients FAQ предлагается несколько примеров того, как это сделать.

Например, так можно настроить брандмауэр GNU/Linux на базе iptables:

/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 9001 -j ACCEPT

Вам может потребоваться изменить "eth0", если у вас несколько внешних сетевых интерфейсов (подключенных к интернету). Скорее всего, у вас он только один (за исключением интерфейса loopback), и определить его должно быть не слишком сложно.

Настройки статистики в torrc-файле позволяют вам указать максимальное число байтов, которые ваш узел обрабатывает в конкретный промежуток времени.

    AccountingStart day week month [day] HH:MM

Это настройка времени обнуления счётчика. Например, так ограничивается количество переданных за неделю байт (со сбросом счётчика в 10:00 по средам):

    AccountingStart week 3 10:00
    AccountingMax 500 GBytes

This specifies the maximum amount of data your relay will send during an accounting period, and the maximum amount of data your relay will receive during an accounting period. Когда наступает время сброса в соответствии с AccountingStart, счётчики, соответствующие AccountingMax, обнуляются.

Пример. Допустим, вы хотите разрешить 50 Гб трафика ежедневно в каждом направлении, и чтобы статистика обнулялась каждый полдень:

    AccountingStart day 12:00
    AccountingMax 50 GBytes

Обратите внимание: ваш узел не вернётся из спячки одновременно с началом учётного периода. Он отметит скорость исчерпания лимита в прошлом периоде и выберет случайный момент для пробуждения в новом интервале. Так мы избегаем ситуации, когда сотни узлов оказались бы в рабочем состоянии в начале месяца, и ни одного узла – в конце месяца.

Если вы можете выделить Tor лишь малый объём трафика по сравнению со скоростью вашего подключения, рекомендуем установить учётный период длиной в сутки. Так вы не окажетесь в ситуации с израсходованным трафиком в первый же день. Просто поделите месячный объем на 30. Возможно, вы также захотите ограничить пропускную способность для более равномерного распределения вашего вклада на протяжении суток. Если вы хотите выделить по X Гб на прием и на передачу, можете установить параметр RelayBandwidthRate равным 20*X Kб. Допустим, вы хотите выделить 50 Гб на приём и столько же на передачу. Попробуйте установить RelayBandwidthRate равным 1000 Kб. Так ваш узел будет каждый день приносить пользу по меньшей мере полсуток.

    AccountingStart day 0:00
    AccountingMax 50 GBytes
    RelayBandwidthRate 1000 KBytes
    RelayBandwidthBurst 5000 KBytes # разрешить высокую скорость в пиках, но стараться поддерживать среднюю

Чаще всего байт на входе в узел Tor означает и байт на выходе. Но есть несколько исключений:

Если у вас открыт DirPort, клиенты Tor будут скачивать с вашего узла копию директории. Присылаемый запрос крошечный (HTTP GET), а ответ довольно большой. Из-за этой разницы, в основном, и образуется расхождение между числом принятых и переданных байтов.

У операторов выходных узлов есть еще одно небольшое исключение. Иногда вы получаете совсем немного данных (например, для мессенджера или SSH) и упаковываете их в полноразмерный 512-байтовый пакет для передачи через сеть Tor.

Значения параметров AccountingMax и BandwidthRate применяются к функциям как узла Tor, так и клиента. Как только Tor впадет в спячку (гибернацию), вы можете остаться с неработающим браузером. В логах появится такая запись:

Bandwidth soft limit reached; commencing hibernation.
No new connections will be accepted

Решение вопроса – запускать два процесса Tor: один для узла, второй клиентский, и у каждого свои настройки. Один из способов сделать это (если вы начали с настройки рабочего Tor-узла):

  • В файле "torrc" узла Tor просто установите SocksPort на 0.
  • Создайте новый клиентский файл "torrc" из "torrc.sample" и убедитесь, что он использует другой лог-файл узла. Например, "torrc.client" и "torrc.relay".
  • Измените клиент Tor и стартовые скрипты узла; включите -f /path/to/correct/torrc.
  • В Linux/BSD/mac OS X изменение стартовых скриптов на Tor.client и Tor.relay может упростить разделение настроек.

Простыми словами:

  • Есть главный идентификационный секретный ключ ed25519 – файл с названием "ed25519_master_id_secret_key". Это самый важный ключ. Убедитесь, что сделали резервную копию и храните ее в надёжном месте. Этот файл уязвим и нуждается в защите. Tor может его для вас зашифровать, если вы создадите ключ вручную и в ответ на запрос укажете пароль.
  • Для использования в Tor генерируется среднесрочный подписывающий ключ с названием "ed25519_signing_secret_key". Кроме того, создается сертификат "ed25519_signing_cert". Он подписан главным идентификационным секретным ключом и подтверждает, что среднесрочный подписывающий ключ актуален в определённый промежуток времени. По умолчанию этот промежуток – 30 дней, но его можно настроить в файле "torrc" с помощью параметра "SigningKeyLifetime N days|weeks|months".
  • Существует также основной открытый ключ с названием "ed25519_master_id_public_key", который фактически является идентификатором ретранслятора, объявляемый в сети. Этот ключ не нуждается в защите. Его можно вычислить, зная "ed5519_master_id_secret_key".

Tor нужен доступ только к среднесрочному ключу подписи и сертификату в пределах их срока действия. Таким образом, главный секретный идентификационный ключ узла Tor может храниться вне папки "DataDirectory/keys", например, на съёмном носителе или на другом компьютере. Вам придется вручную обновить среднесрочный ключ подписи и сертификат до истечения их срока действия, в противном случае процесс Tor на узле завершится по его истечении.

Эта опция не является обязательной. Вы можете использовать её по необходимости. Если вы предпочитаете, чтобы ваш узел работал продолжительное время без регулярного ручного обновления среднесрочного подписывающего ключа, лучше оставить главный секретный идентификационный ключ узла в папке "DataDirectory/keys". Просто сделайте резервную копию этого ключа на случай переустановки. Если вы хотите использовать эту опцию, вам может пригодиться наше подробное руководство.

Теперь ваш узел входной (сторожевой). В других качествах его будут использовать меньше. Но клиенты не будут спешить сменить свои текущие сторожевые узлы на ваш. Подробнее об этом можно прочесть в блоге или в статье Changing of the Guards: A Framework for Understanding and Improving Entry Guard Selection in Tor.

Когда выходной узел неверно настроен или в руках злоумышленников, ему присваивается флаг BadExit. Для Tor это значит "не пропускать трафик через этот узел". Иначе говоря, узлы с таким флагом перестают действовать. Если вашему узлу присвоен этот флаг, значит, мы обнаружили проблему или подозрительную активность, когда наблюдали за трафиком, проходящим через ваш узел, и не смогли с вами связаться. Чтобы решить вопрос, пожалуйста, свяжитесь с теми, кто у нас занимается плохими узлами.

Все исходящие соединения должны быть разрешены. Каждый узел должен иметь возможность связаться с любым другим узлом.

Операторы узлов Tor во многих юрисдикциях защищены теми же общими законами о коммуникациях, которые снимают с провайдеров доступа к интернету ответственность за информацию третьих лиц, передаваемую через их сети. Выходные узлы, которые фильтруют трафик, скорее всего, не подпадают под такую защиту.

Tor выступает за свободный доступ к сети без какого-либо вмешательства. Выходные узлы не должны фильтровать трафик, который проходит через них в интернет. Выходные узлы, уличенные в фильтрации трафика, получают флаг BadExit.

Прекрасно. Если вы станете поддерживать сразу несколько узлов, чтобы помочь сети, мы будем очень рады. Но, пожалуйста, не включайте несколько десятков узлов в рамках одной сети. Всё-таки ключевые характеристики Tor (помимо прочих) – распределённость и разнообразие.

Если вы решили поддерживать более одного узла, пожалуйста, используйте опцию "MyFamily" в "torrc" для каждого узла. Перечислите ваши узлы через запятую:

MyFamily $fingerprint1,$fingerprint2,$fingerprint3

Здесь каждый fingerprint – 40-значный идентификационный отпечаток (без пробелов).

Таким образом клиенты Tor будут стараться использовать в каждой своей цепочке не более одного из ваших узлов. Следует использовать опцию MyFamily, если у вас есть административный контроль над компьютерами или сетью, даже если эти компьютеры географически находятся в разных местах.

В файле torrc можно указать следующие две опции:

BandwidthRate – максимальная выделяемая полоса пропускания (в байтах в секунду). Например, вы можете установить "BandwidthRate 10 MBytes" для 10 мегабайт в секунду (быстрый интернет) или "BandwidthRate 500 KBytes" для 500 килобайт в секунду (неплохое кабельное подключение). Минимальное значение BandwidthRate – 75 килобайт/с.

BandwidthBurst – пул байтов, который используется в случае кратковременного пика трафика выше BandwidthRate. При этом в среднем полоса пропускания на продолжительном отрезке времени остается ниже BandwidthRate. Низкое значение Rate при высоком Burst обеспечивает соблюдение ограничения "в среднем", при этом пропуская пиковые объёмы трафика, если средние значения не достигали лимита в последнее время. Например, если вы установите "BandwidthBurst 500 KBytes" и используете то же самое значение для BandwidthRate, то вы никогда не будете использовать более 500 килобайт в секунду. Если же вы установите BandwidthBurst выше (например, "5 MBytes"), это позволит пропустить больший поток, пока пул не будет исчерпан.

Если у вас ассимметричное соединение с интернетом (исходящий канал меньше входящего), например, кабельный модем, вам лучше сделать BandwidthRate меньше меньшего (обычно меньше ширины исходящего канала). Иначе может случиться, что вы будете терять много пакетов данных в моменты максимальной нагрузки на канал. Возможно, стоит поэкспериментировать с разными значениями и опытным путем определить, какие настройки обеспечат комфортное подключение. Затем укажите BandwidthBurst равным BandwidthRate.

Если узел Tor находится на компьютере Linux, у владельца есть еще один вариант. Он может установить низкий приоритет трафика Tor по сравнению с остальным трафиком на компьютере. Таким образом увеличение загрузки канала Tor не скажется на личном трафике владельца. Скрипт для этого можно найти в каталоге исходного кода Tor.

Кроме того, существует вариант гибернации, где вы можете указать Tor обслуживать определенный объем трафика за период времени (например, 100 ГБ в месяц). Этот вариант описан в гибернационном режиме.

Обратите внимание, что BandwidthRate и BandwidthBurst указываются в байтах, а не битах.