C-Lightning

是否可以通過暴露的 TCP 埠遠端連接到 c-lightning 節點?

  • July 8, 2019

如果你執行一個EXPOSE_TCP設置為 True 的 c-lightning 節點,在我看來應該可以遠端連接它,前提是 c-lightning RCP 正在監聽所有傳入的流量。(IP 設置為 0.0.0.0)

我嘗試了c-lightning 自述文件中推薦的 Docker 設置,當我使用 socat 直接從 Docker 容器內部連接時,一切都很順利:

socat - UNIX-CONNECT:/home/simnet/.lightning/lightning-rpc

但是當我嘗試從容器主機使用 socat 時,連接在打開時直接關閉,沒有錯誤或任何東西:

socat - tcp:127.0.0.1:14302

埠似乎已正確映射

0.0.0.0:14302->9835/tcp

我不明白我在這裡缺少什麼。甚至可以使用此設置進行遠端連接嗎?我也讀過這個問題,答案建議在 Docker 容器內使用 socat 將 Unix 套接字橋接到 TCP,但在我看來,這EXPOSE_TCP本來就是要做到這一點的。

更新:儘管參數肯定設置為 True,但 API 似乎並沒有真正通過 TCP 公開。我是這樣發現的:

  • 我什至無法從 docker 容器內部通過 TCP 使用 API
  • 然後我使用 socat 手動將 Unix 套接字橋接到 TCP。socat -d -d TCP-LISTEN:9835,fork,reuseaddr UNIX-CONNECT:/home/user/.lightning/lightning-rpc
  • 在此之後,我能夠遠端連接到 lignting-c 節點。

因此,c-lightning 在解釋此設置時可能有問題,或者我的設置可能有問題。我將進一步探索並報告。

EXPOSE_TCP在 c-lightning 的 docker 腳本中實現:

<https://github.com/ElementsProject/lightning/blob/2945b25b57db37dca31c10da34a4b1ca33d697c3/Dockerfile#L103>

<https://github.com/ElementsProject/lightning/blob/master/tools/docker-entrypoint.sh>

如果你沒有使用那個腳本或者沒有在你自己的 docker 腳本中實現它,它就不會工作。

EXPOSE_TCP在啟動 c-lighting 時很容易誤認為您可以設置的參數。

您可能缺少與 docker 映像的埠綁定。由於您能夠從 docker 容器內部連接到埠,因此socat似乎可以正常工作。

為了向主機作業系統公開 TCP 埠,您需要添加-p 9835:9835docker命令行。這將映射主機埠 9835 以將所有內容重定向到訪客埠 9835,從而使其可以通過 IP 127.0.0.1 從主機訪問,從主機的角度來看,它是 localhost。

引用自:https://bitcoin.stackexchange.com/questions/88862