是否可以通過暴露的 TCP 埠遠端連接到 c-lightning 節點?
如果你執行一個
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:9835
到docker
命令行。這將映射主機埠 9835 以將所有內容重定向到訪客埠 9835,從而使其可以通過 IP 127.0.0.1 從主機訪問,從主機的角度來看,它是 localhost。