我正在设置一些将使用 IPv6 运行虚拟机的服务器。网络拓扑如下,其中br0
接口是虚拟的:
2001:db8:fedc:aaaa::/64
---+----------------------------------+---
| |
| eth0: 2001:db8:fedc:aaaa::1 | eth0: 2001:db8:fedc:aaaa::2
+----+----+ +----+----+
| server1 | | server2 |
+----+----+ +----+----+
| br0: 2001:db8:fedc:abcd::1 | br0: 2001:db8:fedc:cdef::1
| |
| VM network 1: | VM network 2:
| 2001:db8:fedc:abcd::/64 | 2001:db8:fedc:cdef::/64
+----+----+ +----+----+
| | | | | |
vm1 vm2 vm3 vm4 vm5 vm6
我试图避免使用网络的默认网关将数据包从一台服务器中的虚拟机路由到另一台服务器中的虚拟机,因为对于许多主机来说这会成为瓶颈。
然后,这个想法是让每台服务器向其他服务器通告一条通往其自己的 VM 网络的路由。因此,在上面的示例中,server1 将通告一条通往 2001:db8:fedc:abcd::/64 的路由,而 server2 将通告一条通往 2001:db8:fedc:cdef::/64 的路由。
我在 server1 的 radvd.conf 中有这个:
interface eth0 {
AdvSendAdvert on;
prefix 2001:db8:fedc:abcd::/64 { };
route 2001:db8:fedc:abcd::/64 { };
};
这是服务器2的:
interface eth0 {
AdvSendAdvert on;
prefix 2001:db8:fedc:cdef::/64 { };
route 2001:db8:fedc:cdef::/64 { };
};
如果我在另一台服务器上运行“rdisc6 eth0”,我可以看到从其中一台服务器接收到的该信息,但由于某种原因,该路由未添加到其路由表中。
我在这里遗漏了什么?
答案1
此配置不适用于 radvd,我的尝试源于对路由器通告目的的误解。此协议用于主机自动配置,而不是用于路由器之间的路由传播。
用 Quagga 和支持 IPv6 的路由协议替换 radvd 可以解决这个问题。
答案2
在这种情况下,不需要路由节,因为通过通告前缀,您的系统应该自动配置服务器[1,2]的链路本地地址,因为它是提供路由通告的服务器。为同一子网添加路由节可能会与添加路由发生冲突。