本文档介绍了如何在比特币核心中配置和使用 Tor 以实现匿名连接。主要包括通过 Tor 代理运行比特币核心、自动创建比特币核心 Onion 服务以及手动配置 Onion 服务。同时,还提供了隐私建议,以确保通过 Tor 网络运行比特币节点时的安全性。
可以把 Bitcoin Core 作为一个 Tor onion 服务来运行,并连接到此类服务。
以下说明假定你有一个 Tor 代理在端口 9050 上运行。许多发行版默认让 SOCKS 代理监听端口 9050,但其他发行版可能不是这样。特别是,Tor Browser Bundle 默认监听端口 9150。
从 22.0 版本开始,Bitcoin Core 仅支持 Tor 第 3 版隐藏服务 (Tor v3)。Tor v2 地址会被 Bitcoin Core 忽略,既不会转发也不会存储。
Tor 从 0.4.6 版本开始移除了 v2 支持。
有几种方法可以在 Bitcoin Core 中查看你的本地 onion 地址:
-netinfo
的“本地地址”输出中getnetworkinfo
的 "localaddresses" 输出中.onion
结尾)你可以设置 -debug=tor
配置日志选项,以便在调试日志中获得关于你的 Tor 配置的更多信息。
CLI -addrinfo
返回你的节点所知的每个网络的地址数量。这有助于查看你的节点知道多少个 onion 对等节点,例如对于 -onlynet=onion
。
你可以使用 getnodeaddresses
RPC 获取你的节点所知的若干个 onion 对等节点;运行 bitcoin-cli help getnodeaddresses
获取详细信息。
bitcoin rpc
也可以替换为 bitcoin-cli
。
第一步是在 Tor 代理后面运行 Bitcoin Core。这已经可以匿名化所有传出的连接,但还有更多可能。
-proxy=ip[:port]
设置代理服务器。它也将用于尝试访问 .onion 地址。你需要使用 -noonion 或 -onion=0 来显式禁用对 onion 服务的出站访问。
-proxy=ip[:port]=tor
或
-onion=ip[:port]
设置用于访问 .onion 地址的代理服务器。如果它与通用的 -proxy 相同,则无需设置此项。你可以使用 -onion=0 显式禁用对 onion 服务的访问。
------------------------------------------------------------------------
注意:DNS 请求的代理取自
-proxy=addr:port 或
-proxy=addr:port=ipv4 或
-proxy=addr:port=ipv6
(如果给出了多个选项,则取最后一个)。它不是取自
-proxy=addr:port=tor 或
-onion=addr:port。
如果没有为 DNS 请求配置代理,那么它们将使用操作系统提供的函数来完成,这很可能导致它们通过 **明网** 到互联网服务提供商的 DNS 服务器上完成。
------------------------------------------------------------------------
如果多次指定 -proxy 或 -onion,则后面的出现会覆盖前面的,并且命令行会覆盖配置文件。UNIX 域套接字可用于代理连接。将 -onion
或 -proxy
设置为带有前缀 unix:
的本地套接字路径(例如 -onion=unix:/home/me/torsocket
)。
-listen
当使用 -proxy 时,默认情况下禁用监听。如果你想手动配置 onion 服务(参见第 3 节),你需要显式地启用它。
-connect=X
-addnode=X
-seednode=X
当在 Tor 代理后面时,你可以在这些参数中指定 .onion 地址,而不是 IP 地址或主机名。这些地址也可以与其他 P2P 节点交换。
-onlynet=onion
仅自动出站连接到 .onion 地址。入站和手动连接不受此选项的影响。可以多次指定以允许多个网络,例如 onlynet=onion, onlynet=i2p, onlynet=cjdns。
在典型情况下,这足以在 Tor 代理后面运行:
bitcoind -proxy=127.0.0.1:9050
bitcoin node
或 bitcoin gui
也可以替换为 bitcoind
。
Bitcoin Core 利用 Tor 的控制套接字 API 以编程方式创建和销毁临时 onion 服务。这意味着如果 Tor 正在运行并且已配置正确的身份验证,Bitcoin Core 会自动创建一个 onion 服务来监听。目标是增加可用的 onion 节点的数量。
如果 Bitcoin Core 正在监听 (-listen
) 并且需要 Tor 连接才能工作,则默认启用此功能。可以使用 -listenonion=0
显式禁用它。如果未禁用,则可以使用 -torcontrol
和 -torpassword
设置进行配置。
要在 bitcoind 调试日志中查看详细的 Tor 信息,请传递 -debug=tor
。
你可能需要设置 Tor 控制端口。在 Linux 发行版上,/etc/tor/torrc
中可能存在以下部分或全部设置,通常默认情况下被注释掉(如果没有,则添加它们):
ControlPort 9051
CookieAuthentication 1
CookieAuthFileGroupReadable 1
DataDirectoryGroupReadable 1
添加或取消注释这些行,保存并重启 Tor(通常在大多数基于 systemd 的系统上是 systemctl restart tor
或 sudo systemctl restart tor
,包括最近的 Debian 和 Ubuntu,或者只需重启计算机)。
连接到 Tor 的控制套接字 API 需要配置两种身份验证方法之一:cookie 身份验证或 bitcoind 的 -torpassword
配置选项。
对于 cookie 身份验证,运行 bitcoind 的用户必须具有对 Tor 配置中指定的 CookieAuthFile
的读取权限。在某些情况下,这是预先配置好的,并且 onion 服务的创建是自动的。不要忘记使用 -debug=tor
bitcoind 配置选项来启用 Tor 调试日志记录。
如果在调试日志中看到权限问题,例如 tor: Authentication cookie /run/tor/control.authcookie could not be opened (check permissions)
,可以通过将运行 Tor 的用户和运行 bitcoind 的用户都添加到同一个 Tor 组并适当地设置权限来解决。
在 Debian 派生的系统上,Tor 组很可能是 debian-tor
,并且一种验证方法是列出组并 grep 搜索 "tor" 组名:
getent group | cut -d: -f1 | grep -i tor
你还可以检查 cookie 文件的组。在大多数 Linux 系统上,Tor 身份验证 cookie 通常是 /run/tor/control.authcookie
:
TORGROUP=$(stat -c '%G' /run/tor/control.authcookie)
一旦你确定了 ${TORGROUP}
并选择了将运行 bitcoind 的 ${USER}
,以 root 身份运行此命令:
usermod -a -G ${TORGROUP} ${USER}
然后重启计算机(或注销)并以将运行 bitcoind 的 ${USER}
身份登录。
torpassword
身份验证对于 -torpassword=password
选项,密码是用于为 Tor 配置文件中的 HashedControlPassword
选项生成哈希密码的明文形式。
可以使用命令 tor --hash-password password
获取哈希密码(有关更多详细信息,请参阅 Tor Dev Manual)。
你还可以手动配置你的节点以从 Tor 网络访问. 将以下行添加到你的 /etc/tor/torrc
(或等效的配置文件)中:
HiddenServiceDir /var/lib/tor/bitcoin-service/
HiddenServicePort 8333 127.0.0.1:8334
该目录当然可以不同,但虚拟端口号应等于你的 bitcoind 的 P2P 监听端口(默认为 8333),并且目标地址和端口应等于入站 Tor 连接的绑定地址和端口(默认为 127.0.0.1:8334)。
-externalip=X 你可以使用此选项告诉 bitcoin 关于其公共可访问的地址,并且这可以是 onion 地址。给定以上配置,你可以在 /var/lib/tor/bitcoin-service/hostname 中找到你的 onion 地址。对于来自不可路由地址(例如 127.0.0.1,Tor 代理通常在此处运行)的连接,onion 地址优先用于你的节点宣传自身。
你可以使用 -externalip 设置多个本地地址。将向特定对等方广播的地址是最兼容的地址,并且还使用启发式方法,例如具有最多传入连接的地址等。
-listen 你需要启用对传入连接的侦听,因为在代理后面,默认情况下它是关闭的。
-discover 当指定 -externalip 时,不会尝试发现本地 IPv4 或 IPv6 地址。如果你想运行双栈,从 Tor 和 IPv4(或 IPv6)都可以访问,你需要使用 -externalip 传递你的其他地址,或者显式启用 -discover。请注意,双栈系统的两个地址可能很容易使用流量分析进行链接。
在典型情况下,如果你只能通过 Tor 访问,则这应该足够了:
bitcoind -proxy=127.0.0.1:9050 -externalip=7zvj7a2imdgkdbg4f2dryd5rgtrn7upivr5eeij4cicjh65pooxeshid.onion -listen
(显然,将 .onion 地址替换为你自己的地址)。应该注意的是,你仍然在所有设备上进行侦听,并且另一个节点可以在知道你的地址时建立 明网 连接。为了减轻这种情况,额外绑定你的 Tor 代理的地址:
bitcoind ... -bind=127.0.0.1:8334=onion
如果你不太关心隐藏你的节点,并且希望也可以通过 IPv4 访问,请改用 discover
:
bitcoind ... -discover
并在你的防火墙上打开端口 8333(或使用端口映射,即 -natpmp
)。
如果你只想使用 Tor 来访问 .onion 地址,但不将其用作普通 IPv4/IPv6 通信的代理,请使用:
bitcoind -onion=127.0.0.1:9050 -externalip=7zvj7a2imdgkdbg4f2dryd5rgtrn7upivr5eeij4cicjh65pooxeshid.onion -discover
- 原文链接: github.com/bitcoin/bitco...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!