我有一台 Ubuntu 16.04 主机,该主机上有一台在 VirtualBox 上运行的 Ubuntu 16.04 客户机。我在两台机器上都设置了 apache2,它们各自提供自己的网站。我可以从主机访问客户机上的网站 - 运行正常 - 但当我尝试从任何其他计算机访问客户机上的网站时,我收到无法访问主机的错误。
我正在使用网桥将客户机连接到网络。客户机可以 ping 通同一网络上的所有其他机器以及 8.8.8.8。网络上的所有其他机器都可以 ping 通客户机。我已在主机的 /etc/hosts 中添加了客户机的 IP。
我需要做什么才能从互联网访问客户机上的网站?
答案1
正如 CelticWarrior 提到的,最简单的方法是更改虚拟机管理程序(Vbox、VMware 或 KVM)中虚拟机的网络配置。无论您使用哪种虚拟机管理程序,请将网络连接配置为与主机位于同一网络中,而不是 Natted。
如果您仍想在虚拟机上使用 NAT,或者没有选项可以更改它;您可以配置 IPtables 以执行到虚拟机 IP 和端口号的端口转发。使用类似以下链接的内容:
答案2
在 VirtualBox 中,您可以将网络桥用作网络适配器。然后您的虚拟 ubuntu 应该从您的内部网络获取 IP 地址。(手动提供 IP 更容易,因此每次都是相同的 IP)然后您必须将路由器中的端口 80 转发到虚拟 ubuntu 网络 IP 的端口 80。如果您浏览到您的外部 IP(您可以在路由器中看到它),那么您将看到您的网站。如果您想构建虚拟服务器,则不需要在主机中使用 Apache。
答案3
如果设置了端口转发或桥接后您仍然无法连接到客户机的 Web 服务器,那么可能是客户机防火墙阻止了它。
例如,我能够通过 SSH 连接到客户操作系统实例,但无法连接到我的客户正在运行 Web 服务的端口 8000。
使用“curl -v”我能够看到 curl 正在建立连接并发送标头但没有得到任何响应。
因此,在我的客户端(即 centos)中,我放入了一组规则来有效地禁用 iptables。
解决了!
做..
须藤苏-
然后..
iptables -P 输入接受
iptables -P 输出接受
iptables -P 转发接受
iptables -F
然后再次尝试从主机访问该地址。
其他详情...
我猜测 Web 服务在 CentOS 上运行并监听 0.0.0.0:8000,即端口 8000 上的所有接口。我的主机是 Windows 10。
我成功完成了以下工作......
A) 我在虚拟机中设置了主机端口 8888 到客户机端口 8000 的 NAT 转发。在虚拟机中,我没有在 nat 转发配置中为主机或客户机提供 ipaddress。然后我在主机中输入 127.0.0.1:8888 并能够访问我的网站。
B) 我还尝试在虚拟机中打开桥接,然后,在重新启动客户机后,我运行 ifconfig 并找到由我的路由器分配了 dhcp 地址的网络接口。此地址以 192.168.0 开头。因为我的路由器就是这样设置的。我的是 192.168.0.62,但您的会有所不同。然后我点击 192.168.0.62:8000 并能够联系我的站点。
C) 最后我在 VMware Workstation Player 中设置了一个桥接网络,并执行了与 B 相同的步骤,并且也有效。
在 VMware Player 中我找不到配置端口转发的地方,所以没有尝试。可能需要付费版本才能使用此功能??