Wie funktioniert Lightning Network über TOR?

Ich bin daran interessiert, im Detail zu verstehen, wie das Lightning-Netzwerk über Tor funktioniert. Implementierungen wie lnd, c-lightning usw. bieten eine Erweiterung, die es ermöglicht, TOR mit Lightning auszuführen. Ich würde gerne verstehen, wie das Ausführen von Lightning mit TOR in der Praxis funktioniert. Insbesondere interessiere ich mich für folgende Fälle:

1) Ich bin der Absender, aber ich habe Tor in meinem Knoten aktiviert. Wie sieht das Senden an einen Knoten R außerhalb des Tor-Netzwerks aus?

2) Ich bin der Empfängerknoten und gebe keine IP-Adresse an, sondern eine Onion-Adresse. Wie erhalte ich Zahlungen?

3) Der Senderknoten S ist ein regulärer LN-Knoten ohne jegliche Tor-Verbindungen. Als Absender möchte ich eine Zahlung an den Knoten R senden und mein LN-Knoten findet den besten Weg, um meine Zahlung an R zu senden Die Knoten im ausgewählten Pfad sind zufällig Zwiebeln oder haben Zugriff auf Tor? Und wenn ja, wie sieht das Routing dann aus?

Antworten (1)

Das Ausführen von Lightning Node über TOR unterscheidet sich nicht vom Ausführen über eine normale IP-Verbindung. Das Versenden der Zahlung, das Abwickeln des Zahlungseingangs, das Versenden von Fehlermeldungen usw. würde in beiden Fällen auf die gleiche Weise erfolgen. Der einzige Unterschied besteht darin, dass die oben genannten Nachrichten, die Sie an Ihren Peer senden, jetzt über das TOR-Netzwerk und nicht über ein direktes IP-Paket erfolgen.

Wenn Sie nur TOR ohne öffentliche IP-Adresse verwenden, müssen Sie, um Ihre Zahlung an einen Knoten weiterzuleiten, der nur eine öffentliche IP-Adresse verwendet, einen Knoten in Ihrem Pfad zum Empfänger haben, der (1) TOR und öffentliche IP-Adresse ausführt oder (2) oder mit öffentlicher IP und kann sich über den Socks5-Proxy mit TOR-Knoten verbinden. Wenn Sie diesen Knoten nicht dazwischen haben, können Sie die Zahlung nicht senden.

Wenn der Tor-Dienst startet, erstellt er einen Socks5-Proxy, der standardmäßig die Adresse 127.0.0.1:9050 hat. Wenn ein Knoten mit öffentlicher IP mit der Option gestartet wird --proxy=127.0.0.1:9050(oder sie in die Konfigurationsdatei aufnimmt), kann sich der Knoten mit Knoten verbinden, auf denen TOR läuft (wie Ihrer).

Wenn Sie TOR ausführen und eine öffentliche IP-Adresse haben, können Sie sich direkt mit Knoten verbinden, auf denen Tor ausgeführt wird, oder mit öffentlichen IP-Knoten über den Socken5-Proxy des Tor-Dienstes.

Ich bin der Absender, aber ich habe TOR in meinem Knoten aktiviert. Wie sieht das Senden an einen Knoten R außerhalb des TOR-Netzwerks aus?

Das Netzwerk-Routing erfolgt gemäß dem, was ich oben erwähnt habe. Die Pfadberechnung zum Senden der Zahlung an den Empfänger erfolgt jedoch auf Ihrem Knoten, sodass es nicht darauf ankommt, welches Netzwerk-Routing Sie verwenden. Sie würden das Onion-Routing-Paket mit dem Pfad zum Empfänger erstellen (die Kanäle, die Sie zum Senden der Zahlung verwenden) und versuchen, diese Onion und die über die Nachricht payment_hashan Ihren Peer zu senden. update_add_htlcDiese Nachricht wird dann über TOR-Knoten geleitet, bevor sie Ihren Peer erreicht, anstatt Ihren Peer direkt zu erreichen.

Ich bin der Empfängerknoten und gebe keine IP-Adresse, sondern eine Onion-Adresse bekannt. Wie erhalte ich Zahlungen?

Sie können Zahlungen direkt von Knoten erhalten, auf denen TOR ausgeführt wird. Wenn Sie Zahlungen von Knoten erhalten möchten, die nur eine öffentliche IP haben, müssen Sie einen Knoten in Ihrem Pfad haben, für den die Proxy-Option festgelegt ist, damit er sich über den Socks5-Proxy mit den TOR-Knoten verbinden kann.

Der Senderknoten S ist ein regulärer LN-Knoten ohne Tor-Verbindungen. Als Absender möchte ich eine Zahlung an den Knoten R senden und mein LN-Knoten findet den besten Weg, um meine Zahlung an R zu senden Die Knoten im ausgewählten Pfad sind zufällig Zwiebeln oder haben Zugriff auf Tor? Und wenn ja, wie sieht das Routing dann aus?

Angenommen, der Weg von S nach R sieht so aus: S -> T -> U -> V -> R. Anzahl der Fälle, die auftreten können:

  • S und R laufen nicht TOR: Es kommt darauf an
    • Alle Knoten könnten sich auf einer öffentlichen IP befinden und Ihre Zahlung wird durchgeführt.
    • T könnte ein Knoten sein, auf dem öffentliche IP und TOR ausgeführt werden. Es hat einen öffentlichen IP-Kanal mit Ihnen und einen TOR-Kanal mit U. U kann dann eine Proxy-Option festgelegt haben, die es ihm ermöglicht, TOR-basierte Kanäle mit T und einen öffentlichen IP-Kanal mit U zu haben. V ist ein öffentlicher IP-Knoten und U leitet die Zahlung weiter zu V auf normale Weise.
  • R führt TOR aus: Mindestens ein Knoten dazwischen sollte TOR ausführen/verstehen
    • T/U/V hat eine öffentliche IP und TOR, damit sie Kanäle mit TOR-Knoten und öffentlichen IP-Knoten erstellen können
    • T/U/V sind alle öffentliche IP-Knoten, aber V hat einen Proxy-Optionssatz, der es ermöglicht, eine Tor-basierte Kanalverbindung mit R zu haben.
Vielen Dank für die tolle Antwort, sehr zu schätzen. Hier sind nur ein paar Detailfragen: Gibt es eine Möglichkeit herauszufinden, welche Knoten TOR-Verbindungen unterstützen können, außer denen, die tatsächlich eine Onion-Adresse veröffentlichen? Die Mehrheit der Knoten veröffentlicht nur eine öffentliche IP, aber das bedeutet nicht, dass sie TOR nicht aktiviert haben, richtig? Wenn wir andererseits nicht wissen, welche Knoten TOR aktivieren, wie können wir den Pfad von der Quelle zum Ziel der Zahlung richtig auswählen?
Teil 1: (1) Ich denke, es muss umgekehrt funktionieren. Wenn Sie nur einen TOR-Knoten verwenden, können Sie sich nicht mit einem Knoten mit öffentlicher IP-Adresse verbinden (ausgehende Verbindung), aber Sie können eine Verbindung von einem öffentlichen IP-Knoten akzeptieren, der sich über einen Proxy mit TOR verbinden kann. (2) Knoten kündigen die von ihnen ausgeführten Dienste in der node_announcementNachricht an. Sie können einfach den Befehl ausführen lightning-cli listnodes <node_id>und prüfen, welches Netzwerk dieser Knoten unterstützt.
Teil 2: (3) Sie wählen den Pfad basierend auf Kanälen aus. Wenn sich zwischen Ihnen und dem Empfänger ein Pfad mit Kanälen befindet, muss mindestens ein Knoten dazwischen beide Dienste unterstützen. Andernfalls wären die Knoten nicht in der Lage gewesen, eine Verbindung herzustellen, geschweige denn einen Kanal einzurichten.
Danke für die Antworten, das ist super hilfreich! Die Informationen zu den unterstützten Netzwerken, sind das die Informationen unter dem Schlüssel "Adressen" oder etwas anderes?
@AnnMP Ja, Sie sehen die unterstützten Adresstypen in den Schlüsseladressen. Beispielsweise könnten Sie 03a503d8e30f2ff407096d235b5db63b4fcf3f89a653acb6f43d3fc492a7674019node abfragen und feststellen, dass er drei Arten von Adressen ausführt: ipv4, ipv6 und torv3.
"Wenn zwischen Ihnen und dem Empfänger ein Pfad mit Kanälen vorhanden ist, muss mindestens ein Knoten dazwischen beide Dienste unterstützen." Das ist falsch, Sie können sich natürlich über Tor mit einem öffentlichen IP-Knoten verbinden (es sei denn, der andere Knoten blockiert Verbindungen von Tor-Ausgängen).
Außerdem: Sie können Zahlungen von einem öffentlichen IP-Knoten erhalten, wenn Sie einen Nur-Tor-Knoten betreiben, indem Sie sich mit diesem Knoten verbinden und dann umgekehrt einen Kanal öffnen (Öffnen einer Verbindung vom öffentlichen IP-Knoten zu Ihrem Tor-Knoten). würde nicht funktionieren, weil Ihr Knoten keine öffentliche IP hat. Ein Kanal kann in beide Richtungen geöffnet werden, solange eine Verbindung zwischen Knoten besteht.
@chpio 1/2 Sie haben vielleicht Recht, dass die öffentliche IP eingehende Verbindungen akzeptieren kann, aber die Lightning-Implementierungen unterstützen dies nicht. Sehen Sie sich die c-lightning-Dokumentation an, die sich darauf bezieht, was sie über tor unterstützen . In Fall Nr. 1 sehen Sie, dass die öffentliche IP-Adresse ohne TOR-Dienst nur ausgehende Verbindungen unterstützt.
@chpio 2/2 Wie ich oben in Bezug auf die Implementierungen sagte, können öffentliche IP-Knoten nur ausgehende Verbindungen zu den Knoten senden, auf denen TOR ausgeführt wird, und nur TOR-Knoten können nur eingehende Verbindungen empfangen. Nachdem die Verbindung jedoch hergestellt wurde, können sie den Kanal in jede Richtung öffnen.