¿Cómo funciona Lightning Network sobre TOR?

Estoy interesado en comprender en detalle cómo funciona la red lightning sobre Tor. Las implementaciones como lnd, c-lightning, etc. ofrecen una extensión que permite ejecutar TOR con Lightning. Me gustaría entender cómo funciona en la práctica la ejecución de Lightning con TOR. En particular me interesan los siguientes casos:

1) Soy el remitente, pero habilité Tor en mi nodo. ¿Cómo se ve el envío a un nodo R fuera de la red Tor?

2) Soy el nodo receptor y no anuncio una dirección IP, sino una dirección cebolla. ¿Cómo recibo los pagos?

3) El nodo emisor S es un nodo LN normal, sin conexiones Tor. Como remitente, quiero enviar un pago al nodo R y mi nodo LN encuentra la mejor ruta para enviar mi pago a R. ¿Es posible que esta ruta en cualquier salto pase por Tor o pase por el nodo cebolla, porque cualquiera de ¿Los nodos en la ruta seleccionada son cebolla o tienen acceso a Tor? Y si es así, ¿cómo se ve la ruta entonces?

Respuestas (1)

Ejecutar Lightning Node sobre TOR no es diferente a ejecutarlo sobre una conexión IP normal. Enviar el pago, cumplir con el pago entrante, enviar mensajes de error, etc. ocurriría exactamente de la misma manera en ambos casos. La única diferencia es que los mensajes anteriores que envía a su compañero ahora se transmitirán a través de la red TOR en lugar de un paquete de IP directo.

Si está utilizando solo TOR sin ninguna dirección IP pública, entonces para enrutar su pago a un nodo que usa solo una dirección IP pública, necesitará tener un nodo en su ruta hacia el receptor que esté (1) ejecutando TOR y una IP pública o (2) o ejecutando una IP pública y puede conectarse a los nodos TOR usando el proxy socks5. Si no tiene este nodo en el medio, no podrá enviar el pago.

Cuando se inicia el servicio Tor, crea un proxy socks5 que está por defecto en la dirección 127.0.0.1:9050. Si un nodo con IP pública se inicia con la opción --proxy=127.0.0.1:9050(o se incluye en el archivo de configuración), el nodo podrá conectarse a nodos que ejecuten TOR (como el suyo).

Si está ejecutando TOR y tiene una dirección IP pública, puede conectarse directamente con los nodos que ejecutan tor o los nodos de IP pública a través del proxy del servicio tor socks5.

Soy el remitente, pero habilité TOR en mi nodo. ¿Cómo se ve el envío a un nodo R fuera de la red TOR?

El enrutamiento de la red ocurre de acuerdo con lo que mencioné anteriormente. Sin embargo, el cálculo de la ruta para enviar el pago al receptor ocurre en su nodo, por lo que no implica qué enrutamiento de red está utilizando. Construiría el paquete de enrutamiento de la cebolla con la ruta al receptor (los canales que usará para enviar el pago) e intentaría enviar esta cebolla y la payment_hasha su compañero a través del update_add_htlcmensaje. Este mensaje luego pasará por los nodos TOR antes de llegar a su par, en lugar de llegar directamente a su par.

Soy el nodo receptor y no anuncio una dirección IP, sino una dirección de cebolla. ¿Cómo recibo los pagos?

Puede recibir pagos directamente de los nodos que ejecutan TOR. Si desea recibir pagos de nodos que solo tienen IP pública, debe tener un nodo en su ruta que tenga configurada la opción de proxy para que pueda conectarse a los nodos TOR a través del proxy socks5.

El nodo emisor S es un nodo LN normal, sin conexiones Tor. Como remitente, quiero enviar un pago al nodo R y mi nodo LN encuentra la mejor ruta para enviar mi pago a R. ¿Es posible que esta ruta en cualquier salto pase por Tor o pase por el nodo cebolla, porque cualquiera de ¿Los nodos en la ruta seleccionada son cebolla o tienen acceso a Tor? Y si es así, ¿cómo se ve la ruta entonces?

Suponga que el camino de S a R se ve así: S -> T -> U -> V -> R. Número de casos pueden surgir:

  • S y R no ejecutan TOR: Depende
    • Todos los nodos podrían estar en IP pública y su pago se realiza.
    • T podría ser un nodo que ejecuta IP pública y TOR. Tiene un canal IP público con usted y un canal TOR con U. U puede tener una opción de proxy configurada que le permita tener canales basados ​​en TOR con T y un canal IP público con U. V es un nodo IP público y U enruta el pago a V de forma normal.
  • R ejecuta TOR: al menos un nodo intermedio debe ejecutar/entender TOR
    • T/U/V tiene una IP pública y tienen TOR para que puedan hacer canales con nodos TOR y nodos de IP pública
    • T/U/V son todos nodos IP públicos, pero V tiene un conjunto de opciones de proxy que le permite tener una conexión de canal basada en tor con R.
Gracias por la gran respuesta, lo aprecio mucho. Aquí hay solo un par de preguntas detalladas: ¿Hay alguna forma de saber qué nodos pueden admitir conexiones TOR además de los que realmente publican una dirección de cebolla? La mayoría de los nodos publican solo una IP pública, pero eso no significa que no tengan TOR habilitado, ¿verdad? Por otro lado, si no sabemos qué nodos habilitan TOR, ¿cómo podemos elegir correctamente la ruta desde el origen hasta el destino del pago?
Parte 1: (1) Creo que tiene que funcionar al revés. Usando solo el nodo TOR, no puede conectarse a un nodo de dirección IP pública (conexión saliente), pero puede aceptar la conexión desde un nodo IP público que puede conectarse a TOR a través de un proxy. (2) Los nodos anuncian los servicios que ejecutan en el node_announcementmensaje. Simplemente puede ejecutar el comando lightning-cli listnodes <node_id>y verificar qué red admite ese nodo.
Parte 2: (3) eliges el camino en función de los canales. Si hay una ruta con canales entre usted y el receptor, al menos un nodo en el medio debe admitir ambos servicios. Si no fuera así, los nodos no habrían podido conectarse, y mucho menos configurar un canal.
Gracias por las respuestas, eso es muy útil! La información sobre las redes admitidas, ¿es esa la información que se encuentra debajo de la clave 'direcciones' o algo más?
@AnnMP sí, verá los tipos de direcciones admitidos en las direcciones clave. Por ejemplo, podría consultar 03a503d8e30f2ff407096d235b5db63b4fcf3f89a653acb6f43d3fc492a7674019el nodo y descubrir que ejecuta tres tipos de direcciones: ipv4, ipv6 y torv3.
"Si hay una ruta con canales entre usted y el receptor, al menos un nodo en el medio debe admitir ambos servicios". Eso está mal, por supuesto, puede conectarse a un nodo de ip pública a través de tor (a menos que el otro nodo esté bloqueando las conexiones de las salidas de tor).
Además: puede recibir pagos de un nodo de ip pública si está ejecutando un nodo solo tor conectándose a ese nodo y luego abriendo un canal, al revés (abriendo una conexión desde el nodo de ip pública a su nodo tor) no funcionaría debido a que su nodo no tiene una IP pública. Un canal se puede abrir en ambas direcciones siempre que haya una conexión entre los nodos.
@chpio 1/2 Es posible que tenga razón en que la IP pública puede aceptar conexiones entrantes, pero las implementaciones de Lightning no lo admiten. Consulte los documentos de c-lightning relacionados con lo que admiten sobre tor . En el caso n.° 1, verá que la dirección IP pública sin el servicio TOR solo admite llamadas salientes.
@chpio 2/2 Como dije anteriormente en relación con las implementaciones, los nodos de IP pública solo pueden enviar conexiones salientes a los nodos que ejecutan TOR y los nodos solo TOR solo pueden recibir conexiones entrantes. Sin embargo, una vez establecida la conexión, pueden abrir el canal en cualquier dirección.