IPv6路由问题

我从我的服务器提供商那里收到了一个本地的IPv6 / 64子网,但是我无法按照我想要的方式播放它。

我正在运行虚拟机,我希望他们有自己的公共IP地址。

假设我得到以下信息:

IP:1:1:1:1 :: / 64,网关:1:1:1:0 :: 1

现在我想让主机有ip 1:1:1:1 :: 1,其余的从eth0路由到所有虚拟机桥接的内部br0。

从根机器ping6 ipv6.google.com是可能的,所以它似乎工作到目前为止。

我已经启用了路由,看起来数据包正确地从内部机器(从br0)通过eth0转发 – 但没有什么更多的…没有答复。

注意,eth0不是br0的一部分。

有任何想法吗?

除非您的提供商确实将您的子网路由到您的主机,否则您必须设置您的主机,以便代理客户IP的ICMPv6邻居发现(ND)。

假设您已经分配了2001:0DB8:A::/64 ,那么您的主机在eth0上是2001:0DB8:A::1 ,而您的虚拟机使用2001:0DB8:A::2 (在虚拟网桥br0 )。 要告诉您的主机代理ND查询,请发出以下命令:

 ip -6 neigh add proxy 2001:0DB8:A::2 dev eth0 

还要确保你已经为IPv6启用了前向和ND代理function:

 sysctl -w net.ipv6.conf.all.forwarding=1 sysctl -w net.ipv6.conf.all.proxy_ndp=1 

在来宾上,您可以使用br0主机的链路本地地址作为默认网关。 或者在主机上的br0接口上添加一个额外的IP,并将其用作guest br0机中的默认网关。

如果你已经收到来自隧道提供商或ISP的native / 64,那么你可以将它们毫无问题地路由到IPv6 Internet。 你也不需要代理NDP来做。 包括VirtualBox和VMware Workstation / Player在内的大多数虚拟机都允许主机build立一个未桥接的专用networking,也不会将NAT路由到主机的LANnetworking。 假设您在Linux上使用VirtualBox,则可以在“首选项” – >“networking”下创build一个新的仅限主机的networking。 它可能会得到像vboxnet1这样的vboxnet1 。 您可以忽略任何IPv4设置,并禁用DHCP。 然后select虚拟机的networking适配器下的select主机专用networking和vboxnet1 。 如果要保留现有的IPv4适配器,可以创build一个新的networking适配器。 现在,您将能够将您的主机用作常规的旧IPv6路由器。 您需要设置radvd在vboxnet1vboxnet1前缀,并在/etc/sysctl.conf启用IPv6转发。 这是net.ipv6.conf.all.forward=1 。 您还需要从同一个/ 64networking为vboxnet1分配静态IPv6地址。 但是,重要的是,您不要将该networking的地址分配给主机上的其他适配器,否则将无法正确路由。