我们在 OVH 有一台专用服务器,分配了 2001:41d0:a:72xx::/64
我已经将机器设置在桥接到 WAN 的网段上,如下: 从主机到虚拟机的 IPv6 公共路由
网关为 2001:41d0:a:72ff:ff:ff:ff:ff,在网络外
我们正在运行一组虚拟 Debian 服务器。
我们的某些(较旧的)服务器很乐意将 ipv6 路由到网关,但我尝试设置的新服务器在 ping gw 时显示“目标无法访问;地址无法访问”。
防火墙设置相同(/64 规则,而非主机级规则),且 /etc/network/interfaces 相同;ipv6 设置为静态。(不同地址导致)
在工作和非工作机器上,netstat -rn6|grep eth1 显示
2001:41d0:a:72xx::/64 :: U 256 2 40 eth1
2001:41d0:a:7200::/56 :: UAe 256 2 71 eth1
2001:41d0:a1:72xx::/64 :: UAe 256 0 0 eth1
2000::/3 2001:41d0:a:72ff:ff:ff:ff:ff UG 1024 2 63479 eth1
fe80::/64 :: U 256 0 0 eth1
::/0 fe80::205:73ff:fea0:1 UGDAe 1024 1 2 eth1
::/0 fe80::20c:29ff:fe22:60f8 UGDAe 1024 0 0 eth1
ff00::/8 :: U 256 2108951 eth1
在非工作机器上,ping gw 或 workd 将返回“目标无法访问”。
所有机器都可以通过本地局域网互相访问。
我不知道这是否相关,但是
ping -c3 ff02::2%eth1
64 bytes from fe80::20c:29ff:fedb:a137%eth1: icmp_seq=1 ttl=64 time=0.240 ms
64 bytes from fe80::20c:29ff:fe22:60f8%eth1: icmp_seq=1 ttl=64 time=0.250 ms (DUP!)
64 bytes from fe80::2ff:ffff:feff:fffd%eth1: icmp_seq=1 ttl=64 time=3.57 ms (DUP!)
64 bytes from fe80::2ff:ffff:feff:fffe%eth1: icmp_seq=1 ttl=64 time=5.97 ms (DUP!)
在非工作
ping -c3 ff02::2%ens34
PING ff02::2%ens34(ff02::2%ens34) 56 data bytes
64 bytes from fe80::20c:29ff:fedb:a137%ens34: icmp_seq=1 ttl=64 time=0.130 ms
64 bytes from fe80::20c:29ff:fe22:60f8%ens34: icmp_seq=1 ttl=64 time=0.138 ms (DUP!)
缺少 :fffd 和 :fffe 地址。
所有 ipv6 地址已在 OVH 控制面板上分配。
TL;DR:新旧服务器之间肯定存在一些差异,但我找不到。
更新:工作机器的克隆无法工作。
在 pfSense 外部,设置为桥接器,机器发送以下内容:
12:33:23.087778 IP6 test1.example.org > fe80::2ff:ffff:feff:fffe: ICMP6, neighbor advertisement, tgt is test1.example.org, length 32 12:33:24.106302 IP6 test1.example.org > par10s28-in-x0e.1e100.net: ICMP6, echo request, seq 451, length 64
但什么都没回复。来自外部的 ping 也打不通。
由于该机器是一台工作机器的精确克隆(除 IP 地址外),这肯定是 OVH 上游的问题。
更新2 现在 OVH 声称,要将数据路由到 IPv6,mac 需要与 IPv4 地址关联。我的天啊无法运行 IPv6。
答案1
OVH 不知道如何正确执行 IPv6,他们的设置仅在某些情况下有效,并不适用于所有地方。
只有当服务器公开给全世界并且具有公共 IPv4 地址时,它才可以在没有特殊阻碍的情况下工作。
他们无法提供一个公共 IPv6 和一个路由到它的子网,而如果人们想在自己的防火墙后面运行虚拟机,这是必需的。
如果您对 IPv6 感兴趣,最好去其他地方寻找,直到他们能够正常工作为止。
答案2
OVH 在其交换机上运行交换机端口安全,因此只有白名单 MAC 地址才能使用任何给定端口。这不适用于 vRack;vRack 上的交换机端口安全已禁用。但 OVH 暂时不允许您将 IPv6 子网路由到 vRack。您也不能故障转移IPv6 子网到另一台服务器。这是一个关键的疏忽;在这两种功能都存在之前,OVH 的 IPv6 支持被认为是有限的。
这就是我设置运行几十台虚拟机的 OVH 服务器的方法:
在主机服务器上,br3 是一个包含 eno3 和虚拟网络接口的网桥,我在该网桥上路由 IPv6。主机配置如下:
# cat /etc/sysconfig/network-scripts/ifcfg-br3
DEVICE="br3"
TYPE="Bridge"
STP="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_FAILURE_FATAL="no"
NAME="br3"
ONBOOT="yes"
ZONE="public"
BOOTPROTO="static"
IPADDR="203.0.113.24"
PREFIX="24"
GATEWAY="203.0.113.1"
IPV6_AUTOCONF="no"
IPV6ADDR="2001:db8:1f3:c187::/64"
我已经配置了静态路由,如下所示:
# cat /etc/sysconfig/network-scripts/route6-br3
2001:db8:1f3:c187::/64 dev br3
2001:db8:1f3:c1ff:ff:ff:ff:ff dev br3
default via 2001:db8:1f3:c1ff:ff:ff:ff:ff dev br3
然后我运行ndppd
,它将回答我 /64 中任何地址的 NDP 邻居请求查询。它的配置如下:
# cat /etc/ndppd.conf
route-ttl 30000
proxy br3 {
router yes
timeout 500
ttl 30000
rule 2001:db8:1f3:c187::/64 {
static
}
}
这会导致主机的 MAC 地址用于子网中的所有 IPv6 地址,然后我将其路由到 libvirt 中的虚拟接口,并分成 /80 网络。一个示例配置如下:
# cat /etc/libvirt/qemu/networks/v6bridge_1.xml
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh net-edit v6bridge_1
or other application using the libvirt API.
-->
<network>
<name>v6bridge_1</name>
<uuid>7007a2b2-08b8-4cd5-a4aa-49654ae0829b</uuid>
<forward mode='route'/>
<bridge name='v6bridge_1' stp='on' delay='0'/>
<mac address='52:54:00:fc:d4:da'/>
<ip family='ipv6' address='2001:db8:1f3:c187:1::' prefix='80'>
</ip>
</network>
此特定网络中的所有虚拟机均分配有手动 IPv6 地址,但您可以根据需要设置 DHCPv6。如下所示:
<ip family='ipv6' address='2001:db8:1f3:c187:1::' prefix='80'>
<dhcp>
<range start="2001:db8:1f3:c187:1::100" end="2001:db8:1f3:c187:1::1ff"/>
</dhcp>
</ip>
然后,我将 IPv4 故障转移地址路由到 vRack,vRack 桥接到一个网桥,我的所有虚拟机都可以br4
通过eno4
该网桥获得第二虚拟 NIC。因此,它们在一个接口上使用 IPv6,在另一个接口上使用 IPv4。这是可选的;您可以只在主接口上保留 IPv4 故障转移地址(例如,如果您没有 vRack)。