0

I am running bitcoind on a DigitalOcean droplet with public IP address e.g. 1.1.1.1.

I would like to connect to it via RPC from another DigitalOcean droplet with public IP address e.g. 2.2.2.2.

Both Droplets are running Ubuntu Linux 18.04.

~/.bitcoin/bitcoin.conf on 1.1.1.1:

datadir=/mnt/vol1
disablewallet=1
rpcbind=1.1.1.1
rpcuser=x
rpcpassword=x
rpcallowip=2.2.2.2/32
server=1

netstat -ln | grep 8332 on 1.1.1.1 yields:

tcp        0      0 127.0.0.1:8332          0.0.0.0:*               LISTEN
tcp6       0      0 ::1:8332                :::*                    LISTEN

RPC commands on 1.1.1.1 such as ./bitcoin-cli -rpcuser=x -rpcpassword=x -rpcconnect=localhost -rpcport=8332 getnetworkinfo return normally.

However, on machine 2.2.2.2, when I run ./bitcoin-cli -rpcuser=x -rpcpassword=x -rpcconnect=1.1.1.1 -rpcport=8332 getnetworkinfo I get:

error: Could not connect to the server 1.1.1.1:8332

Make sure the bitcoind server is running and that you are connecting to the correct RPC port.

Machine 1.1.1.1 has firewall rules in DigitalOcean as follows:

Type        Protocol        Port Range      Sources
SSH         TCP             22              2.2.2.2/32
Custom      TCP             8332            2.2.2.2/32

Note that SSH into 1.1.1.1 from 2.2.2.2 is working just fine.

sudo iptables -L on 1.1.1.1 gives:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

Is there anything obviously wrong in my configuration or setup?

Running curl -v 1.1.1.1:8332 on 2.2.2.2 immediately returns with:

* Rebuilt URL to: 1.1.1.1:8332/
*   Trying 1.1.1.1...
* connect to 1.1.1.1 port 8332 failed: Connection refused
* Failed to connect to 1.1.1.1 port 8332: Connection refused
* Closing connection 0
curl: (7) Failed to connect to 1.1.1.1 port 8332: Connection refused

which from what I have read likely indicates a firewall issue.

  • You need an rpcbind= line in your config, as bitcoind is only binding by default on the localhost interface which in inaccessible to the outside world. Also, what you're doing is highly inadvisable, as anyone on the internet will have access to your RPC interface; it's better to tunnel it using ssh proxies, or using something like stunnel for security. – Pieter Wuille Aug 26 '19 at 13:48
  • @PieterWuille thank you very much for your comment. I have included rpcbind=1.1.1.1 in my bitcoind.conf and now I can connect successfully. Regarding your second comment, surely it is safe if I use an IP address whitelist at the network level? Or are you suggesting that someone can spoof the whitelisted IP and connect to my RPC service using the plaintext credentials? – Adriaan Joubert Aug 26 '19 at 15:58
0

bitcoin.conf should contain the machine's own IP address as an argument to the rpcbind parameter.

For example, if you are running bitcoind on a machine with IP address 1.1.1.1 and you wish to connect to its RPC server from a different machine, your bitcoin.conf file on machine 1.1.1.1 should contain the line rpcbind=1.1.1.1.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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