0%

比特币节点远程访问

比特币节点远程访问

在上一篇文章中详细描述了比特币节点的配置,其中诸多参数的意义可以在上文中找到解释,也可以使用 -help 或者 -?来查看说明。本文讲是配置一台运行比特币的服务器(我的环境是乌班图),远程访问比特币核心

通过比特币核心提供的RPC服务来和比特币核心进行交互。在网上用配置比特币远程服务等关键字搜索得到的信息好多都是过时的,因为比特币版本升级迭代的比较快。请注意本文配置的时间节点是 2019-9-1,后续参考本文请注意时间节点。

在默认的状态下,bitcoind(以后统称为bitcoind),监听的是本地回环地址 127.0.0.1 。默认监听的正式地址的端口是 8332

1
2
3
$ netstat -alpn | grep 8332
tcp 0 0 127.0.0.1:8332 0.0.0.0:* LISTEN 18787/bitcoind
tcp6 0 0 ::1:8332 :::* LISTEN 18787/bitcoind

在本地节点使用 bitcoin-cli 或者本地(same machine)访问节点是没问题的,使用 localhost 即可(可以不要用户名和密码)。但是无法远程访问。

在linux系统下,配置放在 ~/.bitcoin/bitcoin.conf 中,如果你要远程访问,配置参考如下

1
2
3
4
5
6
7
# 1代表开启rpc服务 0代表关闭
server=1
rpcbind=10.0.1.5
rpcallowip=0.0.0.0/0
rpcport=8332
rpcuser=bitcoin
rpcpassword=password

需要注意的是

当开启 rpc 服务时刻,直接访问运行 bitcoind 主机的 ip 会看到

JSONRPC server handles only POST

以上这句话代表 rpc 服务是开启的。

如果你用以上的配置去启动 bitcoind ,就会把 rpc 服务绑定在 ip “10.0.1.5” 上,同时使用了 port 8332。当然,为了授权 user 和 password 也是必须的。

比特币 rpc 服务使用的是白名单模式,你要指定允许访问的 ip 必须在配置 rpcallowip 指定,不然的话 rpcbind 是无法生效的。也就是说 rpcallowip 和 rpcbind 需要同时设定,你可以看到这句话

-rpcbind=[:port]
Bind to given address to listen for JSON-RPC connections. Do not expose
the RPC server to untrusted networks such as the public internet!
This option is ignored unless -rpcallowip is also passed. Port is
optional and overrides -rpcport. Use [host]:port notation for
IPv6. This option can be specified multiple times (default:
127.0.0.1 and ::1 i.e., localhost)

想允许更多的 ip 访问 bitcoind 可以参考我的配置。网上很多文章中提到的 使用 * 做通配符,是过时的。这么做会导致 bitcoind 无法正常启动 。具体可以参考比特币官网文档。

注意:我这种配置是极度不安全的,强烈不建议这么做,为了安全起见请合理使用白名单。

然后可以找一台白名单中的机器调用服务端的 rpc 接口

1
curl --user bitcoin --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getnetworkinfo", "params": [] }' -H 'content-type: text/plain;' http://10.0.1.5:8332/

能正确获取 json 就好了。

如果不会 curl 请参考这一篇 https://man.linuxde.net/curl

参考文章

https://ma.ttias.be/enable-the-rpc-json-api-with-password-authentication-in-bitcoin-core/

关于 rpcbind 的说明请参考(我 checkout 版本为0.18)

https://bitcoin.org/en/release/v0.18.0#configuration-option-changes

小结

网络上资料都有时效性,目前很多资料都没提到 rpcbind ,请多阅读比特币官方说明和检索外文资料。这类资料价值相对更高,利于快速解决问题。