OpenStack Neutron 的 CLI(openstack network/subnet/port/router …)负责「逻辑层面的抽象」,真正落到宿主机上,都是通过 neutron-openvswitch-agent 把配置下发到 OVS 里的。
所以排查网络问题的时候,除了 openstack
命令,还必须配合 ovs-vsctl / ip netns / ip link / ip route 一起看。
以下是把 OpenStack CLI + OVS 命令整合成一条完整的排查链路。
逻辑层(OpenStack CLI)
openstack server show <vm>
→ 确认 VM 的 IP 和网卡端口openstack port show <port-id>
→ 看绑定网络、子网、安全组openstack subnet show <subnet-id>
→ CIDR / gateway_ipopenstack router port list <router-id>
→ router 接口openstack router show <router-id>
→ external_gateway_infoopenstack network list --external
→ 外部网络 / 网关
数据平面(宿主机上的实际情况)
1. 虚拟机接口(tap-XXX)
- 确认 VM 的网卡是否已插到 br-int:
ovs-vsctl show | grep tap
- 查看端口 VLAN tag 是否匹配:
ovs-vsctl list port tap-xxxx
2. br-int(租户网络交换机)
- VM 的 tap 口、router 的 qr-XXX 都在这里。
- 常用命令:
ovs-vsctl show
ovs-vsctl list-br
ovs-vsctl list-ports br-int
3. br-tun(VXLAN 隧道交换机)
- 用来跨宿主机传 tenant 流量。
- 常用命令:
ovs-vsctl list-ports br-tun
ovs-vsctl show | grep vxlan
确认 VXLAN peer(remote_ip)是否正确。
4. br-ex(外部网络交换机)
- 负责连到物理外网(或你用 veth 模拟的外网)。
- 常用命令:
ovs-vsctl list-ports br-ex
ip link show veth2
5. patch 口
- br-int <-> br-ex 是通过 patch 口(int-br-ex <-> phy-br-ex)打通的。
- 常用命令:
ovs-vsctl show | grep patch
6. qrouter namespace
- 确认 router 内部的接口和路由:
ip netns list
ip netns exec qrouter-xxxx ip addr
ip netns exec qrouter-xxxx ip route
总结一句:
- openstack CLI:看逻辑关系(网络/子网/端口/路由器/网关)。
- ovs-vsctl:看 OVS 桥和端口,确认流量有没有被插进去、tag 对不对。
- ip netns:看 namespace 内的路由器、DHCP agent。
- ip link/route:看物理设备和内核路由。
逻辑层到 OVS 数据平面对应关系
从虚拟机发包 → 出到物理网卡 的流程图
VM 出口数据流向图(文字版)
[ VM 内部网卡 eth0 ]
│
▼
[ tap-xxxx (qemu/kvm 虚拟接口) ]
│
▼
[ br-int (OVS 集中交换机) ]
├─ 租户网卡 (tap-xxx)
├─ Router 内口 (qr-xxx)
└─ Patch 口 (int-br-ex)
│
▼
[ phy-br-ex (OVS patch 口) ]
│
▼
[ br-ex (外部网桥) ]
├─ qg-xxx (Router 外口)
└─ veth/物理网卡 (enoXXXX)
│
▼
[ 物理网络 / 外部世界 ]
各层检查对应命令
VM → tap-口
openstack port show <vm-port-id> ovs-vsctl list-ports br-int | grep tap
tap → br-int
ovs-vsctl show ovs-vsctl list port tap-xxxx
br-int → qrouter (qr-xxx)
ip netns list ip netns exec qrouter-xxxx ip addr
br-int → br-ex (patch 口)
ovs-vsctl show | grep patch
br-ex → qg-xxx
ip netns exec qrouter-xxxx ip addr
br-ex → 物理网卡 / veth
ovs-vsctl list-ports br-ex ip link show veth2 # 或者宿主机物理口 enoXXXX
最终出宿主机
ip route tcpdump -i veth2 -n icmp
简单对照关系
- VM 网卡 eth0 → tap-xxx → br-int
- Router 内口 → qr-xxx → br-int
- Router 外口 → qg-xxx → br-ex
- br-int ↔ br-ex → int-br-ex / phy-br-ex
- 外网口 → veth2 / 物理网卡 enoXXXX