【问题标题】:Port forwarding from Host port 80 to VirtualBox port 80 doesn't work从主机端口 80 到 VirtualBox 端口 80 的端口转发不起作用
【发布时间】:2012-07-09 03:05:38
【问题描述】:

我已阅读 VirtualBox 端口转发指南、本站和其他网站中的类似问题,但找不到解决方案。

在来宾操作系统 (Ubuntu) 上启用了 UFW,端口 80 和 22 已打开。我可以从主机 ssh 到 ubuntu,并且可以从主机浏览器访问 ubuntu 站点。

在 Guest 上,我设置了 Nat 和 hostonly (vboxnet3) 适配器。 还打开了路由器端口 80 (192.168.1.90) 访客ip是192.168.70.10

所以在访客设置中> Nat >我输入的端口转发:

TCP 主机 IP:192.168.1.90 主机端口:80 访客 IP:192.168.70.10 访客端口:80

但是,此设置不起作用。如果您将我引向正确的道路,我将不胜感激。

【问题讨论】:

  • 我也面临同样的问题,但是主机上超过 1024 的端口到来宾机器 80 正在工作,但是主机上的端口 80 到来宾机器上的任何端口都不起作用......我正在使用Mac 上的虚拟盒子。如果您找到解决问题的方法,请告诉我?

标签: virtualbox portforwarding


【解决方案1】:

正如 William 提到的,Linux/unix 操作系统不会让进程侦听小于 1024 的端口,除非它们以 root 身份运行。您可以以 root 身份运行 VirtualBox,尽管我已经阅读了关于这样做的可怕警告。这可能非常不安全。

相反,在主机系统上设置 Apache2 以侦听端口 80(应该已经设置好了),但不是在主机上为网站提供服务,而是让它代理流量到某个更高的端口 - 比如说, 8080 - 在主机上。

然后,让 VirtualBox 将该更高端口转发到来宾操作系统端口 80。

Apache 设置是这样的:

  1. 安装 HTTP 代理模块

    a2enmod proxy_http

  2. 确保/etc/apache2/ports.conf 中包含Listen 80 指令

  3. /etc/apache2/sites-available 中添加另一个站点或修改默认站点(或直接在ports.conf 中添加)

    ProxyPreserveHost 开启 代理请求关闭 ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ 虚拟主机>
  4. 弹跳阿帕奇

    service apache2 restart

VirtualBox 设置为host port: 8080, guest port: 80

交通会去:

client --> host:80 --> Apache --> host:8080 ---> vbox NAT ----> guest:80

这类似于 William 的 ssh 隧道,但每次重启主机时都不需要人工干预(重新输入密码)。

【讨论】:

  • 如果您的主机操作系统是 *nix 操作系统,您可以使用 iptables 将流量从端口 80 重定向到主机操作系统上的更高端口。听起来比涉及 Apache 或 SSL 隧道要好得多。
  • 使用代理模块转发 SSL 请求是否一样简单?即<VirtualHost *:443> 还是有其他步骤?
  • @MichaelButler -- 我必须为 SSL 设置这个,并在 Apache2 配置中使用额外的 https / SSL 来制定我自己的解决方案版本。详细在这里:superuser.com/questions/1427245/…
【解决方案2】:

如果您不习惯以 root 用户身份运行 VirtualBox,这里还有另一种可行的方法。您可以使用 SSH 设置从主机端口 80 到某个非限制端口(在下面的示例中,我使用端口 8080)的端口转发,然后将其转发到访客端口 80。复杂,但它有效。

  1. 从主机端口 8080 转发到访客端口 80。通过将浏览器指向主机上的端口 8080,确保其正常运行。
  2. 确保 sshd 正在您的主机上运行。在 Mac OS X 中,转到 System Preferences -> Internet & Wireless -> Sharing 并确保选中 Remote Login
  3. 在您的主机上成为根用户

    $ sudo su -
    
  4. 使用 SSH 将主机端口 80 转发到主机端口 8080(绑定地址 \* 使该端口在所有接口上都可用)。

    # ssh yourusername@localhost -L \*:80::8080
    

请注意,它会要求您使用您用于用户名的任何凭据登录,因此它很可能会要求您输入密码,当您成功时,实际登录。

您现在应该能够访问主机上的端口 80,并看到与访问主机上的端口 8080(也就是客户操作系统上的端口 80)相同的服务。

如果您不希望网络上的其他人能够访问该计算机上的端口 80,但仍希望能够从主机系统上的浏览器访问它,请将端口绑定到 localhost

# ssh yourusername@localhost -L localhost:80::8080

【讨论】:

    【解决方案3】:

    根据http://www.virtualbox.org/manual/ch06.html#natforward

    转发主机端口

    在基于 Unix 的主机(例如 Linux、Solaris、Mac OS X)上,无法从非 root 运行的应用程序绑定到低于 1024 的端口。因此,如果您尝试配置这样的端口转发,VM 将拒绝启动。

    可以以root身份运行VirtualBox,这将允许您转发主机端口

    $ sudo su -
    # VirtualBox
    

    【讨论】:

      【解决方案4】:

      address='0.0.0.0'` 在您的 http 服务启动命令中,这将允许来自任何 IP 地址的连接,否则它可能会被限制在本地(内部 Virtualbox) 你可以用 curl 进行测试,如果它在盒子里面可以工作,它应该在外面,否则这样做

      BR

      【讨论】:

        猜你喜欢
        • 2013-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-30
        • 2010-12-02
        • 1970-01-01
        相关资源
        最近更新 更多