Relay-Betreiber

  • Benutze keine Pakete in Ubuntu-Quellen. Diese werden nicht verlässlich aktualisiert. Wenn du sie benutzt, wirst du wichtige Stabilitäts- und Sicherheits-Fehlerkorrekturen verpassen.
  • Ermittle deine Ubuntu-Version mit folgendem Befehl:
     ‪$ lsb_release -c
    
  • Füge als root die folgenden Zeilen zu /etc/apt/sources.list hinzu. Ersetze „Version“ durch die Version, die du im vorherigen Schritt gefunden hast:
     deb https://deb.torproject.org/torproject.org version main
     deb-src https://deb.torproject.org/torproject.org version main
    
  • Füge den GPG-Schlüssel, der zum Signieren des Pakets verwendet wurde, mit folgendem Befehl hinzu:
     ‪$ curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | sudo apt-key add -
    
  • Führe folgenden Befehl aus, um Tor zu installieren und die Signaturen zu überprüfen:
     ‪$ sudo apt-get update
     ‪$ sudo apt-get install tor deb.torproject.org-keyring
    

Tor kann Relays mit dynamischer IP-Adresse gut einbinden. Lass’ die „Adress“-Zeile in deiner torrc-Datei einfach frei und Tor wird sie erraten.

Nein. Wenn sich Strafverfolgungsbehörden für Verbindungen von einem Austrittsknoten interessieren, kann es vorkommen, dass der Computer beschlagnahmt wird. Aus diesem Grund ist es nicht zu empfehlen, einen Austritts-Knoten von zu Hause zu betreiben.

Verwende für einen Ausgangs-Knoten stattdessen eine kommerzielle Einrichtung, die Tor unterstützt. Benutze eine eigene IP-Adresse für jeden Austrittsknoten und benutze ihn nicht für eigene Verbindungen. Selbstverständlich solltest du es vermeiden, sensible persönliche Informationen auf dem Computer des Ausgangs-Relays zu speichern.

Hier sind ein paar Tipps, falls dein Tor-Relay zu viel Arbeitsspeicher verbraucht:

  • Wenn du unter Linux arbeitest, wirst du möglicherweise auf Speicherfragmentierungsfehler in der malloc-Implementierung der glibc stoßen. Das heißt, wenn Tor Speicher an das System zurückgibt, werden die Speicherstücke fragmentiert, so dass sie schwer wiederzuverwenden sind. Tarball von Tor wird mit der malloc-Implementierung von OpenBSD ausgeliefert, die nicht so viele Fragmentierungsfehler hat (aber der Kompromiss ist eine höhere CPU-Last). Du kannst Tor anweisen, stattdessen diese malloc-Implementierung zu verwenden: ./configure --enable-openbsd-malloc.
  • Wenn du ein schnelles Relay betreibst, was bedeutet, dass du viele TLS-Verbindungen offen hast, verlierst du wahrscheinlich eine Menge Arbeitsspeicher an interne Puffer von OpenSSL (38+ KB pro Socket). Wir haben OpenSSL gepatcht, um unbenutzten Pufferspeicher verstärkt freizugeben. Wenn du auf OpenSSL 1.0.0 oder neuer aktualisierst, wird Tors Erstellungsprozess diese Funktion automatisch erkennen und nutzen.
  • Wenn du die Speicherlast immer noch nicht bewältigen kannst, ziehe in Betracht, die von deinem Relay angebotene Bandbreite zu reduzieren. Weniger Bandbreite anzubieten bedeutet, dass du weniger Benutzer anziehen wirst, so dass dein Relay nicht so groß werden sollte. Siehe die Option MaxAdvertisedBandwidth in der Handbuchseite.

Abgesehen davon verbrauchen schnelle Tor-Relays sehr viel RAM. Es ist nicht ungewöhnlich, dass ein schnelles Ausgangs-Relay 500 – 1000 MB Arbeitsspeicher verbraucht.

Wenn du Exit-Verbindungen zulässt, werden einige Dienste, mit denen sich Personen von deinem Relay aus verbinden, eine Rückverbindung herstellen, um weitere Informationen über dich zu sammeln. Beispielsweise stellen einige IRC-Server eine Rückverbindung zu deinem identd-Anschluss her, um aufzuzeichnen, welcher Benutzer die Verbindung hergestellt hat. (Das funktioniert bei ihnen nicht wirklich, da Tor diese Informationen nicht kennt, aber sie versuchen es trotzdem). Außerdem könnten Benutzer, die von dir ausgehen, die Aufmerksamkeit anderer Benutzer auf dem IRC-Server, der Website usw. erregen, die mehr über den Host wissen wollen, über den sie die Verbindung weiterleiten.

Ein weiterer Grund ist, dass Gruppen, die im Internet nach offenen Proxys suchen, gelernt haben, dass manchmal Tor-Relays ihren Socks-Anschluss der Welt preisgeben. Wir empfehlen dir, deinen Socks-Anschluss nur an lokale Netzwerke zu binden.

In jedem Fall musst du über deine Sicherheit auf dem Laufenden bleiben. Siehe diesen Artikel über Sicherheit für Tor-Relays für weitere Vorschläge.

Großartig. Genau deshalb haben wir Ausgangsrichtlinien eingebaut.

Jedes Tor-Relay hat eine Ausgangsrichtlinie, die festlegt, welche Art von ausgehenden Verbindungen zugelassen oder abgelehnt werden. Über das Verzeichnis sieht Tor die Ausgangsrichtlinien der Relays und sorgt so dafür, dass die Clients keine Ausgangsrelays wählen, welche die Verbindung zu ihrem Ziel verhindern würden. Dadurch kann jedes Relay entscheiden, mit welchen Diensten, Hosts und Netzwerken es sich verbinden will, basierend auf dem Missbrauchspotenzial und seiner eigenen Situation. Lies den Support-Eintrag zu Problemen, auf die du stoßen könntest, wenn du die standardmäßige Ausgangsrichtlinie verwendest, und lies dann Mike Perrys Tipps zum Betrieb eines Ausgangsknotens mit minimaler Belästigung.

Die standardmäßigen Ausgangsrichtlinien (z.B. Internetsurfen) erlauben den Zugriff auf viele bekannte Dienste, aber unterbinden manche wegen Missbrauchspotenzial (z.B. E-Mail) und manche, weil das Tor-Netzwerk die Bandbreite nicht verarbeiten kann (z.B. Dateisharing). Du kannst deine Ausgangsrichtlinien in deiner torrc-Datei festlegen. Wenn du das meiste, wenn nicht sogar das ganze, Missbrauchspotenzial vermeiden möchtest, dann setze „reject *:*“. Diese Einstellung bedeutet, dass dein Relay für die Übermittlung von Datenverkehr innerhalb des Tor-Netzwerkes verwendet wird, aber nicht für Verbindungen zu externen Websiten oder anderen Diensten.

Wenn du alle ausgehenden Verbindungen erlaubst, stelle sicher, dass die Namensauflösung funktioniert. Wenn dein Computer irgendwelche Ressourcen nicht erreichen kann (bspw. weil er sich hinter einer Firewall oder einem Inhaltsfilter befindet), solltest du diese explizit in deinen Ausgangsrichtlinien verbieten, da sonst auch andere Tor-Nutzer betroffen sind.

Wir suchen Personen mit einigermaßen zuverlässigen Internetverbindungen, die über eine verfügbare Bandbreite von mindestens 10 Mbit/s (Mbps) in jeder Richtung verfügen. Wenn das auf dich zutrifft, ziehe bitte in Betracht, ein Tor-Relay zu betreiben.

Selbst wenn du nicht mindestens 10 Mbit/s an verfügbarer Bandbreite hast, kannst du dem Tor-Netzwerk helfen, indem du eine Tor-Brücke mit obfs4-Unterstützung betreibst. In diesem Fall solltest du mindestens 1 MBit/s an verfügbarer Bandbreite haben.

Tor errät seine IP-Adresse, indem es den Computer nach seinem Hostnamen fragt und dann diesen Hostnamen auflöst. Oft haben Leute alte Einträge in ihrer /etc/hosts-Datei, die auf alte IP-Adressen zeigen.

Wenn das nicht hilft, solltest du die Konfigurationsoption „Adresse“ verwenden, um die IP-Adresse anzugeben, die ausgewählt werden soll. Wenn sich dein Computer hinter einem NAT befindet und nur eine interne IP-Adresse hat, siehe den folgenden Support-Eintrag zu dynamischen IP-Adressen.

Außerdem, wenn du viele Adressen hast, möchtest du vielleicht auch „OutboundBindAddress“ so einstellen, dass externe Verbindungen von der IP kommen, die du der Welt präsentieren willst.

Tor bietet teilweise Unterstützung für IPv6 und wir ermutigen jeden Serverbetreiber, IPv6-Funktionalität in seinen torrc Konfigurationsdateien zu aktivieren, wenn IPv6-Konnektivität verfügbar ist. Momentan setzt Tor IPv4-Adressen auf den Relays voraus. Es ist nicht möglich, ein Tor-Relay auf einem Server nur mit IPv6-Adressen zu betreiben.

Wenn dein Relay neu ist gib ihm ein bisschen Zeit. Tor entscheidet anhand von Berichten von Bandbreiten-Autoritäten heuristisch, welche Relays es benutzt. Diese Autoritäten messen die Kapazität deines Relays und leiten mit der Zeit mehr Verkehr dorthin, bis es eine optimale Auslastung erreicht hat. Der Lebenszyklus eines neuen Relays wird in diesem Blogeintrag ausführlicher erläutert. Wenn du schon eine Weile ein Relay betreibst und immer noch Probleme hast, dann versuche auf der Tor-Relay-Liste nachzufragen.

Wenn du Debian oder Ubuntu verwendest, verwende bitte das Tor-Projekt-Repository, damit du einfach Updates erhalten kannst. Darüber hinaus bietet die Nutzung des Pakets weitere Annehmlichkeiten:

  • Dein ulimit -n wird auf einen hohen Wert gesetzt. Das sollte genügen, um alle Verbindungen offenzuhalten, die Tor verwendet.
  • Das Paket erstellt und benutzt einen separaten Benutzer, sodass du Tor nicht mit deinem eigenen Benutzer ausführen musst.
  • Das Paket enthält ein Init-Skript, damit Tor beim Hochfahren läuft.
  • Tor kann sich an niedrigzahlige Anschlüsse binden und dann Privilegien ablegen.

Du kannst ein Relay unter Windows mit Hilfe dieser Tutorials starten:

Du solltest nur dann ein Windows-Relay betreiben, wenn du es rund um die Uhr betreiben kannst. Wenn du das nicht garantieren kannst, ist Snowflake ein besserer Weg, um deine Ressourcen zum Tor-Netzwerk beizutragen.

Bei der Relay-Suche zeigen wir einen gelben Punkt neben dem Relay-Spitznamen an, wenn dieser überlastet ist. Dies bedeutet, dass eine oder mehrere der folgenden Lastkennzahlen ausgelöst wurden:

Wenn ein Relay einen überlasteten Zustand erreicht, zeigen wir dies 72 Stunden lang an, nachdem sich das Relay erholt hat.

Wenn du feststellst, dass dein Relay überlastet ist, bitte:

  1. Überprüfe https://status.torproject.org/ auf alle bekannten Probleme in der Kategorie "Tor-Netzwerk".

  2. Erwäge Tuning sysctl für dein System für Netzwerk, Speicher und CPU-Last.

  3. Ziehe in Erwägung, MetricsPort zu aktivieren, um zu verstehen, was vor sich geht.

sysctl für dein System auf Netzwerk-, Speicher- und CPU-Last einstellen

TCP-Port-Ausschöpfung

Wenn die TCP-Ports ausgeschöpft sind, solltest du deinen lokalen Portbereich erweitern. Das kannst du tun mit

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

oder

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

Denk dran, dass die Einstellung von sysctl wie beschrieben nicht dauerhaft ist und bei einem Neustart verlorengeht. Du musst die Konfiguration zu /etc/sysctl.conf oder zu einer Datei in /etc/sysctl.d/ hinzufügen, um sie dauerhaft zu machen.

MetricsPort

Um das Wohlergehen der Tor-Relays und des Tor-Netzwerks zu verstehen, ist es wichtig, Metriken der Relays bereitzustellen und Zugriff darauf zu haben. Relay-Überlastungsinformationen wurden seit 0.4.6+ zu den Deskriptoren hinzugefügt, aber erst ab Tor >= 0.4.7.1-alpha war eine Schnittstelle zu den zugrundeliegenden Relay-Metriken verfügbar: der Metrik-Port.

Aktivieren von MetricsPort

Tor bietet den Zugang zum Metrics-Port über eine torrc-Konfigurationsoption namens MetricsPort.

Es ist wichtig zu verstehen, dass die Veröffentlichung des Tor-MetricsPort für die Nutzer des Tor-Netzwerks gefährlich ist, weshalb dieser Port nicht standardmäßig aktiviert ist und sein Zugriff durch eine Zugriffsrichtlinie geregelt werden muss. Bitte sei besonders vorsichtig, wenn du diesen Port öffnest, und schließe ihn, wenn du mit der Fehlersuche fertig bist.

Nehmen wir an, du bist der einzige Benutzer auf einem Server, der ein Tor-Relay betreibt. Du kannst den Metrics-Port aktivieren, indem du dies in deine torrc-Datei einträgst:

MetricsPort 127.0.0.1:9035
MetricsPortPolicy accept 127.0.0.1

Und dann kannst du die Metriken leicht abrufen mit:

# curl https://127.0.0.1:9035/metrics

welche standardmäßig in einem Prometheus-Format vorliegen.

Hinweis: Jeder Benutzer auf diesem Server kann auf diese Relay-Metriken im obigen Beispiel zugreifen. Lege generell eine sehr strenge Zugriffsrichtlinie mit MetricsPortPolicy fest und erwäge die Verwendung der Firewall-Funktionen deines Betriebssystems für eine umfassende Verteidigung.

Für eine detailliertere Erklärung von MetricsPort und MetricsPortPolicy siehe die man page von Tor.

MetricsPort-Ausgabe

Hier ist ein Beispiel für die Ausgabe, die das Aktivieren von MetricsPort erzeugen wird (wir haben alle Metriken, die sich auf die Engpasskontrolle beziehen, weggelassen, da wir diese Schnittstelle noch stabilisieren müssen):

# 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

Lass uns herausfinden, was einige dieser Zeilen tatsächlich bedeuten:

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

Wenn ein Relay anfängt, „dropped“ zu sehen, handelt es sich in der Regel um ein CPU-/RAM-Problem.

Tor verwendet leider nur einen Thread, außer wenn die „Onion Skins“ verarbeitet werden. Die „Onion Skins“ sind die kryptographischen Arbeiten, die an den berühmten „Onion Layers“ in jedem Kanal durchgeführt werden müssen.

Wenn Tor die Schichten verarbeitet, verwenden wir einen Thread-Pool und lagern die gesamte Arbeit an diesen Pool aus. Es kann vorkommen, dass dieser Pool aufgrund von Speicher- oder CPU-Last die Arbeit einstellt, was zu einem Überlastungszustand führt.

Wenn dein Server ausgelastet ist, wird dies wahrscheinlich ausgelöst.

tor_relay_exit_dns_error_total{...}

Jeder Zähler im Bereich „*_dns_error_total“ (mit Ausnahme des Zählers für erfolgreiche Abfragen) weist auf ein mögliches DNS-Problem hin. Während des 0.4.7-Release-Zyklus haben wir jedoch festgestellt, dass DNS-Fehler viel zu verrauscht sind und zu viele falsch-positive Meldungen enthalten, um für Überlastungsberichte nützlich zu sein. Daher verwenden wir sie ab 0.4.6.9 und 0.4.7.4-alpha nicht mehr für diesen Zweck. Wir behalten jedoch die DNS-Metriken bei, um den Relay-Betreibern einen Einblick in die Vorgänge bei ihrem Relay zu geben.

DNS-Zeitüberschreitungsfehler betreffen nur Ausgangsknoten.

tor_relay_load_oom_bytes_total{...}

Eine Out-Of-Memory-Meldung weist auf ein RAM-Problem hin. Möglicherweise benötigt das Relay mehr RAM oder es treten Speicherverluste auf. Wenn du feststellst, dass der Tor-Prozess Speicherverluste hat, melde das Problem bitte entweder über Tor-GitLab oder schicke eine E-Mail an die Tor-Relays-Mailingliste.

Tor hat einen eigenen OOM-Handler, der aufgerufen wird, wenn 75% des Speichers, den Tor für verfügbar hält, erreicht sind. Angenommen, Tor denkt, dass es insgesamt 2 GB nutzen kann, dann wird es bei 1,5 GB Speicherverbrauch anfangen, Speicher zu räumen. Dies wird als Überlastungszustand angesehen.

Um die Menge des verfügbaren Speichers abzuschätzen, verwendet Tor beim Start MaxMemInQueues oder, falls es nicht eingestellt ist, den gesamten verfügbaren Arbeitsspeicher des Systems und wendet diesen Algorithmus an:

    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)

Um einen überlasteten Zustand zu vermeiden, empfehlen wir, ein Relay mit mehr als 2GB RAM auf 64bit zu betreiben. 4 GB werden empfohlen, obwohl es natürlich nicht schadet, noch mehr RAM hinzuzufügen, wenn du kannst. Hinweis: Wenn du einen leistungsstarken Server mit viel Arbeitsspeicher betreibst, kann es sein, dass du aufgrund der standardmäßigen Begrenzung der Warteschlangengröße auf 8 GB in einen überlasteten Zustand gerätst, obwohl du noch viel ungenutzten Arbeitsspeicher hast. Füge in diesem Fall einen entsprechenden MaxMemInQueues-Eintrag zu deiner torrc-Konfiguration hinzu.

Man könnte meinen, dass Tor vom OS-OOM-Handler selbst aufgerufen werden könnte. Da Tor beim Start den gesamten Arbeitsspeicher des Systems beansprucht, verbraucht es zu viel Arbeitsspeicher, wenn auf dem Gesamtsystem viele andere Anwendungen laufen, die den Arbeitsspeicher nutzen. In diesem Fall könnte das Betriebssystem Tor OOM, sogar ohne dass Tor Speicherlast bemerken würde.

tor_relay_load_socket_total

Wenn die Anzahl der geöffneten Anschlüsse annähernd so hoch ist wie die Gesamtzahl der verfügbaren Anschlüsse, deutet dies darauf hin, dass das Relay keine Anschlüsse mehr hat. Die Lösung ist, ulimit -n für den Tor-Prozess zu erhöhen.

tor_relay_load_tcp_exhaustion_total

Diese Zeilen zeigen an, dass das Relay keine TCP-Ports mehr hat.

Versuche, sysctl wie oben beschrieben einzustellen.

tor_relay_load_global_rate_limit_reached_total

Wenn dieser Zähler über einen kurzen Zeitraum um einen merklichen Wert ansteigt, ist das Relay überlastet. Es wird wahrscheinlich von einem großen Onion-Dienst als Wächter verwendet oder für einen laufenden DDoS-Angriff im Netzwerk.

Wenn dein Relay immer noch überlastet ist und du nicht weißt, warum, wende dich bitte an [email protected]. Du kannst deine E-Mail mit dem Network-Port-OpenPGP-Schlüssel verschlüsseln.

Wenn du dein Tor-Relay aktualisierst oder auf einen anderen Computer umziehst, achte darauf, die gleichen Identitätsschlüssel zu behalten (gespeichert in keys/ed25519_master_id_secret_key undkeys/secret_id_key in deinem DataDirectory).

Wenn du ein Brückenbetreiber bist, stelle sicher, dass du auch pt_state/ beibehältst. Es enthält Daten, die erforderlich sind, damit deine Brücke weiterhin mit der gleichen Brückenleitung arbeiten kann.

Der Einfachheit halber sollte auch das Kopieren des gesamten DataDirectory funktionieren.

Möglicherweise möchtest du Sicherungskopien dieser Identitätsschlüssel sowie von pt_state für eine Brücke aufbewahren, damit du das Relay wiederherstellen kannst, falls etwas schief geht.

Die standardmäßig geöffneten Ports sind unten aufgelistet, aber bedenke, dass jeder Port oder Ports vom Relaybetreiber geöffnet werden können, indem er sie in torrc konfiguriert oder den Quellcode modifiziert. Die Voreinstellung gemäß src/or/policies.c (Zeile 85 und Zeile 1901) aus der Quellcodeversion 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 implementiert sechs Mechanismen, um Brücken zu verteilen: HTTPS, Moat, E-Mail, Telegram, Einstellungen und Reserviert. Brückenbetreiber können auf der Seite Relaysuche überprüfen, welchen Mechanismus ihre Brücke verwendet. Den <HASHED FINGERPRINT> der Brücke in der Eingabemaske eingeben und auf „Suchen“ klicken.

Betreiber können auch wählen, welche Verteilungsmethode ihre Brücke verwendet. Um die Methode zu ändern, ändere die Einstellung BridgeDistribution in der torrc-Datei auf eine der folgenden: https, moat, email, telegram, settings, lox, none, any. Eine Beschreibung der einzelnen Verteiler findest du in der Rdsys-Verteiler-Dokumentation.

Weitere Informationen findest du in der Brücken-Nachinstallations-Anleitung.

  • Das Exit-Relay ist der am meisten benötigte Relay-Typ, aber es ist auch mit der höchsten rechtlichen Gefahr und dem höchsten Risiko verbunden (und du solltest es NICHT von zu Hause aus betreiben).
  • Wenn du ein Relay mit minimalem Aufwand betreiben möchtest, sind auch schnelle Wächter-Relays sehr nützlich
  • Gefolgt von Brücken.

Unser Ziel ist es, die EInrichtung eines Tor-Relays möglichst einfach zu machen:

  • Es ist in Ordnung, wenn das Relay manchmal offline ist. Die Verzeichnisse merken das schnell und stellen keine Verbindungen mehr zu dem Relay her. Beachte nur, dass es nicht zu oft passiert, weil jedes Mal die Verbindung, die über den Relay läuft, abbricht.
  • Jedes Tor-Relay hat eine Ausgangsrichtlinie, die genau festlegt, welche Ausgansverbindungen auf dem Relay erlaubt oder verboten sind. Wenn du dir nicht sicher bist, ob du ein Ausgangs-Relay betreiben möchtest, solltest du Verbindungen nur zu anderen Tor-Relays erlauben.
  • Dein Relay schätzt die Bandbreitenkapazität und tauscht diese mit dem Tor Netzwerk aus. Relays mit hoher Bandbreite ziehen mehr Benutzer an. Trotzdem sind auch Relays mit geringer Bandbreite nützlich.

Weshalb die Relay-Last variiert

Tor verwaltet die Bandbreite im gesamten Netzwerk. Für die meisten Relays macht es einen vernünftigen Job. Doch die Ziele von Tor sind anders als bei Protokollen wie BitTorrent. Tor will Webseiten mit niedriger Latenz, was schnelle Verbindungen mit Reserven erfordert. BitTorrent will Massendownloads, was die Nutzung der gesamten Bandbreite erfordert.

Wir arbeiten an einem neuen Bandbreitenscanner, der einfacher zu verstehen und zu warten ist. Es verfügt über Diagnosen für Relays, die nicht gemessen werden, und Relays, die niedrige Messwerte aufweisen.

Weshalb braucht Tor Bandbreitenscanner?

Die meisten Anbieter geben dir die maximale Geschwindigkeit deines lokalen Anschlusses an. Doch Tor hat Benutzer auf der gesamten Erde, und unsere Benutzer verbinden sich zufällig mit einem oder zwei Wächter-Relays. Wir müssen also wissen, wie gut jedes Relay mit der ganzen Welt verbunden werden kann.

Selbst wenn also alle Relay-Betreiber ihre beworbene Bandbreite auf ihre lokale Verbindungsgeschwindigkeit einstellen würden, bräuchten wir immer noch Bandbreiteninstanzen, um die Last zwischen verschiedenen Teilen des Internets auszugleichen.

Was ist eine normale Relay-Last?

Es ist normal, dass die meisten Relays mit 30%-80% ihrer Kapazität belastet werden. Dies ist gut für die Clients: Ein überlastetes Relay hat eine hohe Latenz. (Wir wollen genug Relays, so dass jedes Relay zu 10% ausgelastet ist. Dann wäre Tor fast so schnell wie das breitere Internet).

Manchmal ist ein Relay langsam, weil sein Prozessor langsam ist oder seine Verbindungen begrenzt sind. In anderen Fällen ist es das Netzwerk, das langsam ist: das Relay hat ein schlechtes Peering zu den meisten anderen Tor-Relays oder ist sehr weit entfernt.

Herausfinden, was ein Relay einschränkt

Viele Dinge können ein Relay ausbremsen. Hier erfährst du, wie du sie aufspüren kannst.

System-Grenzwerte

  • Überprüfe die RAM-, CPU- und Socket-/Dateideskriptor-Auslastung auf deinem Relay

Tor protokolliert einiges davon, wenn es startet. Andere können mit top oder ähnlichen Tools eingesehen werden.

Provider-Grenzwerte

  • Prüfe das Internet-Peering (Bandbreite, Latenz) vom Provider deines Relays zu anderen Relays. Die Relays, die über Comcast übertragen werden, waren zeitweise langsam. Relays außerhalb Nordamerikas und Westeuropas sind in der Regel langsamer.

Tor-Netzwerk-Grenzwerte

Die Relay-Bandbreite kann durch die vom Relay selbst beobachtete Bandbreite oder durch die gemessene Bandbreite der Verzeichnisbehörden begrenzt werden. So findest du heraus, welche Messung dein Relay einschränkt:

  • Prüfe jede der Stimmen für dein Relay auf consensus-health (große Seite), und prüfe den Mittelwert. Wenn dein Relay von einigen Verzeichnisbehörden nicht als „Running“ gekennzeichnet ist:
    • Hat es die falsche IPv4- oder IPv6-Adresse?
    • Ist seine IPv4- oder IPv6-Adresse von einigen Netzwerken aus unerreichbar?
    • Sind da mehr als 2 Relays auf seiner IPv4-Adresse?

Andernfalls überprüfe die von deinem Relay beobachtete Bandbreite und Bandbreitenrate (Limit). Schlage dein Relay in den Metriken nach. Fahre dann mit der Maus über die Überschrift „Bandbreite“, um die beobachtete Bandbreite und die Relay-Bandbreitenrate zu sehen.

Hier findest du weitere Details und einige Beispiele: Drop in consensus weight und Rampup speed of Exit relay.

Wie man es behebt

Die kleinste dieser Zahlen ist die Begrenzung der dem Relay zugewiesenen Bandbreite.

  • Wenn es an der Bandbreitenrate liegt, erhöhe die BandwidthRate/Burst oder RelayBandwidthRate/Burst in deiner torrc.
  • Wenn es sich um die beobachtete Bandbreite handelt, wird dein Relay nicht nach mehr Bandbreite fragen, bis es sieht, dass es selbst schneller wird. Du musst herausfinden, warum es langsam ist.
  • Wenn es sich um den Mittelwert der gemessenen Bandbreite handelt, sieht dein Relay aus Sicht der Mehrheit der Bandbreitenbehörden langsam aus. Du musst herausfinden, warum sie es langsam messen.

Eigene Relaymessungen durchführen

Wenn dein Relay meint, es sei langsam, oder die Bandbreitenbehörden meinen, es sei langsam, kannst du die Bandbreite selbst testen:

  • Führe einen Test mit Tor durch, um zu sehen, welche Geschwindigkeit Tor mit deinem Netzwerk erreichen kann

    Dazu musst du einen Tor-Client so konfigurieren, dass er dein Relay als Eingang verwendet. Wenn dein Relay nur die Guard-Markierung hat, setze EntryNodes mit deinem Relay Fingerprint in torrc. Wenn dein Relay keine Guard-Markierung hat oder Guard- und Exit-Markierungen hat, kannst du dein Relay nicht als Einstiegsknoten setzen (siehe https://gitlab.torproject.org/tpo/core/tor/-/issues/22204), aber du kannst es als deine Brücke setzen, auch wenn es keine Brücke ist. Um dein Relay als Bridge einzurichten, füge zu deiner torrc hinzu:

    Bridge <ip>:<port>
    UseBridge 1
    

    Lade dann eine große Datei herunter, indem du deinen SocksPort als Socks-Proxy benutzt. Hierfür kannst du curl verwenden, z.B.:

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

    Die Verwendung unterschiedlicher Benutzer (user) oder Passwörter (password) garantiert unterschiedliche Kanäle. Du kannst $RANDOM verwenden.

    Das gibt dir eine Vorstellung davon, wie viel Verkehr dein Relay verkraften kann.

    Alternativ kannst du relay_bw ausführen, um dein Relay mit 2 Hops-Schaltungen zu testen, ähnlich wie es sbws tut.

  • Führe einen Test mit Tor und Chutney durch, um herauszufinden, wie schnell Tor mit deiner CPU werden kann. Erhöhe das Datenvolumen so lange, bis die Bandbreite nicht mehr zunimmt.

Ja, deine Anonymität erhöht sich für manche Angriffe.

Das beste Beispiel ist ein Angreifer, der eine kleine Anzahl Tor-Relays betreibt. Sie sehen eine Verbindung von dir, aber sie sehen nicht, ob die Anfrage ursprünglich von dir oder von jemand anderem übermittelt wurde.

Es gibt einige Fälle, in denen es nicht hilft: Wenn ein Angreifer Ihren gesamten ein- und ausgehenden Verkehr beobachten kann, dann ist es sehr leicht für ihn zu sehen, welche Verbindungen von Ihnen kommen und welche Sie nur weiterleiten. (In diesem Fall kennen sie aber immer noch nicht dein Ziel, solange sie dieses nicht auch beobachten. Trotzdem bist du nicht besser geschützt als ein normaler Websitenbesucher.)

Es gibt auch einige Nachteile beim Betreiben eines Tor-Relays. Anfangs, als wir nur ein paar hundert Relays hatten, konnte die Tatsache, dass Sie eines betreiben, einem Angreifer zeigen, dass Sie großen Wert auf Anonymität legen. Zweitens existieren einige esoterischere Angriffe, die nicht so gut verstanden oder erprobt sind und bei denen man sich das Wissen zunutze macht, dass du ein Relay betreibst – zum Beispiel könnte ein Angreifer in der Lage sein, zu „beobachten“, ob du Verkehr sendest, auch wenn er dein Netzwerk nicht wirklich überwachen kann, indem er Verkehr durch dein Tor-Relay weiterleitet und Änderungen im Verkehrs-Timing bemerkt.

Es ist noch unerforscht, ober der Nutzen die Risiken überwiegt. Das meiste hängt von den Angriffen ab, über die du dir am meisten Sorgen machst. Wir denken, dass das für die meisten Nutzer ein wichtiger Schritt ist.

Für eine Anleitung, wie du mit deinem NAT/Router Anschlüsse weiterleiten kannst, lies dir portforward.com durch.

Wenn dein Relay in einem internen Netzwerk läuft, musst du die Anschlussweiterleitung einstellen. Die Weiterleitung von TCP-Verbindungen ist systemabhängig. Die Firewall-Client-F&As zeigen einige Beispiele, wie es funktioniert.

Hier ist ebenfalls ein Beispiel, wie du es unter GNU/Linux machen solltest, wenn du iptables verwendest:

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

Möglicherweise musst du „eth0“ ändern, wenn du eine andere externe Schnittstelle hast (die, welche mit dem Internet verbunden ist). Die Chancen stehen gut, dass du nur eins hast (mit Ausnahme des Loopbacks), also sollte es nicht allzu schwer sein, das herauszufinden.

Die Buchhaltungsoptionen in der torrc-Datei ermöglicht es dir, die maximale Menge an Bytes anzugeben, die in einer bestimmten Zeitspanne verwendet werden.

    AccountingStart day week month [day] HH:MM

Hier wird angegeben, wann die Abrechnung zurückgesetzt werden soll. Um beispielsweise eine Gesamtzahl von Bytes einzustellen, die in einer Woche übertragen werden darf (und die jeden Mittwoch um 10:00 Uhr zurückgesetzt wird), würdest du Folgendes verwenden:

    AccountingStart week 3 10:00
    AccountingMax 500 GBytes

Hier wird die maximale Datenmenge angegeben, die dein Relay während eines Abrechnungszeitraums sendet, und die maximale Datenmenge, die dein Relay während eines Abrechnungszeitraums empfängt. Wenn der Abrechnungszeitraum vorbei ist (von AccountingStart), wird der Zähler für AccountingMax auf 0 gesetzt.

Beispiel: Du möchtest jeden Tag 50 GB Datenverkehr erlauben, und die Abrechnung setzt sich jeden Nachmittag zurück:

    AccountingStart day 12:00
    AccountingMax 50 GBytes

Beachte, dass dein Relay nicht genau zu Beginn des Abrechnungszeitraumes starten wird. Es wird gespeichert, wie schnell dein Relay seine maximale Bandbreite ausgeschöpft hat und dann wird ein neuer zufälliger Zeitpunkt in dem neuen Zeitraum gewählt, wann der Relay startet. Dadurch verhindern wir, dass nicht Hunderte Relays Ende des Monats ihren Betrieb einstellen.

Wenn du im Vergleich zu deiner Verbindungsgeschwindigkeit nur eine kleine Menge an Bandbreite zu spenden hast, empfehlen wir dir eine tägliche Abrechnung, damit du nicht am ersten Tag dein gesamtes monatliches Kontingent verbrauchst. Teile einfach dein monatliches Volumen durch 30. Du kannst auch die Bandbreite begrenzen, um deinen Beitrag zum Tor-Netzwerk über den ganzen Tag zu verteilen: Wenn du X GB in jede Richtung anbieten willst, dann begrenze die RelayBandwidthRate für dein Relay auf 20*X KBytes. Wenn du zum Beispiel 50 GB Volumen in jede Richtung hast, dann setze die RelayBandwidthRate deines Relays auf 1000 KBytes: Dadurch ist dein Relay immer für mindestens die Hälfte des Tages nützlich.

    AccountingStart day 0:00
    AccountingMax 50 GBytes
    RelayBandwidthRate 1000 KBytes
    RelayBandwidthBurst 5000 KBytes # erlaube höhere Bursts, behalte aber den Durchschnitt bei

Du hast Recht, in den meisten Fällen bedeutet ein Byte in dein Tor-Relay ein Byte heraus und umgekehrt. Doch es gibt ein paar Ausnahmen:

Wenn du dein DirPort öffnest, werden dich die Tor-Programme nach einer Kopie des Verzeichnisses fragen. Die Anfragen, die sie stellen (ein HTTP GET), ist ziemlich klein, und die Antwort ist manchmal ziemlich groß. Dies macht wahrscheinlich den größten Teil des Unterschieds zwischen deiner „Schreibend“- und deiner „Lesend“-Byte-Zahl aus.

Eine weitere kleine Ausnahme tritt auf, wenn du einen Ausgangsknoten betreibst und du ein paar Bytes aus einer Exit-Verbindung (z.B. einer Instant-Sofortnachrichten- oder SSH-Verbindung) liest und sie in eine ganze 512-Byte-Zelle für den Transport durch das Tor-Netzwerk einpackst.

Die Werte die in AccountingMax und BandwidthRate festgelegt werden gelten sowohl für Client als auch die Übermittlungsfunktion von Tor. Deshalb kann es sein, dass du nicht mehr surfen kannst, sobald dein Tor im Ruhezustand ist. Dann steht Folgendes im Protokoll:

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

Die Lösung besteht darin, zwei Tor-Prozesse laufen zu lassen – ein Relay und einen Client, jeder mit passender Konfiguration. Eine Möglichkeit, es zu machen (wenn du mit einer funktionierenden Relay-Einrichtung beginnst), ist wie folgt:

  • Setze in der Relay-Tor-torrc-Datei einfach den SocksPort auf 0.
  • Erstelle eine neue Client-torrc-Datei aus torrc.sample und stelle sicher, dass sie eine andere Protokolldatei als das Relay verwendet. Ein Name könnte torrc.client oder torrc.relay sein.
  • Füge -f /path/to/correct/torrc in die Startskripte des Clients und des Relays ein.
  • Die Veränderung der Startskripte zu Tor.client und Tor.relay in Linux / BSD / Mac OS X kann das Auseinanderhalten der Konfigurationen erleichtern.

In einfachen Worten funktioniert es so:

  • Es gibt eine Datei mit dem privaten Ed25519-Hauptidentitätsschlüssel namens „ed25519_master_id_secret_key“. Das ist das wichtigste, daher solltest du ein Backup machen und die Datei an einem sicheren Ort aufbewahren. Tor kann es für dich entschlüsseln, wenn du es manuell erzeugst (wenn gefragt, gib ein Passwort ein).
  • Ein mittelfristiger Signierschlüssel namens „ed25519_signing_secret_key“ wird für Tor gerneriert. Ebenso wird ein Zertifikat namens „ed25519_signing_cert“ erstellt, das vom privaten Hauptidentitätsschlüssel signiert wird und sicherstellt, dass der mittelfristige Signierschlüssel für einen bestimmten Zeitraum validiert ist. Die standardmäßige Gültigkeit beträgt 30 Tage. Das kann in der torrc-Datei angepasst werden mit „SigningKeyLifetime N days|weeks|months“.
  • Es gibt auch einen primären öffentlichen Schlüssel mit dem Namen „ed25519_master_id_public_key“, der die tatsächliche Identität des im Netzwerk beworbenen Relays darstellt. Dieser ist nicht vertraulich und kann aus dem „ed5519_master_id_secret_key“ errechnet werden.

Tor benötigt nur Zugriff auf den mittelfristigen Signierschlüssel und das Zertifikat, solange sie gültig sind, so dass der private Hauptidentitätsschlüssel außerhalb von DataDirectory/keys, auf einem Speichermedium oder einem anderen Computer aufbewahrt werden kann. Du musst den mittelfristigen Signierschlüssel und das Zertifikat manuell erneuern, bevor sie auslaufen, sonst wird der Tor-Prozess bei Ablauf auf dem Relay beendet.

Diese Funktion ist optional, du brauchst sie nicht zu benutzen, es sei denn, du möchtest es. Wenn du möchtest, dass dein Relay für längere Zeit unbeaufsichtigt läuft, ohne dass du die Erneuerung des mittelfristigen Signaturschlüssels regelmäßig manuell durchführen musst, lässt du am besten den privaten Hauptidentitätsschlüssel in DataDirectory/keys, mach einfach eine Datensicherung für den Fall, dass du ihn neu installieren musst. Wenn du diese Funktion nutzen möchtest, kannst du die detailliertere Anleitung lesen.

Da es jetzt ein Wächter ist, wird es von Clients weniger in anderen Positionen benutzt, aber bisher haben nicht viele Clients ihre bestehenden Wächter ausgewechselt, um es als Wächter zu benutzen. Erfahre mehr Details in diesem Blogbeitrag oder in „Changing of the Guards: A Framework for Understanding and Improving Entry Guard Selection in Tor“.

Wenn ein Exit fehlkonfiguriert oder böswillig ist, erhält es die BadExit-Markierung. Dies weist Tor an, den Ausgang über dieses Relay zu vermeiden. Tatsächlich werden Relays mit dieser Markierung zu Nicht-Exits. Wenn du diese Markierung erhalten hast, haben wir entweder ein Problem oder eine verdächtige Aktivität entdeckt, als wir den Verkehr durch dein Ausgangs-Relay geleitet haben, und waren nicht in der Lage, dich zu kontaktieren. Bitte wende dich an das Bad-Relays-Team, damit wir das Problem klären können.

Alle ausgehenden Verbindungen müssen erlaubt sein, sodass jedes Relay mit den anderen Relays kommunizieren kann.

In vielen Rechtssystemen sind Tor-Relay-Betreiber rechtlich durch die gleichen Bestimmungen geschützt, die verhindern, dass Internetanbieter für Inhalte Dritter, die durch ihr Netzwerk laufen, haftbar gemacht werden können. Ausgangs-Relays, die einen Teil des Datenverkehrs filtern, verlieren möglicherweise diesen Schutz.

Tor fördert den freien Netzwerkzugang. Ausgangs-Relays dürfen den Datenverkehr, der über sie ins Internet läuft, nicht filtern. Wenn wir herausfinden, dass ein Ausgangs-Relay den Datenverkehr filtert, bekommt es von uns den BadExit-Stempel.

Großartig. Wenn du mehrere Relays betreiben willst, um das Netzwerk noch besser zu unterstützen, freut uns das. Bitte betreibe nicht mehr als ein paar Dutzend im gleichen Netzwerk, denn Teil des Ziels des Tor-Netzwerks ist es, dezentral und vielfältig zu sein.

Wenn du dich dazu entscheidest, mehr als ein Relay zu betreiben, dann verändere bitte die „MyFamily“-Konfigurationseinstellung in der torrc-Datei bei jedem Relay. Liste alle Relays (durch Komma getrennt) auf, die unter deiner Kontrolle stehen:

MyFamily $fingerprint1,$fingerprint2,$fingerprint3

wo jeder Fingerabdruck der 40-Zeichen-Kennungs-Fingerabdruck ist (ohne Leerzeichen).

Dadurch wissen Tor-Clients, welche Relays zusammengehören und können so vermeiden, dass sie nicht mehr als eines deiner Relays zusammen verwenden. Du solltest MyFamily für deine Relays einstellen, wenn du Kontrolle über den Computer und/oder das Netzwerk hast. Auch wenn die Relays über verschiedene Anbieter und Standorte verteilt sind.

Es gibt zwei Optionen, die du in deine torrc-Datei schreiben kannst:

BandwidthRate is die maximal erlaubte Bandbreite (Bytes pro Sekunde). Du willst beispielsweise „BandwidthRate 10 MBytes“ für 10 Megabyte pro Sekunde einstellen (eine schnelle Verbindung) oder „BandwidthRate 500 KBytes“ für 500 Kilobytes pro Sekunde (eine gute Kabelverbindung). Die minimale Bandbreitenrate liegt bei 75 Kilobytes pro Sekunde.

BandwidthBurst ist ein Pool von Bytes, der verwendet wird, um Anfragen während kurzer Verkehrsperioden oberhalb von BandwidthRate zu erfüllen, aber dennoch den Durchschnitt über einen langen Zeitraum auf BandwidthRate hält. Eine langsame Bandbreite aber ein hoher Burst erzwingen einen langfristigen Durchschnitt, damit ungenutzte Bandbreite zu Spitzenzeiten genutzt werden kann. Wenn du beispielsweise „BandwidthBurst 500 KBytes“ wählst und das auch für deine Bandbreitenrate benutzt, wirst du nie mehr als 500 Kilobytes pro Sekunde erreichen. Doch wenn du einen höheren Bandbreitenburst (z.B. 5 MBytes) nimmst, dann kann eine höhere Geschwindigkeit erreicht werden, bis der Burst aufgebraucht ist.

Wenn du eine asymmetrische Verbindung hast (Upload geringer als Download), solltest du die Bandbreitenrate auf maximal die maximale Uploadrate setzen. Andernfalls könntest du in Zeiten maximaler Bandbreitennutzung viele Pakete verlieren – möglicherweise musst du experimentieren, welche Werte deine Verbindung komfortabel machen. Dann setze den Bandbreitenburst auf den selben Wert wie die Bandbreitenrate.

Tor-Relays, die auf Linux basieren, haben eine weitere Option: Sie können ihren persönlichen Verkehr priorisieren, sodass dieser nicht durch die Tor-Last beeinträchtigt wird. Dafür existiert ein Skript, das sich im Contrib-Verzeichnis der Tor-Quelldistribution befindet.

Es gibt zusätzliche Optionen, bei denen sie festlegen können, dass nur eine bestimmte Trafficmenge pro Zeitperiode (z.B. 100 GB pro Monat) verwendet werden. Diese werden im Hibernation-Eintrag behandelt.

Beachte, dass die Bandbreitenrate und der Bandbreitenburst in Bytes und nicht in Bits angegeben wird.