1. 问题现象
- 虚拟机(私有网络)内部互通正常,但无法访问外部网络(如
192.168.1.x)。 openstack network agent list显示L3 agent和Linux bridge agent状态均为UP (:-))。
2. 核心原因分析
在 Linux Bridge 模式下,外部流量映射依赖物理网卡与虚拟网桥的绑定。如果 EXTERNAL_NET 的物理网络标签(Physical Network)与宿主机真实的物理网卡映射不正确,L3 Agent 就无法在宿主机上打通前往外部网络的链路。
3. 排查与修复步骤
第一步:获取外部网络的物理标签
首先确认 OpenStack 定义外部网络时使用的标签名称:
openstack network show EXTERNAL_NET | grep physical_network
注:假设输出结果为 provider。
第二步:修改 Linux Bridge 代理配置
编辑配置文件,将上述标签映射到宿主机上连接外部交换机/网络的真实物理网卡(如 eth1):
- 配置文件路径:
/etc/neutron/plugins/ml2/linuxbridge_agent.ini - 修改内容:
[linux_bridge]
# 格式为 <物理网络标签>:<物理网卡名>
physical_interface_mappings = provider:eth1
第三步:确保物理网卡已启用
确保映射的物理网卡处于 UP 状态:
ip link set eth1 up
第四步:重启服务(关键)
必须重启以下服务以加载新映射并重新触发网桥绑定:
# 1. 重启二层代理(负责物理网卡与网桥绑定)
systemctl restart neutron-linuxbridge-agent# 2. 重启三层代理(负责在命名空间内配置 IP 和路由)
systemctl restart neutron-l3-agent
4. 验证修复结果
- 检查网桥绑定:
执行brctl show,确认出现了一个新的以brq开头的网桥,且其下方的interfaces列已包含eth1。 - 检查命名空间 IP:
查找并进入路由器命名空间,确认外部网关 IP 已生效:
# 找到路由器命名空间全名
ip netns | grep qrouter
# 查看空间内 IP 绑定(替换为实际 ID)
ip netns exec qrouter-xxxxx-xxxxx ip addr
- 连通性测试:
在路由器命名空间内 Ping 物理网关:
ip netns exec qrouter-xxxxx-xxxxx ping 192.168.1.1
- 界面状态:
刷新 OpenStack 界面,确认外部网关状态变为 “运行中” (Active/UP)。
提示:如果重启后状态仍不改变,可尝试在 UI 界面对该路由器执行“清除网关”再“设置网关”的操作,以强制触发下发配置。