4

cannot call rpc api from other machine in same local network

There is a regtest node in my local network , I can call rpc api only from the node's machine,not my local machine.

I know rpcallowip is changed in recent release https://bitcoin.org/en/release/v0.18.0#configuration-option-changes

http clinet httpie

my local machine's ip: 192.168.1.155

btc node's ip: 192.168.1.132

the port 8332 is opened sudo ufw allow 8332.

bitcoind version

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

command start bitcoind

I start regtest , and my ip is 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

client request

# request from btc node's machine
http POST http://user:[email protected]:8332 jsonrpc="2.0" method="getblockchaininfo" id=1
# successed

# request from my local machine 192.168.1.155
http POST http://user:[email protected]: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:[email protected]:8332/
7
  • rpcbind should probably be 0.0.0.0 Oct 14, 2019 at 7:42
  • @RaghavSood bitcoind -regtest -deprecatedrpc=generate -printtoconsole -rpcuser=user -rpcpassword=password -rpcallowip=0.0.0.0/24 -rpcbind=0.0.0.0 -server -rpcport=8332 still return Failed to establish a new connection. Oct 14, 2019 at 8:03
  • Try changing rpcallowip to 192.168.1.155, I believe some (all?) of the RPC options don't accept netmasks Oct 14, 2019 at 8:31
  • @RaghavSood It still doesn't work. What's your bitcoind versiosn? Oct 14, 2019 at 8:53
  • @ToknsitToknsit I had a simil problem and the problem was the local network, and the example you use more modem to connect? Oct 27, 2019 at 21:48

3 Answers 3

5

The problem is that you apply wrong options values for -rpcallowip and -rpcbind.

-rpcbind=127.0.0.1

This one tells bitcoind to bind RCP server to 127.0.0.1(localhost). That means it will be available from the same host only.

-rpcallowip=0.0.0.0/24

0.0.0.0/24 means Class C network with IP address range 0.0.0.1 - 0.0.0.254

The correct options in your case are:

-rpcallowip=192.168.1.0/24 -rpcbind=0.0.0.0

or even more secure:

-rpcallowip=192.168.1.155 -rpcbind=192.168.1.132
2
0

Finally,I create a proxy to solve it. I am not sure if there is a risk of this code.

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);
0

To expand on the answer from @Slavik Svyrydiuk : it only worked for me when starting the daemon with those options (-rpcbind=0.0.0.0 -rpcallowip=192.168.1.0/24).

If I set those in the conf and just started it like normal (sudo bitcoind -daemon) then it WOULD NOT open the port to external connections. It works only if I start the daemon with those settings like this:

sudo bitcoind -daemon -rpcbind=0.0.0.0 -rpcallowip=192.168.1.0/24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.