VirtualBox中Ubuntu LTS通过DevStack部署OpenStack后Horizon无法访问求助
解决VirtualBox中DevStack部署OpenStack后Horizon无法从Windows主机访问的问题
我之前也碰到过一模一样的场景,结合DevStack和VirtualBox的常见坑,给你整理几个关键排查步骤,一步步来定位问题:
1. 先确认VirtualBox虚拟机的网络模式
这是最容易踩的坑:
- 优先推荐用桥接模式:这样虚拟机会和你的Windows主机处于同一个局域网段,主机可以直接通过虚拟机的IP访问Horizon。设置路径:VirtualBox -> 虚拟机设置 -> 网络 -> 网络连接方式选择"桥接适配器",并选择主机正在使用的网卡。
- 如果用NAT模式:必须手动配置端口转发,把虚拟机的Horizon端口(DevStack默认是80,部分版本是443)映射到主机的一个端口。比如主机端口设为8080,虚拟机端口设为80,这样主机浏览器访问
http://localhost:8080就能转到虚拟机的Horizon。
2. 找到Ubuntu虚拟机的正确IP地址
别再用ifconfig了,新版本Ubuntu Server已经默认弃用这个命令,改用更准确的:
ip addr show
找到对外网卡(通常是enp0s3、enp0s8这类名称),记下它的IPv4地址(比如192.168.1.105)。
3. 验证Horizon服务在虚拟机内是否正常运行
先排除服务本身的问题:
- 检查Horizon依赖的Web服务状态(DevStack默认用Apache):
sudo systemctl status apache2
如果显示active (running),说明服务没问题;如果是inactive,先重启服务:sudo systemctl restart apache2。
- 再在虚拟机内部测试访问:
curl http://localhost # 或者用虚拟机IP测试 curl http://[你的虚拟机IP]
如果能返回Horizon登录页面的HTML代码,说明服务本身是正常的,问题出在网络连通性上。
4. 检查Ubuntu虚拟机的防火墙规则
DevStack虽然会自动配置iptables,但偶尔会有遗漏:
- 临时关闭防火墙测试(快速验证):
# 如果你用ufw防火墙 sudo ufw disable # 如果你用iptables sudo iptables -F
关闭后再从主机访问试试,如果能打开Horizon,说明是防火墙拦截了端口,需要添加规则放行:
sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable
5. 检查Windows主机的网络和防火墙
- 先ping虚拟机的IP:在Windows cmd里输入
ping [虚拟机IP],如果ping不通,说明VirtualBox的网络模式配置有问题,回到第一步重新设置。 - 检查Windows防火墙:临时关闭Windows Defender防火墙(或者你的第三方防火墙),再访问Horizon。如果能访问了,就需要在Windows防火墙里添加入站规则,允许访问80/443端口。
6. 检查DevStack的Horizon配置
最后确认Horizon允许外部访问:
- 编辑Horizon的配置文件:
sudo nano /opt/stack/horizon/openstack_dashboard/local/local_settings.py
- 找到
ALLOWED_HOSTS配置项,确保它包含虚拟机的IP或者直接设置为允许所有:
ALLOWED_HOSTS = ['*', ]
- 同时确认
OPENSTACK_HOST设置的是虚拟机的IP,而不是localhost,保存后重启Apache服务:sudo systemctl restart apache2。
关于你提到的网络配置文件问题
新版本Ubuntu Server已经不用/etc/network/interfaces了,而是用/etc/netplan/下的YAML配置文件,所以你看到这个文件为空是正常的。可以用ls /etc/netplan/找到对应的配置文件,编辑后执行sudo netplan apply生效即可。NetworkManager.conf不存在也没关系,Ubuntu Server默认用systemd-networkd管理网络,不需要NetworkManager。
内容的提问来源于stack exchange,提问作者VCM
相关产品推荐
相关产品推荐

