设置:
一台 CentOS 7.1 VM 在 Windows 10 Pro 服务器(预览版本 10074)上运行,位于 Virtualbox 5 beta 4 中(也在 4.3.8 上测试过)。使用 nginx/1.9.0 来提供静态 HTML 文件。
VM 使用 Virtualbox 中的 NAT 设置连接到我的内联网。我使用标准 Virtualbox 设置将端口 22、80 和 443 从服务器转发到 VM。
问题:
在虚拟机中,我可以使用 curl 获取任何页面(curl localhost
返回预期结果)。但是,如果我尝试从主机 Windows 服务器或任何其他内联网客户端(无论是通过 IP 还是主机上的本地主机)获取页面,我都会收到“无法连接”或“连接重置”错误。
使用虚拟机上的 netstat,我已验证 nginx 正在监听 0.0.0.0 和 [::] 上的端口 80 和 443。我还在 Windows 服务器上检查过,当虚拟机未运行时,端口 80 和 443 未被使用,而当虚拟机运行时,端口 80 和 443 正在被监听。
检查 nginx 生成的日志,access.log 仅包含我的 curl 请求 - 并且我的 error.log 中没有出现任何相关内容。
但是,我也在服务器上运行 sshd(在端口 22 上),并且可以从我的内联网上的任何机器连接到该服务器(当我在互联网路由器上转发端口时也可以从外部连接到该服务器),所以我不认为这是一个防火墙问题。
尝试的解决方案:
我尝试过打开 Windows 防火墙以允许端口 80/443 的传入连接,以及将 Virtualbox 添加到程序例外中。我还尝试过完全禁用防火墙。
我曾尝试移动到主机服务器上的端口 > 1000 - 但由于端口 22 似乎工作正常,所以这没有多大意义。
不幸的是,我无法将我的虚拟机连接从 NAT 更改为任何其他类型。Virtualbox 似乎还不支持 Windows 10 中的适配器桥接(我尝试了多次重新安装和新的测试版)。
答案1
我需要使用firewall-cmd
来允许 http 和 https 流量通过 VM 的防火墙。旧版本的 CentOS 会使用iptables
。