Bitcoind
無法從同一本地網路中的其他機器呼叫 rpc api
無法從同一本地網路中的其他機器呼叫 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('<urllib3.connection.HTTPConnection object at 0x7fd6e288f438>: 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);