Bitcoin-Core

比特幣 RPC 無法訪問:無法將 RPC 伺服器綁定到 IPV6

  • March 8, 2022

我嘗試了 bitcoin.conf 中的所有不同組合,以使我的比特幣節點(託管在受 VPN 保護的 AWS 中)可訪問,但似乎沒有任何效果……

只是為了清除它,我在機器上打開了埠 8332。

這是我的 bitcoin.conf:

txindex=1
server=1
rest=1
# Auth Credentials For JSON-RPC server
rpcuser=your_username
rpcpassword=your_password

#chain=test
testnet=1

#rpcallowip=0.0.0.0/0

[test]
rest=1
rpcallowip=0.0.0.0/0
rpcallowip=::/0

rpcbind=0.0.0.0:8332

# Listen for JSON-RPC connections on this port
#rpcport=8332

這是網路統計:

ubuntu@blahblah:~$ sudo ss -ltpn
State                      Recv-Q                      Send-Q                                              Local Address:Port                                              Peer Address:Port                                                                                      
LISTEN                     0                           128                                                       0.0.0.0:18333                                                  0.0.0.0:*                          users:(("bitcoind",pid=14485,fd=29))                           
LISTEN                     0                           128                                                       0.0.0.0:8332                                                   0.0.0.0:*                          users:(("bitcoind",pid=14485,fd=9))                            
LISTEN                     0                           128                                                 127.0.0.53%lo:53                                                     0.0.0.0:*                          users:(("systemd-resolve",pid=644,fd=13))                      
LISTEN                     0                           128                                                       0.0.0.0:22                                                     0.0.0.0:*                          users:(("sshd",pid=760,fd=3))                                  
LISTEN                     0                           128                                                          [::]:18333                                                     [::]:*                          users:(("bitcoind",pid=14485,fd=28))                           
LISTEN                     0                           128                                                          [::]:22                                                        [::]:*                          users:(("sshd",pid=760,fd=4))                   

我無法通過以下 RPC 呼叫到達我的節點:(在本地我可以)

curl --data-binary '{"jsonrpc":"1.0","id":"curltext","method":"getblockchaininfo","params":[]}' -H 'content-type:text/plain;' http://your_username:your_password@my_machine_ip:8332

我得到超時:

curl: (28) Failed to connect to my_machine_ip port 8332: Connection timed out

但是當我執行時:

docker run --name mynginx1 -p 8332:80 -d nginx

我可以從我自己的電腦上 curl 到 8332 並得到響應。

我的 docker 執行的 netstat:

ubuntu@blahblah:~$ sudo ss -ltpn
State              Recv-Q              Send-Q                            Local Address:Port                           Peer Address:Port
LISTEN             0                   4096                                    0.0.0.0:8332                                0.0.0.0:*                 users:(("docker-proxy",pid=13131,fd=4))
LISTEN             0                   128                               127.0.0.53%lo:53                                  0.0.0.0:*                 users:(("systemd-resolve",pid=644,fd=13))
LISTEN             0                   128                                     0.0.0.0:22                                  0.0.0.0:*                 users:(("sshd",pid=760,fd=3))
LISTEN             0                   4096                                       [::]:8332                                   [::]:*                 users:(("docker-proxy",pid=13139,fd=4))
LISTEN             0                   128                                        [::]:22                                     [::]:*                 users:(("sshd",pid=760,fd=4))

是什麼讓我得出結論,我的問題是我沒有與比特幣節點綁定的 IPv6 RPC。

我去了手冊並閱讀了以下內容:

-rpcbind=[:port] 綁定到給定地址以偵聽 JSON-RPC 連接。不要將 RPC 伺服器暴露給不受信任的網路,例如公共網際網路!除非還傳遞了 -rpcallowip,否則將忽略此選項。埠是可選的並覆蓋 -rpcport。對 IPv6 使用 [host]:port 表示法。此選項可以指定多次(預設值:127.0.0.1 和 ::1 即 localhost)

但是我試圖在 rpcbind 中指定 IPv6 的每一種方法都沒有幫助。

至少對於 IPv4,您不能0.0.0.0指定rpcbind. 如果您嘗試以下操作,您將在 bitcoind 日誌中收到此錯誤:

在地址 0.0.0.0 埠 18443 上綁定 RPC 失敗。

嘗試127.0.0.1IPv4 或::1/128IPv6。

bitcoind -rpcbind=127.0.0.1

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