![最初启动时 VXLAN 不工作](https://linux22.com/image/204671/%E6%9C%80%E5%88%9D%E5%90%AF%E5%8A%A8%E6%97%B6%20VXLAN%20%E4%B8%8D%E5%B7%A5%E4%BD%9C.png)
我正在尝试使用 VXLAN 使覆盖网络正常工作。总而言之,这是一个相当简单的设置,但由于某种奇怪的原因,在启动时无法正常工作。
我有两个(嗯,实际上有六个,但这在这里无关紧要)主机,A 和 B。两者的配置类似:
ip -6 link add vx1 type vxlan id 99 dstport 4789 local <local-ipv6-address>
bridge fdb append 00:00:00:00:00:00 dev vx1 dst <remote-ipv6-address>
ip link set up dev vx1
ip -6 addr add <random-ula>::10/64 dev vx1
显然,除了本地/远程交换,并且在最后一步中使用不同的地址。
我从 A 到 B 运行 ping6,一旦接口正常运行,我就可以看到主机 B 上的流量(带有tcpdump
)。但是B没有给A回复,情况类似为什么linux不响应来自VxLAN的ICMP请求?但这没有帮助。在我手动调出界面后,或者在/etc/network/interfaces
.然而,如果我从 B 向 A 发送一个 ping,突然一切都神奇地工作,那么“解决”这种情况的方法是什么。
我检查了路由、iptables、fdb 和我能想到的任何东西。在简单地启动接口和发送第一个“修复 ping”之间,任何配置似乎都没有发生任何变化。我的问题当然是重新启动,那么有什么我可以检查并可能做的事情来正确解决这个问题吗?一种选择是向覆盖层中的所有其他主机发送 ping 消息,但这充其量看起来很笨拙,而且几乎不是一个可靠的解决方案。特别是在构建更大的覆盖层时。
答案1
我不确定你的情况,但就我而言,这是 vxlan 一端的错误配置。一个节点 (A)的转发数据库(您可以使用 来查看bridge fdb
)包含错误信息:特别是 00:00:00:00:00:00 MAC 地址(错误地)据说可以在节点 A 的 IP 上访问地址,而不是可以通过节点 B 的 IP 地址进行访问。
使用并删除错误的转发规则附加正确的值bridge fdb append 00:00:00:00:00:00 dev <VXLAN INTERFACE> dst <IP ADDRESS>
使其起作用。
ping 正在触发“正确”行为,因为它允许对等方发现 IP <-> MAC 地址映射,而无需中继 MAC 广播。