从VirtualBox虚拟机寻址localhost

我有一个本地测试/开发服务器(当然是HTTP),监听端口8000。

我正在研究Linux,所以为了在Internet Explorer 6、7、8等上测试页面,我使用VirtualBox运行虚拟机;我还需要看看它在Windows环境中的Firefox外观(例如字体不同)。

在我的真实机器中,我只需使用URLhttp://localhost:8000打开网站,如何从虚拟机中解决此localhost?

现在我的解决方法是使用IP地址。有更好的主意吗?

525171 次浏览

您很可能将虚拟机的网络设置为NAT。如果您将网络设置为桥接,您应该能够通过其主机名访问您的主机。例如,如果您的主机名是“jsmith-Precision-7510”并且您想打开http://localhost:3000/,您将能够在超文本传输协议://j smith精确-7510:3000/处查看该页面。

要查找您的主机名,请打开终端/控制台,然后运行命令hostname。您的主机名将在下一行输出。

有关如何将网络设置设置为桥接的说明,请参阅VirtualBox留档

谷歌搜索了这个:http://data.agaric.com/localhost-from-virtualbox-xp-install-ubuntu

它建议使用IP:http://10.0.2.2,它对我有用。

所以,我编辑了主机文件C:\windows\system32\drivers\etc\hosts,并添加了以下条目:

10.0.2.2   outer

如果你在IE8上测试,记得在地址栏放http://。直接放IP是行不通的。

例如:

http://10.0.2.2:3000/

实际上,user477494的答案原则上是正确的。

我在其他环境(OS X主机-虚拟Windows XP)中应用了相同的逻辑,这确实起到了作用。我确实必须循环主机堆栈以获取要解析的IP地址和Apache端口,但是一旦我弄清楚了,我就笑了。

macOS

我在macOS(以前的OS X)上运行Virtual Box,使用Virtual Box在Windows上测试IE等。

转到Virtual Box中的IE并通过http://10.0.2.2访问localhost用于localhost,或通过http://10.0.2.2:3000访问localhost:3000

我将网络设置保留为NAT,不需要像上面建议的那样使用桥接器。无需编辑任何配置文件。

您需要在Windows虚拟机上编辑主机文件,就像在本地主机上一样:

C:\WINDOWS\system 32\驱动程序\etc\host

并将您的虚拟主机链接到10.0.2.2,如果您只是使用localhost然后替换

127.0.0.1localhost10.0.2.2localhost

例如:

10.0.2.2 localhost10.0.2.2 local.site1.com10.0.2.2 local.site2.com

这会告诉您的虚拟机指向您的本地计算机以获取这些域名。

如果您将适配器附加到NAT,现在将端口转发设置为本地端口是更好、更优雅的解决方案。

Settings>Network>Adapter>Advanced>Port forwarding

只需插入新规则并将Host portGuest port设置为80(用于超文本传输协议)或22(用于ssh),依此类推。

然后您只需输入http://localhost即可访问该机器

您可能还想将NAT切换到透明模式。

检查是否可以使用以下命令命中父机器:ipconfig(获取您的IP地址)

ping <ip>telnet <ip> <port>

如果无法到达端口,请尝试在父防火墙中添加允许本地端口的新入站规则。

然后我可以访问http://<ip>:<port>

获取运行Apache的机器的IP(inetaddr: inifconfig)并在虚拟框浏览器地址栏中输入。

要在OSX上启用此功能,我必须执行以下操作:

  1. 关闭您的虚拟机。
  2. 转到VirtualBox Preferences -> Network -> Host-only Networks ->,单击“+”图标。单击确定。
  3. 选择您的框并单击"Settings" icon -> Network -> Adapter 2 ->在“附加到:”下拉列表中,选择“仅限主机适配器”,您的网络(vboxnet0)应默认显示在下方。单击确定。
  4. 一旦你再次启动你的盒子,你应该能够访问localhosthttp://10.0.2.2/

您可以通过localhost引用它,并通过将其引用添加到主机文件(C:\windows\system32\drivers\etc\hosts)来访问其他localhost站点,如下所示:

10.0.2.2    localhost10.0.2.2    subdomain.localhost

我发现10.0.2.2:<port>可以工作,但前提是混杂模式设置正确。安装我的虚拟机后,我去了设置>网络>适配器1。

默认设置NAT,并且禁用混杂模式下拉列表。我从NAT切换到桥接适配器,它启用了混杂模式下拉列表,然后将值从“拒绝”更改为“允许VM”。然后我切换回NAT,它再次禁用混杂模式,但保留了新值。

仅此更改后,我就能够启动我的虚拟机并查看我的主机localhost:<port>在我的虚拟机上位于10.0.2.2:<port>

我通过在网络下的Virtualbox设置中添加端口转发来解决。主机IP设置127.0.0.1端口:8080访客IP:为网站提供任何IP(例如10.0.2.5)端口:8080现在从来宾机器访问http://10.0.2.5:8080使用IE

在上面所说的虚拟Box中,您可以添加此行主机文件

10.0.2.2   outer

但是要保存它,如果您的VM中没有管理员,只需将主机文件移动到桌面,然后编辑它以添加第10.0……行,保存文件并移动到其原始位置。

在Virtual Box

  1. 将您的网络设置为网桥网络
  2. 转到高级设置混杂模式:允许所有

现在棘手的是您的localhost,如果您从Node.js将IP地址设置为0.0.0.0,然后查找您自己的IP地址,例如cmd: ipconfig-->10.0.1.3

用端口号输入那个地址。它会起作用的。

在带有虚拟Windows 7的Windows上,唯一适合我的是使用NAT和端口转发(无法运行桥接连接)。我在这里找到了一个教程:http://www.howtogeek.com/122641/how-to-forward-ports-to-a-virtual-machine-and-use-it-as-a-server/(向下滚动到带有“将端口转发到虚拟机”的部分)。

通过此更改,我可以在我的虚拟机上的Internet Explorer 10中使用“http://192.168.xx.x: 8888/mysite”访问xampp网站。

我在XAMPP控制面板>Netstat(“系统”)中找到了IP。

我必须进入虚拟盒子并将我的网络设置更改为“NAT”。之后,我能够从虚拟盒子上的模拟器点击localhost在我的主机上运行到http://10.0.2.2:3000

如果您使用Virtual Box,您可以使用一行代码将Mac OSX(我认为Linux)连接到您的虚拟Windows机器->我建议在终端中运行它之前停止盒子。

VBoxManage modifyvm "YOUR VM NAME" --natdnshostresolver1 on

我会注意到这来自我正在运行的Dinghy文档,但它是一个虚拟框命令,所以它实际上不应该关心你使用什么,只要它的虚拟框

几件事情的组合最终让我的工作结束了。在macosx上运行烧瓶服务器。

在我的Windows VM中,我编辑了host文件:

  • 以管理员身份运行记事本
  • 打开C:\windows\system32\drivers\etc\hosts
  • 添加此条目:10.0.2.2 outer

在VirtualBox中关闭VM和我的Mac:

  • 转到VirtualBox > preferences > Network > Host-only Networks > +添加网络vboxnet1
  • 转到My_VM > settings > Network > Adapter 1
  • 选择Enable Network Adapter并将Attached to:设置为Bridged Adapter
  • 然后将Advanced > Promiscuous Mode:设置为Allow VMs
  • 点击OK
  • 转到My_VM > settings > Network > Adapter 1
  • Attached to:设置回NAT

然后我去了Adapter 2

  • Attached to:设置为Host-only Adapter并选择之前添加的网络vboxnet1

我在我的mac上启动了我的服务器,在127.0.0.1:5000上运行,现在可以在http://10.0.2.2:5000的vm上访问它

在Mac上测试IE真是一场噩梦。怎么没有更简单的方法?

macOS

如果您想在Mac上使用Virtualbox设置Windows环境,只需使用适配器上的默认NAT设置,然后在Windows VM中,转到host文件并添加以下内容:

10.0.2.2       localhost10.0.2.2       127.0.0.1

与上面的答案不同,重要的是要包含两行,否则它将无法工作。

您不需要更改host文件或任何Virtual Box配置。将设置保留在NAT中。转到您的Windows实例并运行“cmd”或打开cmd.exe.执行命令“ipconfig”并获取默认网关 IP地址。在Windows IE上浏览http://10.0.2.2:8080,您将看到与您的Mac相同Safarihttp://localhost:8080/http://127.0.0.1:8080

一般步骤:

  • 公共网络(仅添加主机或桥接NIC)
  • 配置首选服务以侦听适当的接口(连接到共享NIC的接口)
  • 使用IP:端口到达目标服务,使用属于共享网络的IP。

我需要运行localhost,而不是一些奇怪的IP。

1)从您的Mac终端,执行iconfig -a以查找您的本地IP地址。它可能是最后一个。

en7:标志=8863mtu 1500选项=10b乙醚38: c9:86:32:0e: 69inet6fe80::ea:393e:a54f:635%en7 prefixlen 64 secured scopeid 0xeINET10.1.5.60网络掩码0xfffffe00广播10.1.5.255nd6选项=201媒体:自动选择(1000BaseT<全双工,流量控制>)状态:活跃

例如10.1.5.60

2)启动您的Windows图像。开始>键入cmd以获取终端

3)notepad c:\windows\system32\drivers\etc\hosts

4)添加以下行10.1.5.60 localhost

5)打开IE,以下url应该命中在您的mac上运行的服务器:http://localhost:3000/

无法将VM中localhost的请求重定向到主机的localhost现在已烘焙到Windows(https://www.rfc-editor.org/rfc/rfc6761#section-6.3),包括https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/处可用的VM

为了安全起见,Microsoft现在阻止主机文件条目将localhost的地址重写为环回地址::1以外的任何内容

10.0.2.2 localhost

将被忽略。

有两种方法(我知道)可以覆盖它:

  1. 使用NETSH将代理移植到主机

    netsh接口端口代理添加v4tov4监听地址=127.0.0.1监听端口=8000连接地址=10.0.2.2连接端口=8000

(其中10.0.2.2是VM上的默认网关,8000是要解析到主机上的端口。)

  1. 设置IIS以执行应用程序请求路由,然后将localhost: port的请求重写到host IP: port

https://learn.microsoft.com/en-us/iis/extensions/configuring-application-request-routing-arr/creating-a-forward-proxy-using-application-request-routing