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) - 先ping
10.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
相关产品推荐
相关产品推荐

