IPv4 VXLAN + IPv6 VXLAN
明白,你的需求是 在三台节点上通过 VXLAN 实现 IPv4 和 IPv6 双栈互通,网络接口 eth0 已经有 IPv4 和 IPv6 地址。我们可以拆解成几个关键点:
1️⃣ VXLAN 双栈基本概念
-
VXLAN ID:唯一标识虚拟网络(如 100)。
-
VTEP(VXLAN Tunnel End Point):节点上 VXLAN 接口,用于封装/解封装。
-
源接口:你的
eth0。 -
目的 IP:
-
IPv4 VXLAN 用对端 IPv4 地址。
-
IPv6 VXLAN 用对端 IPv6 地址。
-
-
三台节点互通:
-
每个节点都需要知道其他两台节点的 IP。
-
VXLAN 本质是 L2 over L3,三台节点形成完全互联即可。
-
2️⃣ 三台节点 VXLAN 配置示例
假设节点 A/B/C:
| 节点 | eth0 IPv4 | eth0 IPv6 | VXLAN ID |
|---|---|---|---|
| A | 10.0.0.1 | 2001:db8::1 | 100 |
| B | 10.0.0.2 | 2001:db8::2 | 100 |
| C | 10.0.0.3 | 2001:db8::3 | 100 |
IPv4 VXLAN
在节点 A:
# 创建 VXLAN 接口
ip link add vxlan100 type vxlan id 100 dev eth0 remote 10.0.0.2 dstport 4789
ip link add vxlan101 type vxlan id 100 dev eth0 remote 10.0.0.3 dstport 4789
# 启动接口
ip link set vxlan100 up
ip link set vxlan101 up
# 分配虚拟 L2 地址(可选)
ip addr add 192.168.100.1/24 dev vxlan100
ip addr add 192.168.100.1/24 dev vxlan101
注意:如果使用 Linux
bridge,可以将 VXLAN 接口加入同一个br0,桥接后自动互通:
ip link add br0 type bridge
ip link set vxlan100 master br0
ip link set vxlan101 master br0
ip link set br0 up
IPv6 VXLAN
原理相同,只是 remote 用 IPv6:
ip link add vxlan200 type vxlan id 200 dev eth0 remote 2001:db8::2 dstport 4789
ip link add vxlan201 type vxlan id 200 dev eth0 remote 2001:db8::3 dstport 4789
ip link set vxlan200 up
ip link set vxlan201 up
ip addr add fd00:100::1/64 dev vxlan200
ip addr add fd00:100::1/64 dev vxlan201
同样可通过 bridge 聚合:
ip link add br1 type bridge
ip link set vxlan200 master br1
ip link set vxlan201 master br1
ip link set br1 up
3️⃣ 多节点完全互通策略
-
每个节点都创建到其他节点的 VXLAN tunnel(对于三台节点,每台节点需要两个 remote 配置)。
-
桥接所有 VXLAN 接口到同一个 bridge。
-
VXLAN ID 可以共享,不同 L2 网络用不同 VXLAN ID。
-
防火墙:
-
UDP 4789 默认开启(IPv4/IPv6)。
-
SELinux/iptables/NFT 必须允许 UDP 4789。
-
-
测试:
-
IPv4:
ping -I br0 192.168.100.X -
IPv6:
ping6 -I br1 fd00:100::X
-
4️⃣ 注意事项
-
VXLAN over dual-stack:
-
IPv4 VXLAN 用 IPv4 remote。
-
IPv6 VXLAN 用 IPv6 remote。
-
-
三台节点互通:
-
A ↔ B ↔ C ↔ A 都需要 tunnel。
-
不要用对端 IPv6 link-local 地址(如
fe80::),必须用全局或唯一路由的 IPv6。
-
-
桥接 vs. 点对点:
-
如果是 L2 网络,使用桥接 VXLAN 接口更简单。
-
如果只是点对点隧道,直接 ping 对端 VXLAN 地址即可。
-
export CNI_COMMAND=ADD
export CNI_CONTAINERID=<container-id>
export CNI_NETNS=/proc/<pid>/ns/net
export CNI_IFNAME=eth0
export CNI_PATH=/opt/cni/bin
/opt/cni/bin/flannel < /etc/cni/net.d/10-flannel.conflist
source /run/flannel/subnet.env
ip addr add ${FLANNEL_SUBNET%.*} dev cni0
export CNI_COMMAND=ADD
export CNI_CONTAINERID=9d49d4a7bd7f
export CNI_NETNS=/proc/2979/ns/net
export CNI_IFNAME=cni0
export CNI_PATH=/opt/cni/bin
/opt/cni/bin/flannel < /etc/cni/net.d/10-flannel.conflist
source /run/flannel/subnet.env
BASE_IP=${FLANNEL_SUBNET%.*}
ip addr add ${BASE_IP}.1/24 brd ${BASE_IP}.255 dev cni0
浙公网安备 33010602011771号