![为虚拟机提供静态 ipv6 地址](https://linux22.com/image/780938/%E4%B8%BA%E8%99%9A%E6%8B%9F%E6%9C%BA%E6%8F%90%E4%BE%9B%E9%9D%99%E6%80%81%20ipv6%20%E5%9C%B0%E5%9D%80.png)
我是一名“网络初学者”,所以我希望这个问题有意义。
我有一台 Ubuntu 22.04 服务器和一台基于 qemu/multipass 的虚拟机(也运行 Ubuntu 22.04)。目标是让 Web 服务器在虚拟机中运行。为此,我使用 ipv4 端口转发。
该机器有一个公共 ipv4 和一个 ipv6 /64 网络。
我可以使用 ipv4(端口 80 和 443)从外部连接到 Web VM,但不能使用 ipv6。我还需要什么才能让 Web 具有 ipv6 连接?我是否也需要启用 ipv6 端口转发,或者我应该(如何)从 /64 网络为虚拟机提供一个公共 ipv6 地址?
我还应该提供其他信息吗?
答案1
对我在评论中表达的意思做一点解释:
据我所知,你有一个 VPS,本机 IPv6 连接并且位于 /64 子网。
在这台机器上,你想给virtual hosts
QEMU/Multipass 等提供一个 IPv6 地址。你也可以说 Docker/Podman 或其他虚拟化软件,这其实并不重要,因为总体思路是一样的。
所有这些虚拟主机都在自己的子网上正常运行,这意味着您需要一个单独的 /64 子网如果您希望这些主机通过 IPv6 与 Internet 通信。
SLAAC
原因是由于 IP 分配方案(例如)或EUI-64
因为它们使用network MAC address
作为 IPv6 地址生成的一部分,所以地址的最后 64 位始终为主机地址保留。
由于您的提供商仅为您分配了一个 /64 子网,因此您必须采取一些措施才能为虚拟主机提供 IPv6 地址。
一种方法是将它们隐藏在 IPv6 NAT 后面,但这违背了 IPv6 的整个目的。
另一个选择是获取可路由的 /64 子网。
我怀疑你的托管服务提供商是否会给你一个,所以下一个最好的办法是使用Tunnelbroker.net。
在这里您可以获得可路由的 /64 和 /48 子网。
然而:
你的麻烦还没有解决,因为你现在有一个带有两个出站 IPv6 连接的服务器,所以你必须了解source based routing
也称为policy based routing
。
简而言之,您需要设置两个路由表。
一个用于来自主机本身的流量,它使用主路由表。
main
在 Linux 中它被称为。一个用于来自虚拟主机的流量。您可以随意命名,例如
tunnelbroker
。
关于该术语的简要说明default gateway
:
该规则用于指示如果流量是针对路由表中其他任何规则都未定义的子网,则流量将流向何处。
所以:
在main
路由表中,默认网关设置为您的托管提供商网关,因为它处理从您的服务器到任何未托管在您的服务器上的机器的流量。
在tunnelbroker
路由表中,默认网关是 Tunnelbroker.net 的默认网关,因为来自虚拟主机的任何未发往任何其他虚拟主机或服务器本身的流量都需要通过链接转发到 Tunnelbroker.net。
如果您想通过 IPv6 使用 VPN 或甚至将 IPv6 子网添加到您的家庭网络(即使它位于运营商级 NAT 后面),也需要同样的规避。
在这种情况下,您需要与服务器建立站点到站点的 VPN 连接,并main
在服务器的路由表中添加一条规则,告诉它如何访问家中的 IPv6 网络,并且tunnelbroker
如果您希望服务器上的虚拟主机能够与您的家庭网络通信,还需要在路由表中添加相同的规则。
希望所有这些信息可以帮助您走上正确的道路。:-)