You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Devstack网络问题:Ubuntu17.10虚拟机无法Ping通实例

解决VirtualBox中Devstack实例网络不通的问题

我之前在VirtualBox里部署Devstack时也碰到过几乎一模一样的网络问题,结合你的环境(Ubuntu 17.10 + 3块网卡配置),给你梳理下一步步的排查和解决步骤:

1. 先把VirtualBox的仅主机网卡配置捋顺

首先得确保VirtualBox全局的仅主机网卡设置没踩坑:

  • 打开VirtualBox,点「文件」→「工具」→「网络管理器」→「仅主机网络」标签页
  • 把那两个仅主机网卡的DHCP服务彻底关掉(Devstack会自己管理网络,DHCP冲突是重灾区)
  • 记好两个网卡的子网段,比如假设第一个(节点通信用)是192.168.56.0/24,第二个(实例公网用)是192.168.57.0/24

2. 验证Ubuntu虚拟机的网卡配置(/etc/network/interfaces)

Ubuntu 17.10有些版本默认用netplan,但你提到用了/etc/network/interfaces,一定要确保配置和VirtualBox的网卡对应上:

# NAT网卡(用来让虚拟机联网拉取Devstack依赖)
auto enp0s3
iface enp0s3 inet dhcp

# 节点间通信的仅主机网卡(OpenStack内部服务用)
auto enp0s8
iface enp0s8 inet static
address 192.168.56.10
netmask 255.255.255.0
gateway 192.168.56.1  # 对应VirtualBox仅主机网卡的网关IP

# 实例公网接口的仅主机网卡(用来绑定浮动IP)
auto enp0s9
iface enp0s9 inet static
address 192.168.57.10
netmask 255.255.255.0
# 这里千万别加gateway!Devstack会自己配置路由

配置完重启网络:sudo systemctl restart networking,然后用ip addr确认三块网卡都正常启动,IP配置正确。

3. 修正Devstack local.conf的核心网络配置

这是解决问题的关键,local.conf里的网络参数必须和前面的配置完全匹配:

[[local|localrc]]
# 基础密码配置,随便设但要统一
ADMIN_PASSWORD=your_secret_pass
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD

# 核心网络指定
HOST_IP=192.168.56.10  # 必须是节点间通信网卡的静态IP,不能用NAT网卡的IP
SERVICE_HOST=$HOST_IP
MYSQL_HOST=$HOST_IP
RABBIT_HOST=$HOST_IP

# 指定内部服务通信的网卡
INTERFACE_NAME=enp0s8

# 指定实例公网用的网卡
PUBLIC_INTERFACE=enp0s9

# 启用Neutron并配置网络桥接
enable_service neutron
Q_USE_SECGROUP=True
Q_L3_ENABLED=True
Q_USE_PROVIDERNET_FOR_PUBLIC=True
PUBLIC_PHYSICAL_NETWORK=public
PUBLIC_BRIDGE=br-ex
OVS_PHYSICAL_BRIDGE=br-ex
OVS_BRIDGE_MAPPINGS=public:br-ex

# 子网配置要和VirtualBox网卡对应
FIXED_RANGE=10.0.0.0/24  # 实例私网子网,随便设但别和现有子网冲突
FLOATING_RANGE=192.168.57.0/24  # 必须和第二个仅主机网卡的子网完全一致!

重点提醒:FLOATING_RANGE一定要和你第二个仅主机网卡的子网匹配,不然浮动IP根本没法正常路由。

4. 部署完成后检查虚拟机侧的网络状态

Devstack部署完别着急测,先在虚拟机里做几个检查:

  • 查看OVS网桥:sudo ovs-vsctl show,确认br-ex网桥已经绑定了enp0s9网卡
  • 查看路由表:ip route,确认有到实例私网(10.0.0.0/24)和公网子网(192.168.57.0/24)的路由
  • 查看iptables规则:sudo iptables -L -n,确认Devstack自动添加的允许实例通信的规则存在(比如允许10.0.0.0/24段的流量出去)

5. 宿主机侧的配置检查

宿主机要能ping通实例,得确保:

  • 宿主机的VirtualBox仅主机网卡已经启用,并且IP在对应子网里(比如第一个仅主机网卡IP是192.168.56.1,第二个是192.168.57.1)
  • 宿主机的防火墙没拦着(Windows关下防火墙试试,Linux用sudo ufw disable临时关闭ufw)

6. 实例内部的最后排查

如果前面都没问题,进实例里看看:

  • 确认实例拿到了私网IP(比如10.0.0.2)和你分配的浮动IP(比如192.168.57.100)
  • 看默认路由:ip route,默认路由应该指向Neutron的L3代理(一般是10.0.0.1)
  • 先ping10.0.0.1,能通再ping虚拟机的192.168.56.10,最后ping宿主机的192.168.57.1,一步步定位在哪断了

避坑提醒

  • Ubuntu 17.10的NetworkManager会干扰静态网卡配置,建议直接禁用:sudo systemctl stop NetworkManager && sudo systemctl disable NetworkManager
  • VirtualBox的仅主机网卡绝对不能开DHCP,不然会和Neutron的DHCP服务打架
  • 别把HOST_IP设成NAT网卡的IP,OpenStack内部服务会出问题

内容的提问来源于stack exchange,提问作者crazzynko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:54:51