如何从仅支持 IPv6 的网络访问 IPv4 地址?

如何从仅支持 IPv6 的网络访问 IPv4 地址?

我想通过 IPv6 地址访问此地址:
http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/

在我们的 Freifunk 路由器中没有可用的 DNS,因此downloads.openwrt.org无法解析名称。互联网上的所有服务器只能通过 ipv6 地址访问。现在我们无法从路由器内部访问此软件包镜像以通过 安装软件包opkg install

如果我们可以将其添加到我们的配置中,这将是一个解决方案,例如:

http://[2001:db8::1]/attitude_adjustment/12.09/ar71xx/generic/packages/

我们的路由器运行的是 OpenWRT,并且仅支持 IPv6,我想添加一个条目,/etc/hosts以便域名downloads.openwrt.org解析为适当的 IPv6 地址

可以将 IPv6 重定向到域吗?

答案1

您不能简单地“添加” IPv6 地址来访问仅通过 IPv4 可用的主机。这是两种完全不同且不兼容的协议。

为了您的 IPv6-仅有的网络能够访问 IPv4 地址,需要一个可以访问 IPv4 的网关。这通常通过 NAT64/DNS64 网关完成,该网关将 IPv4 地址转换为“假”IPv6 地址,并接受与这些“假”IPv6 地址的连接并将连接转换为 IPv4 网络。这些 IPv6 地址将在范围内64:ff9b::/96

在 OpenWrt 中,NAT64 通过 Tayga 实现,DNS64 通过 bind 实现。有关如何设置它们的更多信息,请参阅可在 OpenWrt wiki 中找到。你需要“态度调整”或“障碍突破”;以前的 OpenWrt 版本对 IPv6 和其他技术的支持不够完整。

您可以将公共 DNS64/NAT64 解析器添加到您的 /etc/resolv.conf:

nameserver 2001:67c:2b0::4
nameserver 2001:67c:2b0::6

您还可以在客户端网站上“恢复”翻译,使用464xlat。464xlat 使用相同的工具。(如上所述,但方式不同)。使用 464xlat,您还可以访问具有文字 IP 的 URL。

答案2

该域downloads.openwrt.org有 IPv4 地址,但没有 IPv6 地址。因此,除非使用转换机制,否则您无法通过 IPv6 访问该域。您可以使用 NAT64 来从仅 IPv6 客户端创建到仅 IPv4 服务器的 TCP 连接。

但是,为什么要使用仅支持 IPv6 的客户端呢?使用双栈是个好主意,但目前,仅支持 IPv6 的客户端实际上只对那些知道在拥有太多仅支持 IPv4 的主机的世界中引入的局限性的人有用。

如果您设法打开与服务器的 TCP 连接,您将面临另一个挑战。HTTP 版本 1.1 要求客户端通过 HTTP 连接发送它正在联系的服务器的名称。许多网站(包括)都downloads.openwrt.org要求发送此标头。

如果您的 HTTP 客户端知道要发送的域名,则只能发送该标头。因此,您最好让客户端知道原始 URL,并以某种方式授予其将该名称解析为 IP 地址的权限。如果必须是 IPv6,那仍然意味着您需要 NAT64。但是,可以将域名映射到 NAT64 IP 地址/etc/hosts,并且应该可以正常工作。

对于单个域名来说,这可能没问题。但是,如果您希望仅支持 IPv6 的主机能够访问多个域,而不必将每个域都放入/etc/hostsNAT64 地址中,则需要动态转换地址。这就是 DNS64 的用途。

现在,如果客户端确实具有 IPv4 访问权限并且仅缺少 DNS,那么答案就变得简单多了。只需/etc/hosts像 davidgo 建议的那样输入 IPv4 地址即可。当然,每次服务器的 IP 地址发生变化时,您都需要更新该文件,希望这种情况不会太频繁。

答案3

我认为你可能问错了问题——你不能将 IPv6 地址重定向到域,因为该过程以相反的方式工作,即域解析为一个 [或多个] 主机。

我无法找到有关您的路由器的任何信息,但如果它运行 OpenWRT,您应该能够在 /etc/hosts 中添加一个条目,以便域名解析为适当的 IP 地址。

相关内容