OVS配置VXLAN简单实验

  1. 拓补如下
    1. 1.配置步骤
      1. Host A 配置
      2. Host B 配置
    2. 2.验证连通性
    3. 3. 高级配置(可选)
      1. 组播模式替代单播
      2. OpenFlow 流表控制

拓补如下

-------------------+       +-------------------+
|   VM/Container    |       |   VM/Container    |
|  (VNI 100)        |       |  (VNI 100)        |
+-------------------+       +-------------------+
         |                           |
   +-----v-----+               +-----v-----+
   | OVS Bridge|               | OVS Bridge|
   | (br-vxlan)|               | (br-vxlan)|
   +-----+-----+               +-----+-----+
         |                           |
         +-----------v---------------+
                     |
              +------v------+
              | 物理网络    |
              | (UDP 4789) |
              +------+------+
                     |
         +-----------v---------------+
         |                           |
   +-----+-----+               +-----+-----+
   | Host A    |               | Host B    |
   | 192.168.1.1|              |192.168.1.2|
   +-----------+               +-----------+

1.配置步骤

Host A 配置

# 创建 OVS 网桥并添加 VXLAN 隧道
sudo ovs-vsctl add-br br-vxlan
sudo ovs-vsctl add-port br-vxlan vxlan0 -- set interface vxlan0 type=vxlan \
    options:remote_ip=192.168.1.2 options:key=100  # key=VNI

# 为虚拟机/容器添加虚拟接口(示例:veth pair)
sudo ip link add veth-A type veth peer name veth-A-cont
sudo ip link set veth-A up
sudo ovs-vsctl add-port br-vxlan veth-A

# 将另一端放入容器/虚拟机(假设使用网络命名空间模拟)
sudo ip netns add ns-A
sudo ip link set veth-A-cont netns ns-A
sudo ip netns exec ns-A ip link set veth-A-cont name eth0
sudo ip netns exec ns-A ip addr add 10.0.0.1/24 dev eth0
sudo ip netns exec ns-A ip link set eth0 up

Host B 配置

# 创建 OVS 网桥并添加 VXLAN 隧道
sudo ovs-vsctl add-br br-vxlan
sudo ovs-vsctl add-port br-vxlan vxlan0 -- set interface vxlan0 type=vxlan \
    options:remote_ip=192.168.1.1 options:key=100  # key=VNI

# 为虚拟机/容器添加虚拟接口
sudo ip link add veth-B type veth peer name veth-B-cont
sudo ip link set veth-B up
sudo ovs-vsctl add-port br-vxlan veth-B

# 将另一端放入容器/虚拟机
sudo ip netns add ns-B
sudo ip link set veth-B-cont netns ns-B
sudo ip netns exec ns-B ip link set veth-B-cont name eth0
sudo ip netns exec ns-B ip addr add 10.0.0.2/24 dev eth0
sudo ip netns exec ns-B ip link set eth0 up

2.验证连通性

在 Host A 的命名空间 ns-A 中 ping Host B 的 ns-B

sudo ip netns exec ns-A ping 10.0.0.2
# 在 Host A 的物理网卡上抓包
sudo tcpdump -i <物理网卡> udp port 4789 -nn -v

3. 高级配置(可选)

组播模式替代单播

如果不想手动指定 remote_ip,可以用组播自动发现 VTEP:

# 替换单播配置为组播(需物理网络支持组播)
ovs-vsctl set interface vxlan0 type=vxlan options:group=239.1.1.1 options:key=100

OpenFlow 流表控制

手动添加流表规则实现精确转发(示例):

# 在 Host A 上添加流表,将发往 10.0.0.2 的流量通过 VXLAN 隧道转发
ovs-ofctl add-flow br-vxlan \
    "priority=100,ip,nw_dst=10.0.0.2,actions=output:vxlan0"

转载请注明来源