TLDR:我可以通过 SSH 连接洋葱地址,但不能通过 CNAME 连接该地址的主机名。
我有作为 Tor 服务运行的 SSH 服务器,但我不想记住洋葱地址。我知道我可以将名称添加到我的 SSH 客户端配置中,但这样做的目的是在我借用别人的电脑时能够访问我的电脑,显然我不想过多地干扰其他人的设置。(是的,这些其他电脑实际上可能已经安装了 Tor。)所以我设置了一个主机名,其中的 CNAME 记录指向洋葱地址。如果我这样做torify ssh myaddress.onion
,它可以正常工作,但torify ssh mydomain.com
结果是:
1565911820 ERROR torsocks[31652]: Unable to resolve. Status reply: 4 (in socks5_recv_resolve_reply() at socks5.c:683)
ssh: Could not resolve hostname mydomain.com: Non-recoverable failure in name resolution
(不,我并没有真正输入mydomain.com
;错误已被编辑。)
执行后dig -t CNAME mydomain.com
会返回洋葱地址。到目前为止,我的所有测试都在主机本身(LUbuntu 18.04.3)上进行。
答案1
这是因为您没有理解 DNS 的工作原理,而且.onion
在公共 DNS 中这不是一个有效的 TLD。让我给您上一堂 CNAME 解析速成课,并为您提供一个解决方案,让您尝试在您这边对此进行“别名化”。
DNS CNAME 解析
DNS CNAME 记录称为别名它们充当一个指针,表示“这个域名是另一个域名的别名,解析该域名并转到该目的地。”
如果我有一个域名example1.com
,其 A 记录为 1.2.3.4,即我的实际服务器,并example2.com
设置为 CNAME example1.com
,那么当我转到example2.com
DNS 时,将看到example2.com
A 记录解析的 DNS 记录取决于记录example1.com
。这在普通 DNS 中有效,因为它是公开寻址的,并且可以查找。
CNAME 目标实际上并未与正在进行的 DNS 查找的 DNS 查找结果“共享”,仅关心生成的 A/AAAA 记录,并且由于不可能存在这样的记录,因此.onion
无法正确进行 DNS 查找,并失败。解释如下。
洋葱决议为何失败
CNAME 记录不是与 Tor ONION 地址相同。当您.onion
在标准 DNS 中查找针对地址的 CNAME 记录时,它会硬失败。这是因为在公共 DNS 中,.onion
无法寻址并且不是有效的 TLD。
CNAME 记录也不要以“重定向”格式“解析”到别名地址(如您所想) - CNAME 只会正确解决如果 CNAME 指针的目标实际上可以返回公共 DNS 记录。因为它.onion
永远不会返回公共 DNS 记录,所以它在查找中要么出现 NXDOMAIN,要么出现 SERVFAIL。
这就是您收到错误的原因。
那么我怎样才能让它工作呢?
通过“作弊”并稍微配置您的 SSH 配置。
尝试将此部分添加到您的~/.ssh/config
文件中(如果不存在则创建该文件):
Host mydomain.com
Hostname myaddress.onion
然后尝试再次通过 SSH 连接到mydomain.com
。它应该将其重新指向您.onion
在幕后的地址。
然而,不要依靠 DNS 将域指向.onion
地址 - 它们在域的公共 DNS 中不起作用。
答案2
普通的 DNS 号。如何保存在 txt 记录中并像这样包装呼叫
torify ssh $(dig +short example.com -t txt)