虚拟机访问外网的完整路径图,可以对照来排查问题:
[虚拟机 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
ovs-appctl fdb/show br-tun
看 VXLAN 学习是否正常。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
看报文是否出去。