【问题标题】:Unable to connect to Vagrant private network from host无法从主机连接到 Vagrant 专用网络
【发布时间】:2014-06-23 06:04:28
【问题描述】:

我有一个 vagrant 虚拟盒子正在运行。到目前为止,我一直无法连接到 Web 服务器。这是启动:

[jesse@Athens VVV-1.1]$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default: 
    default: Guest Additions Version: 4.2.0
    default: VirtualBox Version: 4.3
==> default: Setting hostname...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => /home/jesse/vagrant/vvvStable/VVV-1.1
    default: /srv/www => /home/jesse/vagrant/vvvStable/VVV-1.1/www
    default: /srv/config => /home/jesse/vagrant/vvvStable/VVV-1.1/config
    default: /srv/database => /home/jesse/vagrant/vvvStable/VVV-1.1/database
    default: /var/lib/mysql => /home/jesse/vagrant/vvvStable/VVV-1.1/database/data
==> default: VM already provisioned. Run `vagrant provision` or use `--provision` to force it
==> default: Checking for host entries

在我的主机控制台上,ip addr show 产生:

4: vboxnet0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000                                       
    link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff                                                                         
5: vboxnet1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000                                      
    link/ether 0a:00:27:00:00:01 brd ff:ff:ff:ff:ff:ff

它产生的客人:

vagrant@vvv:~$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:12:96:98 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
    inet6 fe80::a00:27ff:fe12:9698/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:2c:d4:3e brd ff:ff:ff:ff:ff:ff
    inet 192.168.50.4/24 brd 192.168.50.255 scope global eth1

现在,我要做的就是访问虚拟机上的 Web 服务器,无论哪种方式可行。我尝试了各种各样的事情,只是在黑暗中拍摄。我很乐意提供任何具体信息。任何帮助或建议将不胜感激

【问题讨论】:

标签: networking virtual-machine virtualbox vagrant


【解决方案1】:

根据提供的输出,该框有 2 个网络接口,1 个是默认 NAT,另一个是私有的 - 问你说的。

您无法通过私有接口访问虚拟机中托管的网站的原因:可能是主机eth0wlan0 IP 地址与私有接口不在同一个网络中 -> 192.168.50.4/24 并且没有路由。

要在访客中访问由 Web 服务器托管的站点,您有以下选择:

1。 NAT端口转发

转发网络端口,例如80 到主机的 8080(您不能使用 80,因为它是 *​​NIX 上的特权端口)。添加以下内容

Vagrant.configure("2") do |config|
  config.vm.network "forwarded_port", guest: 80, host: 8080,
    auto_correct: true
end

注意:如果主机上的端口已在使用中,则 auto_correct 将解决端口冲突。

发送vagrant reload,您就可以通过http://localhost:8080/ 访问该网站

2。公共网络(VirtualBox 桥接网络)

添加公网接口

Vagrant.configure("2") do |config|
  config.vm.network "public_network"
end

在虚拟机启动并运行后获取它的 IP,端口转发不适用于桥接网络。因此,您将使用http://IP_ADDR 访问该站点,如果在 VM 中绑定到 80,则指定端口。

【讨论】:

  • 谢谢特里,你提到的两个选项都有效。
  • 我已经为此苦苦挣扎了一段时间。 auto_correct 成功了。谢谢!
  • 我尝试了第一个解决方案,它解决了我的问题。谢谢!
  • 你救了我的命
【解决方案2】:

另一种可能性仅供将来参考。

通常,当您使用专用网络创建 VM 时,Vagrant(Virtualbox?不确定)会在主机的路由表中创建相应的条目。你可以看到这些使用

netstat -rn

不知何故,我的主机进入了创建虚拟机并没有导致路由表中出现新路由的状态,并且相应地无法连接。再次,您可以使用上面的命令看到 not 出现的路线。

手动创建路由让我可以访问虚拟机。例如:

sudo route -nv add -net 10.0.4 -interface vboxnet

(替换适当的网络和接口。)但我不想这样做。

基于this question,我尝试重新启动我的主机,Vagrant 再次开始自动创建路由表条目。

不确定到底是什么问题,但希望这对某人有所帮助。

【讨论】:

  • 只需添加对我有用的路线!感谢您的帮助。
  • 路由:无效选项 -- 'i' 路由:无效选项 -- 't' 路由:无效选项 -- 'r' 路由:无效选项 -- 'f' 路由:无效选项 -- 'a' 路由:无效选项 -- 'c'
【解决方案3】:

您的界面已关闭

我有同样的问题。是我的 vboxnet0 接口宕机了。在ip addr 的列表中,您的界面有 &lt;BROADCAST,MULTICAST&gt;,但它应该是&lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt;

这意味着您的界面已关闭。

您可以通过sudo ifconfig 确认。该界面不会显示,但如果您添加-a,您将看到它:sudo ifconfig -a

如何提出来

所以你可以提出来:

sudo ifconfig vbox

sudo ip link set vboxnet0 up

两者都有效。

【讨论】:

  • 谢谢 - 这正是我在新机器(Linux Mint 18.1)上安装 vagrant 时遇到的问题。如上所述,我使用sudo ip link set vboxnet0 up 启动了界面。我以前从未遇到过这个问题,我想知道为什么会这样。我在运行 Vagrant up 时遇到了一些丢失的宝石问题,这需要一段时间才能解决,我想知道这是否是一个原因?
  • 很难知道。就我而言,我认为我将 virtualbox 从 5.0 升级到了 5.1,但很多天后我注意到了这个错误。也可能是内核升级。我也在LM18。
  • 我认为这是 Virtual Box 5.1.24 中的一个错误 - 我升级到 5.1.26,它似乎已经解决了这个问题(但从那以后我没有重新启动我的笔记本电脑或流浪者,所以可以'不确认)virtualbox.org/wiki/Changelog#v26 Linux 主机:使用 iproute 正确启动仅主机网络接口(5.1.24 回归;错误 #16911)
【解决方案4】:

或者,您可以通过 SSH(SSH 隧道)使用手动端口转发:

ssh -L 80:127.0.0.1:80 vagrant@127.0.0.1 -p 2222

这会通过与 VM 的 SSH 会话将主机端口 80 绑定到 VM 端口 80。

【讨论】:

    【解决方案5】:

    我最终通过在 Virtual Box 中删除它来让专用网络也能正常工作。当我再次使用 vagrant up 重新创建它时,ip 配置变为:

    vboxnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
        link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
        inet 192.168.50.1/24 brd 192.168.50.255 scope global vboxnet0
           valid_lft forever preferred_lft forever
    

    【讨论】:

    • 这需要更具体的步骤才能有用。
    • 我做了类似的事情。打开 Parallels Desktop -> 首选项 -> 网络选项卡,然后删除 vagrant-vnet0 条目。在进行 vagrant reload 后,正确的接口被添加到主机的 ipconfig 中。
    【解决方案6】:

    我在我的 Mac 上遇到了类似的问题。 VirtualBox 仅将主机用于专用网络。要用作内部网络,我必须将其添加到专用网络配置中:

    "virtualbox__intnet: true"
    

    【讨论】:

    • 对您进行此更改的位置进行一些说明会有所帮助
    • 谢谢!这终于是我一直在寻找的答案。关于如何使用它的一些说明是您将专用网络的条目添加到您的 Vagrantfile。如:config.vm.network "private_network", virtualbox__intnet: true 更多信息在这里:vagrantup.com/docs/providers/virtualbox/…
    【解决方案7】:

    这可能并不完全适用,但标题中的“专用网络”将我带到这里,其他尝试在 Mac OS X 上运行多个访客盒的人可能会受益:

    我使用“private_network”并且不进行任何端口转发。即我通过“project1.local”、“project2.local”等主机访问我的虚拟机。

    所以,当我尝试启动第二个盒子(用于 LAMP 的苏格兰威士忌/盒子 ubuntu)并且它拒绝启动并出现错误(摘录)时,我感到很惊讶:

    "...The forwarded port to 2222 is already in use on the host machine..."
    

    错误消息建议的解决方案不起作用。 IE。将此添加到您的 Vagrantfile 中:

    config.vm.network :forwarded_port, guest: 22, host: 1234
    #Where 1234 would be a different port.
    

    我不确定为什么会发生这种情况,因为我之前曾多次运行(但不是苏格兰威士忌/盒子)。问题是即使你使用 private_network,Vagrant 也会使用端口转发来进行 SSH。

    解决方案是通过将其添加到您的 Vagrant 文件中,专门为 SSH 设置端口:

    # Specify SSH config explicitly with unique host port for each box
    config.vm.network :forwarded_port,
      guest: 22,
      host: 1234,
      id: "ssh",
      auto_correct: true
    

    注意:auto_correct 可能会使非唯一端口#s 工作,但我还没有测试过。

    现在,您可以使用专用网络同时运行多个虚拟机。

    (感谢 Aaron Aaron 和他在这里发帖:https://groups.google.com/forum/#!topic/vagrant-up/HwqFegoCXOc

    【讨论】:

      【解决方案8】:

      Arch (2017-01-01) 遇到了同样的问题。不得不安装net-tools:sudo pacman -S net-tools

      Virtual Box 5.1.12r112440,Vagrant 1.9.1。

      【讨论】:

      • 对于我在 openSUSE Tumbleweed 上的安装包是 net-tools-deprecated。这为我解决了这个问题。谢谢!
      【解决方案9】:

      你已经为你的流浪机器设置了一个私有网络

      如果该 ip 不可见,则 ssh 到您的 vagrant 机器并触发此命令

      sudo /etc/init.d/networking restart
      

      选中也可以停止您的防火墙和 iptables

      【讨论】:

      • 谢谢!在 CentOS 7 中使用 libvirt。为我工作。每次创建新机器时,我都必须重新启动网络服务。在 CentO 中只需 sudo /etc/init.d/network restart
      猜你喜欢
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 2015-05-03
      • 1970-01-01
      相关资源
      最近更新 更多