Bitcoind

無法從同一本地網路中的其他機器呼叫 rpc api

  • June 14, 2021

無法從同一本地網路中的其他機器呼叫 rpc api

我的本地網路中有一個 regtest 節點,我只能從節點的機器呼叫rpc api ,而不是我的本地機器。

我知道rpcallowip在最近的版本中發生了變化<https://bitcoin.org/en/release/v0.18.0#configuration-option-changes>

http客戶端httpie

我本地機器的ip:192.168.1.155

btc節點的ip:192.168.1.132

8332被打開sudo ufw allow 8332

比特幣版本

$ bitcoind -version                 
# Bitcoin Core Daemon version v0.18.0.0-g2472733a24a9364e4c6233ccd04166a26a68cc65

命令啟動比特幣

我開始regtest,我的ip是192.168.1.155

bitcoind -regtest -deprecatedrpc=generate -printtoconsole -rpcuser=user -rpcpassword=password -rpcallowip=0.0.0.0/24 -rpcbind=127.0.0.1  -server -rpcport=8332

客戶要求

# request from btc node's machine
http POST http://user:password@127.0.0.1:8332 jsonrpc="2.0" method="getblockchaininfo" id=1
# successed

# request from my local machine 192.168.1.155
http POST http://user:password@192.168.1.132:8332 jsonrpc="2.0" method="getblockchaininfo" id=1
# http: error: ConnectionError: HTTPConnectionPool(host='192.168.1.132', port=8332): Max retries exceeded with url: / (Caused by NewConnectionError('&lt;urllib3.connection.HTTPConnection object at 0x7fd6e288f438&gt;: Failed to establish a new connection: [Errno 111] Connection refused',)) while doing POST request to URL: http://user:password@192.168.1.132:8332/

問題是您為**-rpcallowip-rpcbind**應用了錯誤的選項值。

-rpcbind=127.0.0.1

這個告訴 bitcoind 將 RCP 伺服器綁定到127.0.0.1 (localhost)。這意味著它只能從同一主機獲得。

-rpcallowip=0.0.0.0/24

0.0.0.0/24 表示IP 地址範圍為 0.0.0.1 - 0.0.0.254 的C 類網路

在您的情況下,正確的選項是:

-rpcallowip=192.168.1.0/24 -rpcbind=0.0.0.0

甚至更安全:

-rpcallowip=192.168.1.155 -rpcbind=192.168.1.132

最後,我創建了一個代理來解決它。我不確定此程式碼是否存在風險

<https://gist.github.com/toknT/195dc5bf6d5cb6c1cb89cd424ee783bf>

var httpProxy = require('http-proxy');
const rpcPort = process.env.RPC_PORT;
const exportPort = process.env.EXPORT_PORT;

httpProxy.createProxyServer({ target: `http://127.0.0.1:${rpcPort}` }).listen(exportPort);

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