LND node (vm) bitcoind (vm) Kommunikation

Guten Tag zusammen

ich stehe aktuell vor dem Problem, dass ich meine lnd Node mit meinem bitcoind Client kommunizieren lassen möchte.

Mein Setup sieht folgendermaßen aus.

Ich nutze proxmox und habe lnd und bitcoind in der eigenen vm laufen. OS is jeweils Ubuntu 20.04.1
Aufgesetzt habe ich das ganze mit der minibolt Anleitung (equivalent zu raspibolt).
Bitcoind ist synchronisiert und läuft, lnd is installiert und wäre rdy zum Starten.

Ich habe schon recherchiert und bin dem ein oder anderen bestimmt schon mehrmals mit meinen Fragen aufen Sack gegangen. Habs bisher dennoch nicht zum Laufen gebracht bzw auch noch nicht ganz verstanden.

Meine konkreten Fragen nun,

(1) was muss von mir in die lnd config eingefügt werden,

(2) was muss von mir in die bitcoind config eingefügt werden,
damit meine lnd node die Kommunikation mit meinem bitcoind Client aufbaut?

Vielen Dank schon mal an jeden der sich der Thematik annimmt :v:t4:

Kuss auf die Nuss :zap:

1 „Gefällt mir“

Hab ich so hier am laufen, nur kein Proxmox sondern lxd/lxc.
In bitcoin.conf folgende Einträge hinzugefügt bzw. geändert.

rpcbind=0.0.0.0
rpcallowip=<ip der LND-VM>

zmqpubrawblock=tcp://0.0.0.0:29000
zmqpubrawtx=tcp://0.0.0.0:29001

In der lnd.conf dann nur:

bitcoind.rpchost=<ip der bitcoin-vm>
bitcoind.zmqpubrawblock=tcp://<ip der bitcoin-vm>:29000
bitcoind.zmqpubrawtx=tcp://<ip der bitcoin-vm>:29001

so funktioniert es bei mir.

3 „Gefällt mir“

Was auch noch zu beachten ist, ist die Art und weise wie sich LND genegünber bitcoind autentifiziert.
Das kann entweder über das cookie file oder über RPC User/Passwort geschehen.

2 „Gefällt mir“

Danke euch.

@anon40579684 meinem Verständniss zu Liebe und der Vollständigkeit im Thread halber.
Handelt es sich bei der ip der LN-VM und der ip der bitcoind-vm um die lokale ip im Heimnetzwerk welche ich der vm im router zugeordnet habe oder die von außen erreichbare welche ich nutze um z.B. auch per ssh remote auf die vm zuzugreifen?
Darauf aufbauend wie lautet die Syntax der ip? „ip:port“?

@PanicBuyer Danke für den Hinweis. In meinem Szenario hab ich das über die benötigten rpc parameter gelöst. Das sieht dann folgendermaßen aus:

[Bitcoind]
bitcoind.rpcuser=raspibolt
bitcoind.rpcpass=deinPasswort

Hab das Passwort mit dem python Skript aus der minibolt Anleitung gehashed und kryptografisch als .rpcpass „deinPasswort“ abgelegt. Hier auch die Frage, geht das so klar?

1 „Gefällt mir“

Perfekt! :+1:

Es handelt sich um die lokale ip im Heimnetzwerk.

Korrekt! ip:port :+1:

Edit: In der bitcoind config bei zmqpubrawblock und zmqpubrawtx reicht die lokale IP vollkommen aus! Muss nicht auf 0.0.0.0 sein.

2 „Gefällt mir“

Wurde schon korrekt beantwortet, ja ist die lokale ip.

1 „Gefällt mir“

Durch welchen Befehl kann ich mir denn den jeweilig definierten Port anzeigen lassen?

Die Syntax war ja

ip:port

1 „Gefällt mir“

Mit der Frage kann ich nichts anfangen. Kannst du es etwas genauer spezifizieren? Bist du jetzt bei lnd oder bitcoind? Welche ip und port ist gemeint, in den configs ist doch alles eingetragen?

1 „Gefällt mir“

Warum eigentlich beides getrennt in einer VM? Das blockiert unnötig Ressourcen.

Ich würde mit Docker arbeiten oder beides in eine VM stecken.

1 „Gefällt mir“

Gude.
Danke bisher an alle die sich dem angenommen haben :sunglasses: :boom:

Ich habe das Prozedere nun ein wenig mehr durchblickt. Da ich mehrere LN Nodes von der bitcoind speißen möchte habe ich nun in der bitcoind config folgende Parameter gesetzt:

Connections:
rpcauth:XXX:xxx
rpcallowip=0.0.0.0
rpcport=8765
rpcbind:0.0.0.0

LND RPC Connections
zmqpubrawblock=tcp://0.0.0.0:28332
zmqpubrawtx=tcp://0.0.0.0:28333

In der LND Config siehts folgendermaßen aus:

[Bitcoind]
bitcoind.estimatemode=ECONOMICAL
bitcoind.rpchost=0.0.0.0:8765
bitcoind.rpcuser=XXX
bitcoind.rpcpass=XXX:xxx
bitcoind.zmqpubrawblock=tcp://0.0.0.0:28332
bitcoind.zmqpubrawtx=tcp://0.0.0.0:28333

Die benötigten Ports habe ich freigegeben. Sudo ufw status und netstate -tulpn - lässt mich auslesen, dass soweit alles passt. Alles benötigte offen und lauscht auf der richtigen Stelle.

Wenn ich nun LND starte spuckt er mir folgenden Error aus:

lnd unable to create partial chain control invalid http POST response (nil), method, getblockhash, id: 1, last error=POST „http://0.0.0.0:8765“; dial tcp 0.0.0.0:8765: connect: connection refused

Zusammengefasst sieht dass dann so aus:

Started bitcoind and wait for full sync.
started lnd
Unlock wallet
Error occurs

Sieht hier einer worans liegt?

Liebe Grüße

Du hast 0.0.0.0 als als Ziel angegeben. Das ist eine ungültige IP. Du musst die lokale IP vom Bitcoin Node angeben.

1 „Gefällt mir“

ja, dein rpcallowip ist falsch. Du kannst mehrere rpcalliwip Enträge haben.

rpcallowip=<ip deiner LND-Node1>
rpcallowip=<ip deiner LND-Node2>
oder
rpcallowip=192.168.178.0/24

In der lnd.conf sind folgende Einträge falsch

bitcoind.rpchost=0.0.0.0:8765
bitcoind.zmqpubrawblock=tcp://0.0.0.0:28332
bitcoind.zmqpubrawtx=tcp://0.0.0.0:28333

Hier muss die echte interne IP deiner VM in der die bitcoind-Node läuft eingetragen werden z. Bsp.

bitcoind.rpchost=192.168.178.10:8765
bitcoind.zmqpubrawblock=tcp://192.168.178.10:28332
bitcoind.zmqpubrawtx=tcp://192.168.178.10:28333

Ist natürlich deine IP einzusetzen.

3 „Gefällt mir“

ja, dein rpcallowip ist falsch. Du kannst mehrere rpcalliwip Enträge haben.

Oke. Das war mir nicht bekannt. Gefällt mir sogar besser.

Mein Stand war, dass bei

rpcallowip=0.0.0.0

alle Nodes die zugreifen wollen freigegeben sind. Das ist also falsch?

Grüße

Würde sagen ja, dass bedeutet doch, dass nur die IP 0.0.0.0 zugreifen darf, die es aber nicht geben kann.

rpcallowip=0.0.0.0/0

sollte Zugriff für alle geben.

1 „Gefällt mir“

Danke euch.

Die IP´s sind nun korrekt in den jeweiligen Configs eingepflegt. Das sieht dann beim starten der bitcoind und der LND so aus:

Bitcoind:
Apr 10 12:40:35 blockchainserver bitcoind[13766]: 2023-04-10T12:40:35Z ThreadRPCServer incorrect password attempt from 192.168.178.31:57148

LND:
[…]

Apr 10 12:44:07 lndbb lnd[8107]: 2023-04-10 12:44:07.188 [INF] LNWL: Opened wallet
Apr 10 12:44:07 lndbb lnd[8107]: 2023-04-10 12:44:07.566 [INF] CHRE: Primary chain is set to: bitcoin
Apr 10 12:44:07 lndbb lnd[8107]: 2023-04-10 12:44:07.853 [ERR] LTND: unable to create partial chain control: status code: 401, response: „“
Apr 10 12:44:07 lndbb lnd[8107]: 2023-04-10 12:44:07.857 [ERR] LTND: Shutting down because error in main method: error creating wallet config: unable to create partial chain control: status code: 401, response: „“
Apr 10 12:44:07 lndbb lnd[8107]: 2023-04-10 12:44:07.882 [INF] LTND: Shutdown complete
Apr 10 12:44:07 lndbb lnd[8107]: error creating wallet config: unable to create partial chain control: status code: 401, response: „“
Apr 10 12:44:07 lndbb systemd[1]: lnd.service: Main process exited, code=exited, status=1/FAILURE
Apr 10 12:44:07 lndbb systemd[1]: lnd.service: Failed with result ‚exit-code‘.
Apr 10 12:44:07 lndbb systemd[1]: lnd.service: Consumed 6.433s CPU time.

Wenn ich das auslese bedeutet das mein Passwort ist falsch. Ich hab das in der LND Config nach folgender Syntax eingepflegt.
Generiert hab ich den Hash des Passworts mit dem Python Skript.
Sprich:

NAMEderMaschine:PASSWORTgehashed
XXX:xxx

Ist das so korrekt?

Grüße

In der lnd.conf sollte doch der rpcuser und rpcpass im Klarttext stehen?
Deine Anleitung wird wahrscheinlich nur funktionieren, wenn bitcoin und lnd auf den selben Rechner laufen.

1 „Gefällt mir“

Hier ist das Problem. Dein Passwort ist jetzt „NAMEderMaschine:PASSWORTgehashed“, wenn du es so eingibst. Der will Klartext.

Möchtest du das gehashte nutzen, verwende rpcauth statt rpcuser und rpcpass.

1 „Gefällt mir“

Es läuft. Danke an alle ihr im Thread! :slight_smile: :sunglasses:

1 „Gefällt mir“