Оператори ретрансляції

  • Не використовуйте пакети зі сховищ Ubuntu. Вони не надійно оновлюються. Якщо ви їх використовуєте, ви пропустите важливі виправлення стабільності та безпеки.
  • Визначте свою версію Ubuntu, виконавши таку команду:
     ‪$ lsb_release -c
    
  • Працюючи з правами суперкористувача додайте наступні рядки до /etc/apt/sources.list. Замініть «версію» версією з попереднього кроку:
     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 tarball постачається з реалізацією malloc OpenBSD, яка не має такої кількості помилок фрагментації (але компроміс полягає в більшому завантаженні процесора). Ви можете вказати Tor використовувати цю реалізацію malloc замість: ./configure --enable-openbsd-malloc.
  • Якщо ви використовуєте швидкий вузол, тобто у вас багато відкритих TLS-з'єднань, ви можете втрачати багато пам'яті для внутрішніх буферів OpenSSL (38 кБ+ на сокет). Ми виправили OpenSSL для більш агресивного звільнення буферної пам'яті, що не використовується. Якщо ви оновите до OpenSSL 1.0.0 або новішої версії, процес Tor автоматично розпізнає та використовуватиме цю функцію.
  • Якщо ви все ще не можете впоратися із навантаженням на пам’ять, подумайте про зменшення пропускної здатності, оголошену для вашого ретранслятора. Оголошення меншої пропускної здатності означає, що ви залучите менше користувачів, тому ваш ретранслятор не буде великим. Перегляньте параметр MaxAdvertisedBandwidth на головній сторінці.

Все це говорить про те, що швидкісні ретранслятори Tor дійсно використовують багато оперативної пам’яті. Досить часто швидкий вихідний ретранслятор використовує 500-1000 МБ пам'яті.

Якщо ви дозволите вихідні з'єднання, деякі сервіси, до яких люди підключаються з ретранслятора, надаватимуть запит на зворотне підключення для збору додаткової інформації про вас. Наприклад, деякі IRC-сервери підключаються до порту identd, щоб записати, який користувач встановив з'єднання. (Це не зовсім спрацює для них, тому що Tor не знає цієї інформації, але вони все одно намагаються). Крім того, користувачі, що виходять через ваш вихід, можуть привернути увагу інших користувачів IRC-сервера, вебсайту тощо, які захочуть дізнатися більше про хост, через який вони ретранслюються.

Інша причина полягає в тому, що групи, які шукають відкриті проксі в інтернеті, дізналися, що іноді ретранслятори Tor відкривають світові свої порти. Ми рекомендуємо прив’язати свій socksport лише до локальних мереж.

У будь-якому випадку, ви маєте слідувати усім оновленням для своєї безпеки. Перегляньте статтю про безпеку ретрансляторів Tor, щоб отримати додаткові пропозиції для розв'язання питання безпеки.

Чудово. Саме тому ми впровадили політику вихідного трафіку.

Кожен ретранслятор Tor має політику виходу, яка визначає, які вихідні з’єднання дозволені чи заборонені для цього ретранслятора. Політики виходу поширюються на клієнтів Tor через каталог, тому клієнти автоматично уникатимуть вибору вихідних ретрансляторів, які відмовляться виходити до цільового призначення. Таким чином, кожен вузол може вирішувати, до яких послуг, хостів і мереж він хоче дозволити підключення, виходячи з потенціалу зловживання та власної ситуації. Прочитайте Статтю підтримки щодо проблем, з якими ви можете стикнутися, якщо ви використовуєте політику виходу за замовчуванням, а потім прочитайте поради Майка Перрі щодо запуску вихідного вузла з мінімальними переслідуваннями .

Політика виходу за замовчуванням дозволяє отримати доступ до багатьох популярних служб (наприклад, перегляд вебсторінок), але обмежує деякі служби через потенційні зловживання (наприклад, пошта), та інші через те, що мережа Tor не може впоратися з навантаженням (наприклад, порти обміну файлами за замовчуванням). Ви можете змінити політику вихідного трафіку, відредагувавши файл torrc. Якщо ви хочете уникнути більшості, якщо не всіх можливих зловживань, встановіть значення «reject *:*». Це налаштування означає, що ваш вузол використовуватиметься для передачі трафіку всередині мережі Tor, але не для підключення до зовнішніх вебсайтів або інших служб.

Якщо ви дозволили будь-які вихідні з’єднання, переконайтеся, що дозволи імен працюють (тобто ваш комп’ютер може правильно розпізнавати інтернет-адреси). Якщо є ресурси, до яких ваш комп'ютер не може звернутися (наприклад, ви знаходитесь за обмежувальним брандмауером або фільтром контенту), будь ласка, явно відмовтеся від них у політиці виходу, інакше користувачі Tor теж постраждають.

Ми шукаємо людей із досить надійним підключенням до інтернету, які мають доступну пропускну здатність принаймні 10 Мбіт/с (Мбнс) в кожну сторону. Якщо це ви, будь ласка, подумайте про запуск ретранслятора Tor.

Навіть якщо у вас немає принаймні 10 Мбіт/с доступної пропускної здатності, ви все одно можете допомогти мережі Tor, запустивши міст Tor з підтримкою obfs4. У цьому випадку вам необхідно мати принаймні 1 Мбіт/с доступної пропускної здатності.

Tor розпізнає IP-адресу, запитуючи у комп'ютера ім'я хоста, а потім інтерпретує це ім'я хоста. Часто люди мають старі записи у файлі /etc/hosts, які вказують на старі IP-адреси.

Якщо це не розв'яже проблему, скористайтеся параметром конфігурації «Address», щоб вказати IP-адресу, яку ви хочете вибрати. Якщо ваш комп’ютер знаходиться за NAT і має лише внутрішню IP-адресу, перегляньте наступну статтю підтримки щодо динамічних IP-адрес.

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

Tor має часткову підтримку IPv6, і ми рекомендуємо кожному, хто керує ретранслятором увімкнути функціональність IPv6 у своїх конфігураційних файлах torrc, коли доступне підключення IPv6. Зараз Tor вимагає присутність адреси IPv4 на ретрансляторах, тому ви не можете запускати ретранслятор Tor на хості лише з адресами IPv6.

Якщо ваш ретранслятор відносно новий, зачекайте. Tor вирішує, які вузли використовувати евристично на основі звітів керівних ретрансляторів пропускної здатності. Керівні ретранслятори вимірюють місткість вашого ретранслятора і з часом спрямовують туди більше трафіку, допоки він не досягне оптимального навантаження. Життєвий цикл нового ретранслятора докладніше пояснюється в цій публікації в блозі. Якщо ви деякий час використовуєте ретранслятор, але все ще маєте проблеми, спробуйте запитати у списку tor-relays.

Якщо ви використовуєте Debian або Ubuntu, скористайтеся репозиторієм проекту Tor, щоб легко отримувати оновлення. Крім того, користування пакетом надає інші зручності:

  • Ваш ulimit -n встановлюється на, що достатньо для Tor, щоб залишати відкритими всі необхідні з'єднання.
  • Пакет створює та використовує окремого користувача, тому вам не потрібно запускати Tor як власний користувач.
  • Пакет включає сценарій ініціалізації, щоб Tor запускався під час завантаження.
  • Tor може прив’язуватися до портів з малим номером, а потім позбавлятися привілеїв.

Ви можете запустити ретранслятор у Windows згідно з цими інструкціями:

Ви маєте запускати ретранслятор у Windows за умови підтримання його роботи 24/7. Якщо ви не можете гарантувати це, Snowflake — це кращий спосіб зробити свій внесок у мережу Tor.

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

Зауважте, що якщо вузол досягає стану перевантаження, ми це показуємо ще протягом 72 годин після його відновлення.

Якщо ви помітили, що ваш вузол перевантажений, будь ласка:

  1. Перевірте https://status.torproject.org/ на наявність відомих проблем у категорії «Мережа Tor».

  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.

Важливо розуміти, що публічне розкриття tor MetricsPort є небезпечним для користувачів мережі Tor, тому цей порт не ввімкнено за замовчуванням, а його доступ має регулюватися політикою доступу. Будьте обережні, відкриваючи цей порт, і закрийте його, коли завершите налагодження.

Припустимо, що ви єдиний користувач на сервері, який запускає передачу Tor. Ви можете ввімкнути метрики портів, додавши це до свого файлу torrc:

MetricsPort 127.0.0.1:9035
MetricsPortPolicy accept 127.0.0.1

І тоді ви зможете легко отримати показники за допомогою:

# curl https://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

Коли ретранслятор починає «падати», це проблема з процесором / оперативною пам'яттю.

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

Коли 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 вказує на проблему з оперативною пам’яттю. Можливо, ретранслятор потребує більше оперативної пам’яті, або стався витік пам'яті. Якщо ви помітили, що в процесі tor закінчується пам’ять, повідомте про проблему через Tor gitLab або надіславши електронний лист до списку розсилки tor-relays.

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

Щоб оцінити обсяг доступної пам’яті, коли tor запускається, він використовуватиме MaxMemInQueues або, якщо не задано, перегляне загальну оперативну пам’ять, доступну в системі, та застосує цей алгоритм:

    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)

Щоб уникнути перевантаженого стану, ми рекомендуємо запускати ретранслятор за наявності понад 2 Гб оперативної пам’яті на 64-бітній системі. Рекомендується 4 ГБ, хоча, звичайно, не завадить додати більше оперативної пам’яті, якщо ви можете. Примітка. Якщо ви використовуєте потужний сервер із великою кількістю оперативної пам’яті, ви можете опинитися в стані перевантаження через обмеження розміру черги за замовчуванням у 8 ГБ, навіть якщо у вас залишається багато невикористаної оперативної пам’яті. У цьому випадку додайте відповідний запис MaxMemInQueues до вашої конфігурації torrc.

Треба зазначити, що tor може бути викликаний самим обробником ОС OOM. Оскільки tor під час запуску займає загальну пам’ять у системі, за умови великої кількості інших програм, що працюють з ОЗП, він з’їдає занадто багато пам’яті. У цьому випадку ОС застосувала OOM до 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 у мережі.

Якщо ваш ретранслятор все ще перевантажений, і ви не знаєте чому, зв’яжіться з [email protected]. Ви можете зашифрувати свою електронну пошту за допомогою ключ OpenPGP Network-report.

Під час оновлення свого ретранслятора Tor або його переміщення на інший комп’ютер, переконайтеся, що ви ті самі ключі ідентифікації (зберігаються в keys/ed25519_master_id_secret_key and keys/secret_id_key у каталозі даних DataDirectory).

Якщо ви оператор мосту, переконайтеся, що ви зберегли pt_state/. Він містить дані, необхідні для того, щоб ваш міст продовжував працювати з тією самою лінією мосту.

Для простоти, просте копіювання всього DataDirectory також має працювати.

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

Відкриті порти за замовчуванням наведено нижче, але майте на увазі, що будь-який порт або порти можуть бути відкриті тим, хто керує ретранслятором, налаштувавши його в torrc або змінивши вихідний код. За замовчуванням відповідно до src/or/policies.c (рядок 85 і рядок 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 і Reserved. Ті, хто керує мостами, можуть перевірити, який механізм використовує їхній міст у Relay Search. Введіть міст <HASHED FINGERPRINT> у форму та натисніть «Пошук».

Ті, хто керує, також можуть вибрати, який метод розподілення використовуватиме їхній міст. Щоб змінити метод, змініть параметр BridgeDistribution у файлі torrc на один із таких: https, moat, email, telegram, settings, lox, none, any. Ви можете знайти опис кожного дистриб’ютора в документації дистриб’юторів rdsys.

Дізнайтеся більше в посібнику Bridges після встановлення.

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

Ми прагнемо зробити налаштування ретранслятора Tor легким і зручним:

  • Нічого страшного, якщо ретранслятор іноді вимикається. Керівні сервери швидко помічають цю проблему та перестають використовувати ваш ретранслятор. Тільки постарайтеся, щоб це відбувалось не дуже часто, оскільки з'єднання, за використання ретрансляторів, під час відключення останнього, виводитиметься з ладу.
  • Кожен ретранслятор Tor має політику виходу, яка визначає, які вихідні з'єднання дозволені або заборонені з цього ретранслятора. Якщо вам незручно дозволяти людям використовувати ваш ретранслятор як вихідний, ви можете налаштувати його так, щоб дозволяти підключення лише до інших ретрансляторів Tor.
  • Ваш вузол пасивно оцінюватиме і рекламуватиме свою недавню пропускну спроможність, тому ретранслятори з високою пропускною спроможністю залучатимуть більше користувачів, ніж такі з низькою пропускною спроможністю. Тому наявність ретрансляторів з низькою пропускною спроможністю також є корисною.

Чому змінюється навантаження на ретранслятор

Tor керує пропускною спроможністю у всій мережі. Для більшості вузлів він працює добре. Але цілі Tor відрізняються від таких протоколів, як BitTorrent. Tor потребує вебсторінок з малою затримкою, що вимагає швидкого з'єднання з запасом. BitTorrent виконує масивні завантаження, що вимагає використання всієї пропускної здатності.

Ми працюємо над новим сканером пропускної здатності, який легший для розуміння та обслуговування. У ньому буде діагностика ретрансляторів, які не вимірюються, та ретрансляторів з низьким рівнем вимірювань.

Чому Tor потрібні сканери пропускної здатності?

Більшість провайдерів повідомляють вам максимальну швидкість вашого локального з’єднання. Але Tor має користувачів по всьому світу, і наші користувачі підключаються до одного або двох вхідних ретрансляторів випадковим чином. Тому нам потрібно знати, наскільки добре кожен ретранслятор може з’єднатися з усім світом.

Таким чином, навіть якщо всі оператори ретрансляції встановлять рекламовану пропускну здатність відповідно до швидкості локального з’єднання, нам все одно знадобляться повноваження пропускної здатності, щоб збалансувати навантаження між різними частинами Інтернету.

Що таке нормальне навантаження ретранслятора?

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

Іноді ретранслятор працює повільно, тому що в нього повільний процесор або з'єднання обмежено. В інших випадках справа в повільній роботі мережі: ретранслятор має поганий зв'язок з більшістю інших ретрансляторів, або знаходиться на великій відстані від них.

З'ясування причин обмеження ретранслятора

Багато речей можуть сповільнити вузол. Ось як їх відстежити.

Системні обмеження

  • Перевірте використання оперативної пам’яті, процесора та дескриптора порту / файлу на вашому ретрансляторі

Tor реєструє деякі з них під час запуску. Інші можна переглянути за допомогою різноманітних інструментів.

Обмеження провайдера

  • Перевірте Інтернет з'єднання (пропускну здатність, затримку) від провайдера вашого ретранслятора до інших ретрансляторів. Ретрансляція через Comcast іноді відбувається повільно. Ретранслятори за межами Північної Америки та Західної Європи зазвичай повільніші.

Обмеження мережі Tor

Пропускна здатність ретранслятора може бути обмежена власною спостережуваною пропускною здатністю або виміряною пропускною здатністю керівного сервера. Ось як дізнатися, що саме обмежує ваш ретранслятор:

  • Перевірте кожен із відгуків про ваш вузол на consensus-health (довга сторінка) і перевірте середню вимірювану пропускну здатність. Якщо ваш ретранслятор не відмічено як Працює деяким керівними серверами:
    • У нього неправильна адреса IPv4 або IPv6?
    • Його адреса IPv4 або IPv6 недоступна з деяких мереж?
    • Чи є понад 2 ретранслятори на його IPv4-адресі?

В іншому випадку перевірте спостережувану пропускну здатність вашого ретранслятора і швидкість (межу) пропускної здатності. Знайдіть своє реле на Metrics. Потім наведіть курсор миші на заголовок пропускної здатності, щоб побачити спостережувану пропускну здатність і швидкість пропускної здатності вузла.

Ось деякі додаткові відомості та кілька прикладів: Коли падає швидкість та Збільшення швидкості вихідного ретранслятора.

Як це виправити

Найменший з цих показників обмежує смугу пропускання, виділену ретранслятору.

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

Виконуйте власні вимірювання характеристик ретранслятора

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

  • Виконайте тест за допомогою tor, щоб побачити, як швидко він може працювати у вашій мережі

    Для цього вам потрібно налаштувати клієнт tor для використання вашого ретранслятора як входу. Якщо ваше реле має лише прапорець Guard, встановіть EntryNodes за допомогою вашого відбитка пальця реле в torrc. Якщо ваш ретранслятор не має прапора Guard або він має прапорці Guard і Exit, ви не можете встановити свій реле як вузол входу (див. https://gitlab.torproject.org/tpo/core/ tor/-/issues/22204), але ви можете встановити його як свій міст, навіть якщо він не є мостом. Щоб встановити реле як міст, додайте до свого torrc:

    Bridge <ip>:<port>
    UseBridge 1
    

    Потім завантажте великий файл, використовуючи ваш SocksPort як проксі-сервер socks. Для цього ви можете використовувати curl, наприклад:

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

    Використання різних користувачів/паролів гарантує різні схеми. Ви можете використовувати $RANDOM.

    Це дасть вам певне уявлення про те, який трафік може підтримувати ваше реле.

    Крім того, ви можете запустити relay_bw, щоб перевірити ваше реле за допомогою ланцюгів з двома стрибками, подібно до sbws .net/network-health/sbws/) робить.

  • Виконайте тест за допомогою tor і чатні, щоб дізнатися, як швидко tor може завантажить ваш CPU. Продовжуйте збільшувати обсяг даних, поки пропускна здатність не перестане збільшуватися. Продовжуйте збільшувати обсяг даних, доки пропускна здатність не перестане збільшуватися.

Так, ви отримуєте кращу анонімність проти деяких атак.

Найпростіший приклад — зловмисник, який має доступ до певної кількості ретрансляторів Tor. Вони побачать ваше з’єднання, але не зможуть дізнатися, чи з’єднання виникло з вашого комп’ютера чи було передане від когось іншого.

Існують випадки, коли це може не допомогти: якщо зловмисник може спостерігати за всім вашим вхідним і вихідним трафіком, йому легко дізнатися, які дані були просто передані, а які передавали ви. (У цьому випадку вони все одно не знають про те, куди ви переходите, якщо тільки вони не стежать за цими сайтами також, але це так само, якби ви були звичайним клієнтом.)

У підтримуванні роботи ретранслятора Tor є певні труднощі. По-перше, у нас лише кілька сотень вузлів, отже той факт, що ви використовуєте один з них, може стати для зловмисника сигналом того, що ви надаєте великого значення своїй анонімності. По-друге, є ще деякі рідкі атаки, які не настільки добре зрозумілі чи перевірені, та які передбачають використання знання про те, що ви керуєте ретранслятором – наприклад, зловмисник може «спостерігати», чи надсилаєте ви трафік, навіть якщо вони насправді не можуть спостерігати за вашою мережею, перенаправляючи трафік через ваш ретранслятор Tor і помічаючи зміни в часі трафіку.

Це відкрите дослідницьке питання, чи переваги переважають ризики. Багато що залежить від типів атак, які вас найбільше хвилюють. Для більшості користувачів ми вважаємо, що це розумний крок.

Дивіться portforward.com, щоб отримати вказівки щодо переадресації порту за допомогою пристрою NAT / маршрутизатора.

Якщо ваш вузол працює у внутрішній мережі, вам потрібно налаштувати переадресацію портів. Пересилання TCP-з'єднань залежить від системи, але в розділі Брандмауер клієнти. Найчастіші запитання наведено кілька прикладів, як це зробити.

Крім того, ось приклад того, як ви це робите в 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

Це визначає максимальний обсяг даних, який ваш ретранслятор надсилатиме протягом облікового періоду, і максимальний обсяг даних, який ваш ретранслятор отримає протягом облікового періоду. Коли обліковий період скидається (з AccountingStart), лічильники для AccountingMax скидаються до 0.

Приклад. Припустимо, ви хочете дозволити 50 ГБ трафіку щодня в кожному напрямку, і облік повинен обнулятися опівдні щодня:

    AccountingStart day 12:00
    AccountingMax 50 GBytes

Зверніть увагу, що ретранслятор не прокидатиметься на початку кожного облікового періоду. Він відстежуватиме, як швидко використано квоту за останній період, і вибиратиме випадкову точку в новому інтервалі, щоб прокинутися. Таким чином ми уникаємо сотень ретрансляторів, що працюють на початку кожного місяця, та жодного, який би працював наприкінці цього місяця.

Якщо у вас є лише невеликий обсяг пропускної спроможності для виділення трафіку у порівнянні зі швидкістю з’єднання, ми рекомендуємо використовувати щоденний облік, щоб ви не використали всю місячну квоту в перший день. Просто поділіть місячну суму на 30. Ви також можете розглянути обмеження швидкості, щоб поширити свою корисність на більшу частину дня: якщо ви хочете запропонувати X ГБ в кожному напрямку, ви можете встановити RelayBandwidthRate на 20*X Кбайт. Наприклад, якщо у вас є 50 ГБ, які можете запропонувати, ви можете встановити RelayBandwidthRate на 1000 Кбайт: таким чином ваш вузол завжди буде корисним принаймні половину кожного дня.

    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 просто встановіть для 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 може зашифрувати його для вас, якщо ви згенеруєте його вручну та введете пароль, коли вас попросять.
  • Середньостроковий ключ підпису під назвою "ed25519_signing_secret_key" створюється для використання Tor. Крім того, створюється сертифікат під назвою "ed25519_signing_cert", який підписується основним секретним ключем ідентифікації та підтверджує, що середньостроковий ключ підпису дійсний протягом певного періоду. Термін дії за замовчуванням становить 30 днів, але це можна налаштувати, встановивши «SigningKeyLifetime N days|weeks|months» у torrc.
  • Існує також первинний відкритий ключ під назвою "ed25519_master_id_public_key", який є фактичним ідентифікатором ретранслятора, оголошеного в мережі. Цей параметр не є чутливим і його можна легко обчислити з "ed5519_master_id_secret_key".

Tor потрібен лише доступ до середньострокового ключа підпису та сертифіката, якщо вони дійсні, тому основний секретний ключ ідентифікації можна зберігати за межами DataDirectory/keys, на носії даних або іншому комп’ютері. Вам доведеться вручну поновити середньостроковий ключ підпису та сертифікат до закінчення терміну їх дії, інакше процес Tor на ретрансляторі завершиться після закінчення терміну дії.

Ця функція необов’язкова, вам не потрібно її використовувати, якщо ви цього не хочете. Якщо ви хочете, щоб ваш вузол працював без нагляду протягом тривалого часу без необхідності регулярного оновлення середньострокового ключа підписання вручну, найкраще залишити основний секретний ключ ідентифікації в DataDirectory/keys; просто зробіть резервну копію на випадок, якщо вам знадобиться перевстановити його. Якщо ви хочете скористатися цією функцією, ви можете ознайомитися з нашим докладним посібником на цю тему.

Тепер ваш ретранслятор вхідний. В інших якостях його використовуватимуть менше. Але клієнти не поспішатимуть змінити свої поточні вхідні ретранслятори на ваш. Додаткову інформацію читайте в цій публікації в блозі або у Зміна вхідних вузлів: основа для розуміння та покращення вибору вхідних вузлів у Tor.

Якщо вихідний ретранслятор неправильно налаштований або є шкідливим, йому призначається прапор BadExit. Це повідомляє Tor уникати виходу через цей ретранслятор. Фактично, вузол з цим прапором стають недійсними для виходу. Якщо ви отримали цей прапорець, ми виявили проблему або підозрілу активність під час маршрутизації трафіку через ваш вихідний ретранслятор та не змогли зв’язатися з вами. Будь ласка, зв’яжіться з командою bad-relays, щоб ми могли розв'язати цю проблему.

Усі вихідні з’єднання мають бути дозволені, щоб кожний ретранслятор міг спілкуватися з кожним іншим ретранслятором.

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

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

Чудово. Якщо ви хочете запустити кілька ретрансляторів для більшого внеску у мережу, ми раді цьому. Але, будь ласка, не запускайте більше кількох десятків в одній мережі, оскільки частиною мети мережі Tor є розподілення та різноманітність.

Якщо ви вирішили запустити більше одного вузла, будь ласка, встановіть параметр конфігурації «MyFamily» у torrc кожного вузла, перерахувавши всі вузли (розділені комами), які знаходяться під вашим контролем:

MyFamily $fingerprint1,$fingerprint2,$fingerprint3

де кожен відбиток — це 40-символьний відбиток ідентифікатора (без пробілів).

Таким чином, клієнти Tor уникатимуть використання більше ніж одного з ваших вузлів в одній схемі. Вам слід налаштувати MyFamily, якщо у вас є адміністративний контроль над комп’ютерами або їх мережею, навіть якщо не всі вони знаходяться в одному географічному місці.

Є дві опції, які можна додати до файлу torrc:

BandwidthRate – це максимальна довготривала дозволена пропускна здатність (байт на секунду). Наприклад, ви можете вибрати «BandwidthRate 10 MBytes» для 10 мегабайтів на секунду (швидке з’єднання) або «BandwidthRate 500 KBytes» для 500 кілобайтів на секунду (хороше кабельне з’єднання). Мінімальний параметр BandwidthRate становить 75 кілобайт на секунду.

BandwidthBurst — це пул байтів, який використовується для заповнення запитів протягом коротких періодів трафіку вище BandwidthRate, але все ще зберігає середнє значення протягом тривалого періоду до BandwidthRate. Низька швидкість, але високий Burst забезпечує середнє значення в довгостроковій перспективі, водночас дозволяючи більший трафік в години пік, в разі якщо середнє значення не було досягнуто на такий момент. Наприклад, якщо ви виберете «BandwidthBurst 500 KBytes», а також використовуєте його для вашої BandwidthRate, ви ніколи не використовуватимете понад 500 кілобайтів на секунду; але якщо ви виберете вищий BandwidthBurst (наприклад, 5 МБ), це дозволить пройти більше байтів, поки пул не буде порожнім.

Якщо у вас асиметричне з'єднання (завантаження менше ніж вивантаження), наприклад, кабельний модем, вам слід встановити BandwidthRate менше, ніж менша пропускна здатність (зазвичай це пропускна здатність завантаження). Інакше ви можете втратити багато пакетів у періоди максимального використання пропускної здатності — можливо вам доведеться поекспериментувати з тим, які значення забезпечать вам комфортне з’єднання. Потім встановіть для BandwidthBurst те саме, що й BandwidthRate.

Вузли Tor на базі Linux мають у своєму розпорядженні ще одну опцію: вони можуть надавати пріоритет трафіку Tor нижче іншого трафіку, щоб на їхній особистий трафік не впливало навантаження Tor. Скрипт для цього можна знайти в каталозі contrib вихідного дистрибутиву Tor.

Крім того, існують варіанти сплячого режиму, коли ви можете наказати Tor обслуговувати лише певну пропускну здатність за період часу (наприклад, 100 ГБ на місяць). Вони описані в записі про сплячий режим.

Зверніть увагу, що BandwidthRate і BandwidthBurst вказані в байтах, а не в бітах.