Operatorzy przekaźników

  • Nie używaj pakietów w repozytoriach Ubuntu. Nie są one niezawodnie aktualizowane. Jeśli ich używasz, przegapisz ważne poprawki stabilności i bezpieczeństwa.
  • Określ swoją wersję Ubuntu, wykonując następujące polecenie:
     ‪$ lsb_release -c
    
  • Jako root, dodaj następujące linie do /etc/apt/sources.list. Zastąp 'version' wersją znalezioną w poprzednim kroku:
     deb https://deb.torproject.org/torproject.org version main
     deb-src https://deb.torproject.org/torproject.org version main
    
  • Dodaj klucz gpg używany do podpisywania pakietów, wykonując następujące polecenia:
     ‪$ curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | sudo apt-key add -
    
  • Wykonaj następujące komendy, aby zainstalować tor i sprawdzić jego podpisy:
     ‪$ sudo apt-get update
     ‪$ sudo apt-get install tor deb.torproject.org-keyring
    

Tor jest w stanie dobrze radzić sobie z dynamicznymi adresami. Wystarczy pozostawić pustą linię „Adres” w torrc, a Tor sam się domyśli.

Nie. Jeśli organy ścigania zainteresują się ruchem z Twojego przekaźnika wyjściowego, możliwe, że funkcjonariusze przejmą Twój komputer. Z tego powodu najlepiej jest nie prowadzić przekaźników wyjściowych w domu lub nie korzystać z domowego łącza internetowego.

Zamiast tego należy rozważyć uruchomienie przekaźnika wyjściowego w obiekcie komercyjnym, który wspiera Tora. Posiadaj osobny adres IP dla swojego przekaźnika wyjściowego i nie kieruj przez niego własnego ruchu. Oczywiście, należy unikać przechowywania jakichkolwiek poufnych lub osobistych informacji na komputerze, na którym znajduje się przekaźnik wyjściowy.

Jeśli twój przekaźnik Tor zużywa więcej pamięci niż powinien, sprawdź poniższe porady:

  • Jeśli używasz systemu Linux, możesz napotkać problemy z fragmentacją pamięci w implementacji biblioteki glibc malloc. Dzieje się tak, gdy Tor zwalnia pamięć z powrotem do systemu, kawałki pamięci są fragmentowane, przez co są trudne do ponownego użycia. Archiwum Tora jest dostarczane z wersją OpenBSD implementacji malloc, która nie ma aż tak dużo problemów z fragmentacją (kosztem wyższego zużycia CPU). Możesz nakazać Torowi używanie tej implementacji poprzez: ./configure --enable-openbsd-malloc.
  • Jeśli prowadzisz szybki przekaźnik, to znaczy, masz wiele otwartych połączeń TLS, prawdopodobnie zużywasz dużo pamięci na rzecz wewnętrznych buforów OpenSSL (38KB+ na socket). Poprawiliśmy OpenSSL tak, aby agresywniej zwracał nieużywane bufory pamięci. Jeśli zaktualizujesz OpenSSL do wersji 1.0.0 lub nowszej, proces budowania Tora automatycznie rozpozna i użyje tej funkcji.
  • Jeśli nadal nie możesz poradzić sobie z nadmiernym zużyciem pamięci, weź pod uwagę zmniejszenie rozpowszechnianej przepustowości Twojego przekaźnika. Rozpowszechnianie mniejszej przepustowości oznacza, że będziesz przyciągał mniej użytkowników, więc twój przekaźnik nie będzie obsługiwał, aż tak dużej ilości użytkowników. Sprawdź opcję MaxAdvertisedBandwidth w podręczniku użytkownika.

Biorąc to wszystko pod uwagę, szybsze przekaźniki Tor zużywają więcej pamięci RAM. Zużycie 500-1000 MB pamięci jest normalnym poziomem zużycia dla szybkiego przekaźnika wyjściowego.

Jeśli zezwalasz na połączenia wychodzące, niektóre serwisy z którymi inne osoby się łączą przez twój przekaźnik, będą próbowały połączyć się ponownie, aby zebrać informacje o Tobie. Na przykład, niektóre serwery IRC łączą się z powrotem do Twojego portu, aby rejestrować który użytkownik nawiązał połączenie. (To nie do końca działa, ponieważ Tor nie zna tych informacji, lecz oni nadal próbują.) Również użytkownicy wychodzący od Ciebie mogą przyciągnąć uwagę innych użytkowników na serwerze IRC, witrynie, itd. którzy chcą wiedzieć więcej o gospodarzu na którym polegają.

Innym powodem są grupy, które skanują Internet w poszukiwaniu otwartych proxy, zaobserwowały, że niekiedy przekaźniki Tor eksponują światu ich porty socks. Zalecamy Ci przypisanie Twoich portów socks wyłącznie do sieci lokalnych.

W każdym razie, musisz być na bieżąco ze swoimi zabezpieczeniami. Sprawdź ten artykuł na temat bezpieczeństwa przekaźników Tor, aby uzyskać więcej sugestii.

Świetnie. Właśnie dlatego stworzyliśmy politykę wyjścia (en: exit policies).

Każdy przekaźnik Tor posiada politykę wyjścia, która mówi jaki typ połączeń wyjściowych jest dozwolony lub nie, z tego konkretnego przekaźnika. Polityka wyjścia jest rozprzestrzeniana do klientów Tor poprzez folder, więc klient będzie automatycznie unikać wybierania węzłów wyjściowych, które odrzuciłyby ruch prowadzący do jego miejsca docelowego. Dzięki temu, każdy przekaźnik może zadecydować jakie połączenia do serwisów, hostów, oraz sieci są dozwolone, bazując na potencjalnych nadużyciach lub własnej sytuacji. Jeśli korzystasz z domyślnej polityki wychodzącej, przeczytaj naszą stronę o możliwych problemach, a następnie porady Mike'a Perry'ego na temat jak utrzymać węzeł wyjściowy przy minimalnym ryzyku.

Domyślna polityka wyjścia pozwala na dostęp do wielu popularnych serwisów (m.in. przeglądania sieci), lecz ogranicza niektóre serwisy ze względu na możliwości nadużyć (np. mail), oraz inne z powodu tego, że sieć Tor nie jest w stanie poradzić sobie z przepustowością (np. domyślne porty file-sharing). Możesz zmienić politykę wyjścia poprzez edycję pliku torrc. Jeśli chcesz uniknąć większości, o ile nie wszystkich potencjalnych nadużyć, dodaj "reject *:*". To ustawienie oznacza, że Twój przekaźnik będzie używany do przekazywania ruchu w sieci Tor, lecz nie do połączeń wychodzących do innych serwisów lub witryn zewnętrznych.

Jeśli pozwolisz wszystkim połączeniom wyjściowym, upewnij się że rozwiązywanie nazw działa poprawnie (tzn., twój komputer jest w stanie poprawnie rozwiązywać adresy Internetowe). Jeśli istnieją jakieś zasoby, z którymi twój komputer nie może się połączyć (na przykład, jesteś chroniony przez firewall lub filtr treści), wyraźnie je odrzuć w polityce wyjścia, inaczej użytkownicy Tora będą to odczuwać.

Szukamy ludzi z dość niezawodnym połączeniem Internetowym, które posiada co najmniej 10Mbit/s (Mbps) dostępnej przepustowości w obie strony. Jeśli ten opis pasuje do ciebie, możesz rozważyć prowadzenie przekaźnika Tor.

Nawet jeśli nie masz co najmniej 10 Mbit/s dostępnej przepustowości, nadal możesz pomóc sieci Tor poprzez uruchomienie mostu Tor wspierającego obfs4. W tym przypadku powinieneś mieć co najmniej 1 MBit/s dostępnej przepustowości.

Tor domyśla się swojego adresu IP poprzez odpytywanie komputera o jego nazwę hosta, a następnie rozwiązując tę nazwę. Często osoby posiadają stare rekordy w Ich pliku /etc/hosts, które prowadzą do starego adresu IP.

Jeśli to nie rozwiązuje problemu, powinieneś użyć opcji konfiguracyjnej „Address” aby sprecyzować adres IP który chcesz, aby miał Twój przekaźnik. Jeśli twój komputer znajduje się w sieci NAT i posiada jedynie wewnętrzny adres IP, sprawdź następujący wpis pomocy o dynamicznych adresach IP.

Jeśli posiadasz wiele adresów, możesz zechcieć ustawić "OutboundBindAddress", aby zewnętrzne połączenia wychodziły z adresu IP który zamierzałeś pokazać światu.

Tor częściowo obsługuje IPv6 i zalecamy, aby każdy operator hosta włączył funkcjonalność IPv6 w swoich plikach konfiguracyjnych torrc, jeśli łączność IPv6 jest dostępna. Na razie Tor wymaga adresów IPv4 dla przekaźników, nie możesz prowadzić przekaźnika Tor na maszynie z wyłącznie adresem IPv6.

Jeśli Twój przekaźnik jest relatywnie nowy, daj mu trochę czasu. Tor decyduje które przekaźniki są używane heurystycznie w oparciu o raporty z Władz ds. Przepustowości. Te władze wykonują pomiary przepustowości Twoich przekaźników, i po jakimś czasie kierują tam więcej ruchu, dopóki nie osiągną optymalnego obciążenia. Koło życia nowego przekaźnika jest dokładniej wyjaśnione w tym poście na naszym blogu. Jeśli prowadzisz przekaźnik przez dłuższą chwilę i ciągle masz problemy, spróbuj zapytać na liście przekaźników Tor.

Jeśli używasz Debiana lub Ubuntu, skorzystaj z repozytorium Tor Project, aby łatwo otrzymywać aktualizacje. Ponadto korzystanie z pakietu zapewnia inne udogodnienia:

  • Twój ulimit -n zostanie ustawiony na dużą liczbę, aby Tor mógł zachować otwarte wszystkie potrzebne połączenia.
  • Pakiet tworzy i używa oddzielnego użytkownika, więc nie trzeba uruchamiać Tora jako własnego użytkownika.
  • Dołączono skrypt inicjujący, dzięki czemu Tor zostaje uruchomiony podczas rozruchu systemu.
  • Tor może przypisać sobie niski port, a następnie pozbyć się przywilejów.

Możesz uruchomić przekaźnik w systemie Windows, postępując zgodnie z tymi samouczkami:

Powinieneś uruchamiać przekaźnik Windows tylko wtedy, gdy możesz go uruchomić 24/7. Jeśli nie możesz tego zagwarantować, Snowflake jest lepszym sposobem na udostępnienie swoich zasobów sieci Tor.

Przy wyszukiwaniu przekaźników wyświetlamy bursztynową kropkę obok pseudonimu przekaźnika, gdy jest on przeciążony. Oznacza to, że uruchomiona została jedna lub wiele z poniższych metryk obciążenia:

Należy pamiętać, że jeśli przekaźnik osiągnie stan przeciążenia, pokazujemy go przez 72 godziny po odzyskaniu przez niego sprawności.

Jeśli zauważysz, że przekaźnik jest przeciążony:

  1. Sprawdź stronę https://status.torproject.org/ pod kątem znanych błędów w kategorii „Sieć Tor”.

  2. Rozważ dostrojenie sysctl dla twojego systemu dla obciążenia sieci, pamięci i procesora.

  3. Rozważ włączenie MetricsPort, aby zrozumieć, co się dzieje.

Strojenie sysctl dla sieci, pamięci i obciążenia CPU

Wyczerpanie portu TCP

W przypadku wyczerpania portu TCP należy rozważyć rozszerzenie zakresu portów lokalnych. Można to zrobić z pomocą

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

albo

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

Należy pamiętać, że dostrojenie sysctl w opisany sposób nie jest trwałe i zostanie utracone po ponownym uruchomieniu. Musisz dodać konfigurację do /etc/sysctl.conf lub do pliku w /etc/sysctl.d/, aby uczynić ją trwałą.

MetricsPort

Aby zrozumieć stan węzła Tor i sieci Tor, niezbędne jest zapewnienie i dostęp do metryk węzła. Informacje o przeciążeniu przekaźnika zostały dodane do deskryptorów przekaźnika od wersji 0.4.6+, ale dopiero w Torze >= 0.4.7.1-alpha dostępny był interfejs do bazowych metryk przekaźnika: port metryk.

Włączenie MetricsPort

Tor zapewnia dostęp do portu metryk poprzez opcję konfiguracji torrc o nazwie MetricsPort.

Ważne jest, aby zrozumieć, że upublicznienie Tor MetricsPort jest niebezpieczne dla użytkowników sieci Tor, dlatego też port ten nie jest domyślnie włączony, a jego dostęp musi być regulowany przez politykę dostępu. Zachowaj szczególną ostrożność podczas otwierania tego portu i zamknij go po zakończeniu debugowania.

Załóżmy, że jesteś jedynym użytkownikiem na serwerze z węzłem Tor. Port metryk można włączyć, dodając go do pliku torrc:

MetricsPort 127.0.0.1:9035
MetricsPortPolicy accept 127.0.0.1

Dzięki temu będziesz mógł z łatwością pobierać metryki:

# curl https://127.0.0.1:9035/metrics

które domyślnie są w formacie Prometheus.

Uwaga: każdy użytkownik na tym serwerze będzie mógł uzyskać dostęp do tych metryk przekaźnika w powyższym przykładzie. Ogólnie rzecz biorąc, należy ustawić bardzo rygorystyczną politykę dostępu za pomocą MetricsPortPolicy i rozważyć użycie funkcji zapory systemu operacyjnego w celu zapewnienia głębokiej ochrony.

Więcej informacji na temat MetricsPort i MetricsPortPolicy można znaleźć na stronie man tor.

Dane wyjściowe MetricsPort

Oto przykład danych wyjściowych, które wygeneruje włączenie MetricsPort (pominęliśmy wszelkie metryki związane z kontrolą przeciążenia, ponieważ nadal musimy ustabilizować ten interfejs):

# 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

Dowiedzmy się, co tak naprawdę oznaczają niektóre z tych linii:

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

Kiedy przekaźnik zaczyna widzieć „spadki”, zazwyczaj jest to problem z CPU/RAM.

Tor, niestety, jest jednowątkowy, z wyjątkiem gdy przetwarzane są „cebulowe łuski”. „Onion skins” (skórki cebuli) to praca kryptograficzna, którą należy wykonać na słynnych „warstwach cebuli” w każdym obwodzie.

Kiedy Tor przetwarza warstwy, używamy puli wątków i zlecamy całą tę pracę do tej puli. Może się zdarzyć, że pula ta zacznie zawodzić z powodu obciążenia pamięci lub procesora, co spowoduje stan przeciążenia.

Jeśli serwer jest obciążony, prawdopodobnie zostanie to uruchomione.

tor_relay_exit_dns_error_total{...}

Każdy licznik w obszarze „*_dns_error_total” (poza licznikiem udanych zapytań) wskazuje na potencjalny problem związany z DNS. Jednak podczas cyklu wydawniczego wersji 0.4.7 zdaliśmy sobie sprawę, że błędy DNS są zbyt zaszumione i zawierają zbyt wiele fałszywych alarmów, aby były przydatne do celów raportowania przeciążenia. Dlatego nie używamy ich już do tego celu, począwszy od wersji 0.4.6.9 i 0.4.7.4-alpha. Nadal jednak utrzymujemy metryki DNS, aby dać operatorowi przekaźnika wgląd w to, co dzieje się z ich przekaźnikiem.

Problemy z limitem czasu DNS i błędy dotyczą tylko węzłów Exit.

tor_relay_load_oom_bytes_total{...}

Wywołanie Out-Of-Memory wskazuje na problem z pamięcią RAM. Przekaźnik może potrzebować więcej pamięci RAM lub ma wyciek pamięci. Jeśli zauważyłeś, że proces tor wycieka pamięć, zgłoś ten problem za pośrednictwem Tor gitLab lub wysyłając wiadomość e-mail na listę mailingową tor-relays.

Tor posiada własny program obsługi OOM, który jest uruchamiany po osiągnięciu 75% całkowitej pamięci, którą Tor uważa za dostępną. Zatem załóżmy, że Tor uważa, że może wykorzystać łącznie 2 GB, a gdy wykorzystanie pamięci wyniesie 1,5 GB, zacznie zwalniać pamięć. Jest to uważane za stan przeciążenia.

Aby oszacować ilość dostępnej pamięci, po uruchomieniu Tor użyje MaxMemInQueues lub, jeśli nie jest ustawiony, spojrzy na całkowitą pamięć RAM dostępną w systemie i zastosuje ten algorytm:

    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)

Aby uniknąć przeciążenia, zalecamy uruchomienie przekaźnika powyżej 2 GB pamięci RAM w wersji 64-bitowej. Zaleca się 4 GB, choć oczywiście nie zaszkodzi dodać więcej pamięci RAM, jeśli to możliwe. Uwaga: jeśli używasz wydajnego serwera z dużą ilością pamięci RAM, możesz skończyć w stanie przeciążenia z powodu domyślnego limitu rozmiaru kolejki 8 GB, mimo że nadal masz mnóstwo niewykorzystanej pamięci RAM. W takim przypadku dodaj odpowiedni wpis MaxMemInQueues do konfiguracji torrc.

Można zauważyć, że tor może być wywoływany przez samą obsługę OS OOM. Ponieważ tor zajmuje całkowitą ilość pamięci w systemie podczas uruchamiania, jeśli cały system ma wiele innych aplikacji korzystających z pamięci RAM, może to spowodować zajęcie zbyt dużej ilości pamięci. W takim przypadku system operacyjny może wywołać brak pamięci tor, nawet nie zauważając presji na pamięć.

tor_relay_load_socket_total

Jeśli liczba otwartych gniazd jest bliska lub taka sama jak całkowita liczba dostępnych gniazd, oznacza to, że przekaźnik jest na wyczerpaniu. Rozwiązaniem jest zwiększenie ulimit -n dla procesu tor.

tor_relay_load_tcp_exhaustion_total

Te linie wskazują, że przekaźnikowi kończą się porty TCP.

Spróbuj dostroić sysctl jak opisano powyżej.

tor_relay_load_global_rate_limit_reached_total

Jeśli licznik ten zwiększy się o zauważalną wartość w krótkim okresie czasu, przekaźnik jest przeciążony. Prawdopodobnie jest używany jako Strażnik przez dużą usługę cebulową lub do trwającego DDoS w sieci.

Jeśli przekaźnik jest nadal przeciążony i nie wiesz dlaczego, skontaktuj się z [email protected]. Wiadomości e-mail można szyfrować przy użyciu klucza network-report OpenPGP key.

Podczas ulepszania swojego przekaźnika Tor, lub podczas przenoszenia go na inny komputer, upewnij się o zatrzymaniu tych samych kluczy tożsamości (przechowywanych w keys/ed25519_master_id_secret_key orazkeys/secret_id_key w Twoim DataDirectory).

Jeśli jesteś operatorem mostu, pamiętaj również o zachowaniu pt_state/. Zawiera on dane wymagane do kontynuowania pracy z tą samą linią mostu.

Dla uproszczenia, zwykłe skopiowanie całego katalogu danych również powinna działać.

Możesz chcieć przechowywać kopie zapasowe tych kluczy tożsamości, a także pt_state dla mostu, aby móc przywrócić przekaźnik, jeśli coś pójdzie nie tak.

Domyślnie otwarte porty są wymienione poniżej, ale należy pamiętać, że dowolny port lub porty mogą zostać otwarte przez operatora przekaźnika poprzez konfigurację w torrc lub modyfikację kodu źródłowego. Domyślnie zgodnie z src/or/policies.c (linia 85 i linia 1901) z wydania kodu źródłowego 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 implementuje sześć mechanizmów do dystrybucji mostów: HTTPS, Moat, E-mail, Telegram, Settings i Reserved. Operatorzy mostów mogą sprawdzić, z jakiego mechanizmu korzysta ich most, na stronie Wyszukiwarka węzłów. Wprowadź <HASHED FINGERPRINT> mostu w formularzu i kliknij "„Szukaj”.

Operatorzy mogą również wybrać metodę dystrybucji, z której korzysta ich most. Aby zmienić metodę, należy zmodyfikować ustawienie BridgeDistribution w pliku torrc na jedno z poniższych: https, moat, email, telegram, settings, lox, none, any. Opis każdego dystrybutora można znaleźć w dokumentacji dystrybutorów rdsys.

Więcej informacji można znaleźć w przewodniku Bridges po instalacji.

  • Przekaźnik wyjściowy jest najbardziej potrzebnym typem przekaźnika, ale jego prowadzenie wiąże się z najwyższym ryzykiem i narażeniem na problemy z prawem (NIE powinieneś uruchamiać ich w swoim domu).
  • Jeśli chcesz prowadzić przekaźnik przy minimalnym wysiłku, szybkie przekaźniki ochronne (guard) są bardzo przydatne
  • A następnie mosty.

Chcemy aby proces tworzenia przekaźnika Tor był jak najprostszy i najwygodniejszy:

  • Przekaźnik może czasami być offline. Katalogi szybko to zauważają i przestają reklamować przekaźnik. Jednakże, postaraj się, aby nie było to za często, ponieważ połączenia używające Twojego przekaźnika zostaną przerwane.
  • Każdy przekaźnik Tor posiada politykę wyjścia, która mówi jaki typ połączeń wyjściowych jest dozwolony lub nie, z tego konkretnego przekaźnika. Jeśli nie czujesz się pewnie pozwalając osobom na połączenia wychodzące z twojego przekaźnika, możesz ustawić go jedynie dla połączeń z innymi przekaźnikami Tor.
  • Twój przekaźnik będzie pasywnie szacował i rozsyłał swoją ostatnią przepustowość, aby przekaźniki wysoko-przepustowe przyciągały więcej użytkowników, aniżeli nisko-przepustowe. Dlatego posiadanie nisko-przepustowych przekaźników jest również przydatne.

Dlaczego Obciążenie Przekaźnika Jest Zmienne

Tor zarządza przepustowością całej sieci. Wykonuje rozsądną pracę dla większości przekaźników. Lecz cele Tora są inne niż cele protokołów takich jak BitTorrent. Tor chce strony internetowe z możliwie najmniejszym opóźnieniem, co wymaga szybkich połączeń z zapasem. BitTorrent celuje w masowe pobieranie, które wymaga całej dostępnej przepustowości.

Pracujemy nad nowym skanerem przepustowości, który jest prostszy w zrozumieniu i utrzymaniu. Będzie posiadał dane diagnostyczne dla przekaźników, które nie są mierzone, oraz przekaźników, które mają niskie pomiary.

Dlaczego Tor potrzebuje skanerów przepustowości?

Większość dostawców informuje Cię o maksymalnej szybkości Twojego połączenia lokalnego. Lecz Tor ma użytkowników ma całym świecie, którzy łączą się do jednego losowego lub dwóch losowych przekaźników Guard. Więc musimy wiedzieć jak dobrze każdy przekaźnik radzi sobie z łączeniem się z całym światem.

W związku z tym, nawet gdyby wszyscy operatorzy przekaźnikowi ustawili swoją deklarowaną przepustowość na poziomie prędkości połączenia lokalnego, nadal potrzebowalibyśmy uprawnień do przepustowości, aby zrównoważyć obciążenie między różnymi częściami Internetu.

Jakie jest normalne obciążenie przekaźnika?

Dla większości przekaźników, obciążenie wynosi 30%-80% ich możliwości. Jest to dobre dla klientów: przeciążony przekaźnik ma duże opóźnienia. (Chcemy wystarczającej ilości przekaźników, aby każdy z nich był obciążony w 10%. Dzięki temu Tor będzie prawie tak szybki, jak szerszy Internet).

Czasami, przekaźnik jest wolny z powodu wolnego procesora, lub limitu połączeń. W innych przypadkach, powodem jest wolna sieć: przekaźnik ma złe połączenie z większością innych przekaźników tor, lub jest w dużej odległości.

Dowiedz Się co Spowalnia Przekaźnik

Wiele czynników może spowolnić przekaźnik. Oto jak możesz je namierzyć.

Ograniczenia Systemowe

  • Sprawdź RAM, CPU, i zużycie deskryptora gniazda/pliku na Twoim przekaźniku

Tor zapisuje w dzienniku zdarzeń niektóre z tych parametrów podczas uruchamiania. Pozostałe można sprawdzić używając narzędzia top lub podobnych.

Ograniczenia Dostawcy

  • Sprawdź połączenie Internetowe (przepustowość, opóźnienia) z Twojego dostawcy przekaźnika do innych przekaźników. Przekaźniki transmitujące przez Comcast bywają czasami powolne. Przekaźniki poza Ameryką Północną i Zachodnią Europą są przeważnie wolniejsze.

Ograniczenia Sieci Tor

Przepustowość przekaźnika może być ograniczona przez własną zaobserwowaną przepustowość, lub przez przepustowość zmierzoną przez władze katalogów. W ten sposób możesz sprawdzić jaki pomiar ogranicza Twój przekaźnik:

  • Sprawdź każdy z głosów dla Twojego przekaźnika na consensus-health (duża strona), i sprawdź medianę. Jeśli Twój przekaźnik nie jest oznaczony jako Pracujący (Running) przez niektóre władze katalogowe:
    • Czy ma błędny adres IPv4 lub IPv6?
    • Czy adres IPv4 lub IPv6 jest nieosiągalny z niektórych sieci?
    • Czy są więcej niż 2 przekaźniki na tym samym adresie IPv4?

W innym wypadku, sprawdź zaobserwowaną przepustowość Twojego przekaźnika oraz przepustowość (limit). Sprawdź swój przekaźnik na stronie Metryk. Następnie najedź myszą na nagłówek przepustowości aby sprawdzić zaobserwowaną przepustowość oraz przepustowość przekaźnika.

Tutaj możesz sprawdzić więcej detali i kilka przykładów: Spadek wagi konsensusu oraz Zwiększ szybkość przekaźnika Wyjściowego.

Jak to naprawić

Najmniejsza z tych liczb to ograniczenie przepustowości przydzielonej przekaźnikowi.

  • Jeśli jest to przepustowość, zwiększ BandwidthRate/Burst lub RelayBandwidthRate/Burst w pliku torrc.
  • Jeśli jest to zaobserwowana przepustowość, Twój przekaźnik nie pyta o więcej przepustowości, dopóki nie zaobserwuje, że staje się szybszy. Musisz się dowiedzieć czemu jest powolny.
  • Jeśli jest to mediana zmierzonej przepustowości, Twój przekaźnik wygląda na wolny z punktu widzenia większości władz ds. przepustowości. Musisz się dowiedzieć czemu pomiar jest wolny.

Prowadzenie Własnych Pomiarów Przekaźnika

Jeśli węzeł uważa, że działa wolno lub serwery sterujące uważają, że działa wolno, można samodzielnie sprawdzić przepustowość:

  • Przeprowadź test przy użyciu tor by sprawdzić prędkość tor na twojej sieci

    W tym celu należy skonfigurować klienta tor, aby używał przekaźnika jako wejścia. Jeśli przekaźnik ma tylko flagę Guard, ustaw EntryNodes z odciskiem palca przekaźnika w torrc. Jeśli przekaźnik nie posiada flagi Guard lub posiada flagi Guard i Exit, nie można ustawić przekaźnika jako węzła wejściowego (patrz: https://gitlab.torproject.org/tpo/core/tor/-/issues/22204), ale można ustawić go jako mostek, nawet jeśli nie jest mostem. Aby skonfigurować przekaźnik jako most, dodaj do torrc:

    Bridge <ip>:<port>
    UseBridge 1
    

    Następnie pobierz duży plik używając swojego SocksPort jako socks proxy. W tym celu możesz użyc curl, na przykład:

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

    Używanie różnych user/password gwarantuje różne schematy. Można użyć $RANDOM.

    Pozwoli to zorientować się, jak duży ruch może obsłużyć przekaźnik.

    Alternatywnie można uruchomić relay_bw, aby przetestować repeater przy użyciu 2 wzorców przejścia, podobnie jak robi to sbws.

  • Przeprowadź test używając tor oraz chutney, aby dowiedzieć się jak szybko tor może dostać się do Twojego CPU. Kontynuuj zwiększanie ilości danych, aż przepustowość przestanie rosnąć.

Tak, zyskujesz wyższy poziom anonimowości przeciwko niektórym atakom.

Najprostszym przykładem jest napastnik, który posiada małą ilość przekaźników Tor. Będą w stanie zobaczyć połączenie wychodzące od Ciebie, lecz nie będą mogli ocenić czy połączenie wychodzi z Twojego komputera, czy zostało przekazane od kogoś innego.

Jest kilka przypadków, w których to nie pomaga: jeśli napastnik może podglądać cały twój przychodzący i wychodzący ruch, będzie w stanie zidentyfikować, które połączenia są przekazywane, a które wychodzą bezpośrednio od Ciebie. (W tym przypadku nadal nie znają twojego miejsca docelowego, pod warunkiem, że jego też nie obserwują, lecz nie jest gorzej niż w przypadku gdybyś był przeciętnym klientem.)

Jest kilka negatywów wynikających z prowadzenia przekaźnika Tor. Po pierwsze, jeśli mamy kilkaset przekaźników, fakt, że jeden należy do Ciebie, może zasygnalizować napastnikowi, że anonimowość jest dla Ciebie bardzo ważna. Po drugie, jest kilka wyszukanych ataków, które nie są tak dobrze zrozumiałe lub przetestowane, i wykorzystują fakt, że prowadzisz przekaźnik -- na przykład, napastnik może być w stanie "obserwować" ruch który wysyłasz, nawet jeśli nie jest w stanie monitorować twojej sieci, poprzez przekazywanie ruchu z twojego przekaźnika Tor i porównywaniu zmian w czasie dostarczenia ruchu.

Jest to otwarte pytanie, czy korzyści przeważają nad ryzykiem. Wiele zależy od typów ataków, które Cię najbardziej niepokoją. Dla większości użytkowników, to mądre posunięcie.

Sprawdź portforward.com, aby dowiedzieć się jak przekierować port na twoim urządzeniu NAT/router.

Jeśli twój przekaźnik jest uruchomiony w sieci wewnętrznej, będziesz musiał ustawić przekierowywanie portu. Przekazywanie połączeń TCP zależy od systemu, ale wpis firewalled-clients FAQ zawiera kilka przykładów, jak to zrobić.

Tutaj jest przykład jak mógłbyś to zrobić na systemie GNU/Linux, pod warunkiem że używasz iptables:

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

Możliwe, że będziesz musiał zmienić "eth0" jeśli używasz innego interfejsu zewnętrznego (tego co łączy się z Internetem). Jest wysokie prawdopodobieństwo że posiadasz jedynie jeden (z wyjątkiem interfejsu loopback), więc nie powinno to być trudne do sprawdzenia.

Opcje księgowe (en: accounting) w pliku torrc pozwalają na sprecyzowanie maksymalnej ilości bajtów, które twój przekaźnik może wykorzystać w danym okresie.

    AccountingStart day week month [day] HH:MM

Określa to po jakim okresie księgowość powinna zostać zrestartowana, Na przykład, aby ustalić maksymalną ilość bajtów na tydzień (resetowanie następuje w każdą Środę o 10:00 rano), użyjesz:

    AccountingStart week 3 10:00
    AccountingMax 500 GBytes

Określa to maksymalną ilość danych jaką Twój przekaźnik będzie mógł przesłać w okresie księgowania, oraz maksymalną ilość danych jaką Twój przekaźnik będzie mógł odebrać podczas okresu księgowania. Gdy okres księgowania się resetuje (opcja AccountingStart), liczniki AccountingMax są ustawiane na 0.

Przykład: Załóżmy, że chcesz zezwolić na wykorzystanie 50 GB danych każdego dnia w obie strony, a okres księgowania powinien resetować się w południe każdego dnia:

    AccountingStart day 12:00
    AccountingMax 50 GBytes

Zauważ, że Twój przekaźnik nie będzie wstawał dokładnie na początku każdego okresu księgowania. Przekaźnik będzie monitorował jak szybko zużył swój limit w ostatnim okresie, aby wstać, wybierze losowy moment w nowym interwale. Dzięki temu, jesteśmy w stanie uniknąć posiadania setek przekaźników działających na początku każdego miesiąca, i żadnego pod jego koniec.

Jeśli posiadasz jedynie małą ilość przepustowości w porównaniu do swojej szybkości połączenia, którą chcesz przekazać, zalecamy używania dziennego okresu księgowania, tak, aby nie zużyć miesięcznego limitu w ciągu jednego dnia. Podziel swój miesięczny limit przez 30. Możesz również wziąć pod uwagę limitację szybkości, tak aby przekaźnik był przydatny przez dłuższą część dnia: jeśli chcesz oferować X GB w obie strony, mógłbyś ustawić wartość RelayBandwidthRate na 20*X KBajtów. Na przykład, jeśli chcesz oferować 50 GB w obie strony, możesz ustawić wartość RelayBandwidthRate na 1000 KBajtów: w ten sposób Twój przekaźnik zawsze będzie przydatny, przynajmniej przez połowę każdego dnia.

    AccountingStart day 0:00
    AccountingMax 50 GBytes
    RelayBandwidthRate 1000 KBytes
    RelayBandwidthBurst 5000 KBytes # pozwól na wyższe prędkości, lecz zachowaj średnią

Masz rację, przez większość czasu bajt wchodzący do Twojego przekaźnika Tor, oznacza, że bajt z niego wyjdzie, i na odwrót. Lecz jest kilka wyjątków:

Jeśli otworzysz swój DirPort, użytkownicy Tora zaczną Cię odpytywać o kopię tego katalogu. Żądanie które do Ciebie wysyłają (HTTP GET) jest małe, lecz odpowiedź może być ogromna. To prawdopodobnie jest powodem znacznej różnicy pomiędzy liczbą Twoich "pisanych" bajtów, a liczbą "odczytanych" bajtów.

Kolejny mały wyjątek pojawia się gdy operujesz węzłem wyjściowym, i odczytujesz kilka bajtów z połączenia wychodzącego (na przykład, komunikator tekstowy lub połączenie ssh) i zaokrąglasz to do całkowitej 512 bajtowej komórki do przesłania przez sieć Tor.

Parametry przypisane w AccountingMax oraz BandwidthRate dotyczą zarówno klienta jak i funkcji przekaźnika Tor. Dlatego też może się okazać, że nie jesteś w stanie przeglądać sieci jak tylko Tor przejdzie w stan hibernacji, zostanie to zasygnalizowane takim wpisem w dzienniku zdarzeń:

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

Rozwiązaniem tego problemu jest uruchomienie dwóch procesów Tora - jeden przekaźnik oraz jeden klient, każdy z osobną konfiguracją. Jednym sposobem aby to osiągnąć, (jeśli zaczynasz od już pracującego przekaźnika) jest:

  • W pliku torrc przekaźnika Tor, ustaw wartość SocksPort na 0.
  • Z pliku torrc.sample stwórz nowy plik torrc dla klienta i upewnij się, że używa oddzielnego pliku dziennika zdarzeń. Możesz je nazwać jako torrc.client oraz torrc.relay (odpowiednio klient oraz przekaźnik).
  • Zmodyfikuj klienta Tor oraz skrypt startowy przekaźnika, tak aby zawierały -f /ścieżka/do/prawidłowego/torrc.
  • W systemie Linux/BSD/Mac OS X, zmienienie skryptu startowego na Tor.client and Tor.relay może uczynić rozróżnienie konfiguracji znacznie prostszym.

W najprostszych słowach, działają tak:

  • Jest główny plik sekretnego klucza ed25519 nazwany "ed25519_master_id_secret_key". Jest on najważniejszy, więc upewnij się, że masz jego kopię w bezpiecznym miejscu - plik jest wrażliwy i powinien być chroniony. Tor jest w stanie zaszyfrować go za Ciebie, jeśli wygenerujesz go manualnie i wpiszesz hasło, kiedy zostaniesz poproszony.
  • Średnioterminowy klucz podpisujący nazwany "ed25519_signing_secret_key" jest wygenerowany do użytku przez Tora. Również zostaje wygenerowany certyfikat nazwany "ed25519_signing_cert", który jest podpisany przez główny plik sekretnego klucza tożsamości, i potwierdza, że ten średnioterminowy klucz podpisujący jest prawidłowy przez pewien okres czasu. Domyślnym okresem ważności jest 30 dni, ale może to być zmienione poprzez ustawienie wartości "SigningKeyLifetime N dni|tygodni|miesięcy" w torrc.
  • Istnieje również główny klucz publiczny o nazwie „ed25519_master_id_public_key”, który jest faktyczną tożsamością przekaźnika zadeklarowanego w sieci. Ten nie jest wrażliwy i może być stworzony na podstawie "ed5519_master_id_secret_key".

Tor potrzebuje jedynie dostępu do średnioterminowego klucza podpisującego oraz certyfikatu, dopóki są one prawidłowe, dlatego główny sekretny klucz tożsamości może być trzymany poza folderem DataDirectory/keys, na nośniku danych lub innym komputerze. Będziesz musiał ręcznie odnowić średnioterminowy klucz podpisujący oraz certyfikat zanim wygasną, w przeciwnym raze proces Tora na przekaźniku zostanie zakończony po wygaśnięciu.

Ta funkcja jest opcjonalna, nie musisz jej używać, chyba że chcesz. Jeśli chcesz, aby twój przekaźnik mógł działać przez dłuższy czas bez opieki, bez potrzeby ręcznego odnawiania średnioterminowego klucza podpisującego, najlepszym rozwiązaniem jest zostawienie głównego sekretnego klucza tożsamości w DataDirectory/keys oraz zrobienie kopii na wypadek potrzeby przeinstalowania. Jeśli chcesz używać tej funkcji, możesz sprawdzić nasz bardziej szczegółowy poradnik na ten temat.

Ponieważ jest teraz strażnikiem, klienci używają go mniej na innych stanowiskach, i niewiele klientów wymieniło ich aktualnych strażników, aby używać Twojego przekaźnika jako strażnika. Przeczytaj więcej szczegółów w poście na naszym blogu lub w dokumencie Changing of the Guards: A Framework for Understanding and Improving Entry Guard Selection in Tor.

Gdy węzeł wyjściowy jest błędnie lub złośliwie skonfigurowany, przypisuje mu się flagę BadExit. Ma to na celu informowanie Tora, by unikał połączeń wychodzących z tego przekaźnika. Przez co przekaźniki z tą flagą przestają istnieć. Jeśli zostałeś oznaczony tą flagą, oznacza to, że wykryliśmy problem lub podejrzaną aktywność podczas trasowania ruchu przez Twój przekaźnik wyjściowy i nie byliśmy w stanie się z Tobą skontaktować. Odezwij się do zespołu bad-relays, abyśmy mogli rozwiązać ten problem.

Wszystkie połączenia wychodzące muszą być dozwolone, aby każdy przekaźnik mógł się komunikować z innymi przekaźnikami.

W wielu jurysdykcjach, operatorzy przekaźników Tor są pod ochroną tego samego prawa, co dostawcy usług sieciowych (ISP), które zrzuca odpowiedzialność z operatorów, za treści osób trzecich, które przechodzą przez ich sieć. Przekaźniki wyjściowe, które filtrują niektóry ruch, prawdopodobnie utracą tę ochronę.

Tor promuje darmowy dostęp do sieci bez jakiejkolwiek ingerencji. Przekaźniki wyjściowe nie mogą filtrować ruchu Internetowego, którzy przez nie przechodzi. Gdy okaże się, że jakiś przekaźnik wyjściowy filtruje ruch, zostanie oznaczony flagą BadExit.

Świetnie. Jeśli chcesz prowadzić kilka przekaźników, w celu przekazania większej przepustowości do sieci, jesteśmy z tego zadowoleni. Lecz nie uruchamiaj więcej niż kilkadziesiąt w tej samej sieci, ponieważ częścią celu sieci Tor jest rozproszenie i różnorodność.

Jeśli zdecydujesz się na prowadzenie więcej niż jednego przekaźnika, ustaw opcję "MyFamily" w pliku torrc dla każdego przekaźnika, wypisując wszystkie przekaźniki (oddzielone przecinkiem), które kontrolujesz:

MyFamily $fingerprint1,$fingerprint2,$fingerprint3

każdy fingerprint jest 40-znakowym identyfikatorem "odcisku palca" (bez przerw).

Dzięki temu, klient Tor będzie wiedział, żeby unikać używania więcej niż jednego przekaźnika w pojedynczym obwodzie. Powinieneś ustawić opcję MyFamily jeśli posiadasz kontrolę administracyjną nad komputerami w ich sieci, nawet jeśli nie są w tej samej lokalizacji geograficznej.

Są dwie opcje które możesz dodać do swojego pliku torrc:

BandwidthRate jest maksymalną, długoterminową dopuszczalną przepustowością (bajty na sekundę). Na przykład, możesz chcieć ustalić "BandwidthRate 10 MBytes" dla 10 megabajtów na sekundę (szybkie połączenie), lub "BandwidthRate 500 KBytes" dla 500 kilobajtów na sekundę (średniej jakości połączenie kablowe). Minimalnym dopuszczalnym ustawieniem BandwidthRate jest 75 kilobajtów na sekundę.

BandwidthBurst jest pulą bajtów użytych do realizacji żądań w krótkich okresach czasu ponad BandwidthRate, ale nadal utrzymując średnią w dłuższym okresie czasu BandwidthRate. Niski Rate, ale wysoki Burst wymusza utrzymanie długoterminowej średniej, w międzyczasie pozwalając na większy ruch podczas godzin szczytu, pod warunkiem, że średnia nie została osiągnięta. Na przykład, jeśli ustawisz "BandwidthBurst 500 KBytes" i zarówno użyjesz tego dla BandwidthRate, połączenie nigdy nie przekroczy szybkości 500 kilobajtów na sekundę; lecz jeśli ustawisz wyższy BandwidthBurst (np. 5 MBytes), pozwoli to na przesłanie większej ilości bajtów, dopóki pula nie zostanie wyczerpana.

Jeśli masz asymetryczne połączenie (wysyłanie jest wolniejsze inż pobieranie), jak np. w modemach kablowych, powinieneś ustawić BandwidthRate niżej niż Twoja najniższa przepustowość (Zazwyczaj jest to przepustowość wysyłania). W przeciwnym razie, może się zdarzyć tak, że będziesz odrzucał dużo pakietów podczas okresu maksymalnego wykorzystania przepustowości - możesz eksperymentować z wartościami, które będą komfortowe dla twojego połączenia. Wtedy ustaw BandwidthBurst taki sam jak BandwidthRate.

Węzły Tor oparte na systemach Linux mają inne opcje do wykorzystania: mogą priorytetyzować ruch Tora niżej niż inny ruch na ich maszynie, przez co ruch Tora nie wpływa na ich prywatny ruch. Skrypt aby tego dokonać może zostać znaleziony w folderze contrib dystrybucji kodu źródłowego Tor.

Ponadto istnieją opcje hibernacji, w których można powiedzieć Torowi, aby obsługiwał tylko określoną przepustowość w danym okresie czasu (np. 100 GB miesięcznie). Są one omówione we wpisie hibernacja.

Zwróć uwagę, że BandwidthRate oraz BandwidthBurst są zapisane w Bajtach, nie Bitach.