拓补如下
-------------------+ +-------------------+
| 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"
转载请注明来源