比特币中的Tor支持

  • bitcoin
  • 发布于 7小时前
  • 阅读 70

本文档介绍了如何在比特币核心中配置和使用 Tor 以实现匿名连接。主要包括通过 Tor 代理运行比特币核心、自动创建比特币核心 Onion 服务以及手动配置 Onion 服务。同时,还提供了隐私建议,以确保通过 Tor 网络运行比特币节点时的安全性。

Bitcoin 中的 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 查看有关你的 Tor 配置的信息

有几种方法可以在 Bitcoin Core 中查看你的本地 onion 地址:

  • 在 CLI -netinfo 的“本地地址”输出中
  • 在 RPC getnetworkinfo 的 "localaddresses" 输出中
  • 在调试日志中(grep 搜索 "AddLocal"; Tor 地址以 .onion 结尾)

你可以设置 -debug=tor 配置日志选项,以便在调试日志中获得关于你的 Tor 配置的更多信息。

CLI -addrinfo 返回你的节点所知的每个网络的地址数量。这有助于查看你的节点知道多少个 onion 对等节点,例如对于 -onlynet=onion

你可以使用 getnodeaddresses RPC 获取你的节点所知的若干个 onion 对等节点;运行 bitcoin-cli help getnodeaddresses 获取详细信息。

bitcoin rpc 也可以替换为 bitcoin-cli

1. 在 Tor 代理后面运行 Bitcoin Core

第一步是在 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 nodebitcoin gui 也可以替换为 bitcoind

2. 自动创建 Bitcoin Core onion 服务

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 torsudo systemctl restart tor,包括最近的 Debian 和 Ubuntu,或者只需重启计算机)。

身份验证

连接到 Tor 的控制套接字 API 需要配置两种身份验证方法之一:cookie 身份验证或 bitcoind 的 -torpassword 配置选项。

Cookie 身份验证

对于 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)。

3. 手动创建 Bitcoin Core onion 服务

你还可以手动配置你的节点以从 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

4. 隐私建议

  • 不要将 Bitcoin Core 端口以外的任何内容添加到第 3 节中创建的 onion 服务。 如果你也运行 Web 服务,请为该服务创建一个新的 onion 服务。 否则,将它们链接起来很简单,这可能会降低隐私。自动创建的 Onion 服务(如第 2 节中所述)始终只有一个开放端口。
  • 原文链接: github.com/bitcoin/bitco...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
bitcoin
bitcoin
江湖只有他的大名,没有他的介绍。