通过域名而非公网 IP 地址连接 SSH 端口 22

通过域名而非公网 IP 地址连接 SSH 端口 22

我有一台 Draytek 路由器,配置为仅将来自特定 IP 地址的 SSH 连接端口转发到内部服务器。客户端和我自己都可以成功进行外部连接,但有一个客户端无法连接到我们路由器的公共静态 IP 地址,只能连接到其域名。router.domain.com 路由器是否应该分配一个域名??不太确定为什么它们只能连接到域名而不能连接到 IP - 感谢建议

答案1

根据问题中的有限信息,无法确定为什么使用主机名的连接有效,但使用 IP 地址连接到同一台服务器却无效。

不过我猜最有可能的解释是客户端依赖 DNS64+NAT64 来连接到服务器。由于 IPv4 地址用完了,各种 CGN 解决方案的部署变得越来越普遍。其中一种是 DNS64+NAT64,而这些解决方案的限制是客户端无法通过 IP 地址连接到 IPv4 服务器。

当这样的客户端连接到仅支持 IPv4 的服务器时,将发生以下情况:

  • 客户端发送 AAAA 查询server.example.com
  • DNS64 服务器发送 AAAA 查询server.example.com
  • 权威服务器发送 NOANSWER。
  • DNS64 服务器发送查询server.example.com
  • 权威服务器响应192.0.2.1
  • DNS64 转换192.0.2.164:ff9b::192.0.2.1
  • 客户端连接到地址上的 NAT6464:ff9b::192.0.2.1
  • NAT64 转换64:ff9b::192.0.2.1192.0.2.1

如果客户端是 OpenSSH,您可以ssh -v在客户端使用查看它连接到哪个 IP 地址。如果服务器仅是 IPv4,并且客户端在给定主机名时连接到 IPv6 地址,您将知道客户端依赖于 DNS64+NAT64。

如果由于 NAT64 而无法连接到 IP 地址,可以采取以下缓解措施:

  • 在服务器上启用 IPv6,并在当前 A 记录旁边创建 AAAA 记录。客户端现在可以直接连接到服务器的 IPv6 地址。即使客户端继续使用主机名连接,这也是首选方法,因为它将消除对 NAT64 的依赖。
  • 保持原样。您说使用服务器主机名的连接有效。因此 DNS64+NAT64 工作正常,无需立即更改任何内容。在大多数情况下,使用主机名的连接被认为比直接连接到 IP 地址更好,因此没有真正的理由停止使用主机名。
  • 让客户端使用主机名连接一次以了解 DNS64 映射到的 IPv6 地址,然后继续使用此 IPv6 地址通过 NAT64 进行连接。(有效但似乎有点愚蠢)
  • 让客户端使用 NAT464。此解决方案适用于客户端软件仅支持 IPv4 但客户端连接到仅 IPv6 接入网络的情况。但是,如果通过主机名进行的连接已经有效,则不需要 NAT464,最好使用其他解决方案之一。

相关内容