我正在 Linux 网络命名空间中测试 iproute2 的原生 VXLAN 功能。模拟设置涉及 2 个不同的命名空间,其中有 1 个网桥和 2 个 veth 对。
目的是使用手动单播远程地址配置在两台机器之间建立基本的 VXLAN。
您可以使用以下脚本完全重现该设置:
#!/usr/bin/env bash
set -x
# Create network namespaces
ip netns add sim-vl1-stack
ip netns add sim-vl2-stack
# Create and configure bridge links
ip link add sim-vl-br0 type bridge
ip link set dev sim-vl-br0 up
# Create and configure veth links
ip link add sim-vl1-veth0 type veth peer sim-vl1-veth0p
ip link add sim-vl2-veth0 type veth peer sim-vl2-veth0p
ip link set dev sim-vl1-veth0 master sim-vl-br0
ip link set dev sim-vl2-veth0 master sim-vl-br0
ip link set dev sim-vl1-veth0p netns sim-vl1-stack
ip link set dev sim-vl2-veth0p netns sim-vl2-stack
ip link set dev sim-vl1-veth0 up
ip link set dev sim-vl2-veth0 up
ip -n sim-vl1-stack link set dev sim-vl1-veth0p up
ip -n sim-vl2-stack link set dev sim-vl2-veth0p up
ip -n sim-vl1-stack addr add 172.20.0.1/24 dev sim-vl1-veth0p
ip -n sim-vl2-stack addr add 172.20.0.2/24 dev sim-vl2-veth0p
ip -n sim-vl1-stack link add name sim-vl1-vxlan type vxlan id 1 \
dev sim-vl1-veth0p remote 172.20.0.2 local 172.20.1.1 dstport 4789
ip -n sim-vl2-stack link add name sim-vl2-vxlan type vxlan id 1 \
dev sim-vl2-veth0p remote 172.20.0.1 local 172.20.1.2 dstport 4789
ip -n sim-vl1-stack addr add 172.20.1.1/24 dev sim-vl1-vxlan
ip -n sim-vl2-stack addr add 172.20.1.2/24 dev sim-vl2-vxlan
ip -n sim-vl1-stack link set dev sim-vl1-vxlan up
ip -n sim-vl2-stack link set dev sim-vl2-vxlan up
set +x
您可以使用以下方法拆除此设置:
#!/usr/bin/env bash
set -x
# Destroy veth links
ip link del sim-vl1-veth0
ip link del sim-vl2-veth0
# Destroy bridge links
ip link del sim-vl-br0
# Destroy namespaces
ip netns del sim-vl1-stack
ip netns del sim-vl2-stack
set +x
我不确定为什么使用 VXLAN IP 地址从一个命名空间到另一个命名空间执行 ping 会导致 VXLAN 上的 ARP 请求未得到答复。当 UDP VXLAN 数据包到达标准端口 4789 时,命名空间可能无法正确处理该数据包。要使该功能按预期运行,缺少什么?
我使用第二个命名空间监控网络术语鲨鱼如下:
ip netns exec sim-vl2-stack bash
termshark -i sim-vl2-veth0p
然后,我运行此命令来执行 ping:
ip netns exec sim-vl1-stack ping -c 1 172.20.1.2
我观察到 ARP 请求通过 VXLAN 到达第二个网络命名空间,但是没有后续响应。
我应该如何以不同的方式配置此设置以通过 VXLAN 获取 ARP 响应?我希望能够通过使用手动单播使用 VXLAN 将一组机器连接在一起,从而在它们之间执行第 2 层和第 3 层通信。我从两台机器的最简单配置开始,但我想以类似的方式进一步扩展它。这是我不熟悉的领域,因此可能存在概念上的误解。
答案1
不确定这是否是拼写错误或误解,但local
应该是172.20.0.1
(for sim-vl1-vxlan
)和172.20.0.2
(for sim-vl2-vxlan
)。
我观察到 ARP 请求通过 VXLAN 到达第二个网络命名空间,但是没有后续响应。
termshark-i sim-vl2-veth0p
follow-up response
如果你进行监控,你就会发现sim-vl2-vxlan
。只是响应没有被封装并转发到另一端,因为local
你设置的地址没有意义。