虚拟机访问外网的完整路径图,可以对照来排查问题:
OpenStack 网络数据路径(以 VXLAN + OVS 为例)
[虚拟机 VM]
|
| vNIC (tapXXX)
v
-------------------
| br-int (OVS) |
-------------------
|
| OVS flow (根据tag转发)
v
-------------------
| br-tun (OVS) | <--- VXLAN 隧道,用于跨节点通信
-------------------
|
| (隧道) [如果在同一节点直接走br-int到qrouter]
v
-------------------
| qrouter-* (ns) | <--- Neutron L3 namespace,做路由和SNAT
-------------------
|
| qg-xxx 接口
v
-------------------
| br-ex (OVS) | <--- 外部网桥,绑定物理网卡
-------------------
|
| 物理网卡 (enoX / ethX)
v
-------------------
| 外部物理网络 | → 上层交换机/网关 → Internet
-------------------
每一层的排查点
虚拟机内部
ip addr
/ip route
看是否有正确的 IP 和网关。ping 网关
(子网网关)。
br-int
ovs-vsctl list-ports br-int
看是否有 VM 的 tap 口。ovs-ofctl dump-flows br-int | grep <vm_ip>
看是否有流表。
br-tun
- 如果是多节点,确认 VXLAN 隧道:
ovs-appctl fdb/show br-tun
看 VXLAN 学习是否正常。- 单节点环境可能直接走 br-int → qrouter。
qrouter 命名空间
ip netns exec qrouter-xxx ip addr
看 qg-xxx 和 qr-xxx。ip netns exec qrouter-xxx ip route
看外网默认路由是否存在。ip netns exec qrouter-xxx ping 8.8.8.8
测试 SNAT。
br-ex
ovs-vsctl list-ports br-ex
看是否有 qg-xxx。ip addr show br-ex
看外网 IP 是否正确。
物理网卡
ip link show <物理网卡>
确认 UP。ping <外部网关>
。tcpdump -i <物理网卡> icmp
看报文是否出去。