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 IPv4eth0 IPv6VXLAN 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️⃣ 多节点完全互通策略

  1. 每个节点都创建到其他节点的 VXLAN tunnel(对于三台节点,每台节点需要两个 remote 配置)。

  2. 桥接所有 VXLAN 接口到同一个 bridge。

  3. VXLAN ID 可以共享,不同 L2 网络用不同 VXLAN ID。

  4. 防火墙

    • UDP 4789 默认开启(IPv4/IPv6)。

    • SELinux/iptables/NFT 必须允许 UDP 4789。

  5. 测试

    • 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

posted on 2025-09-03 13:29  吃草的青蛙  阅读(16)  评论(0)    收藏  举报

导航