从主机端口80到VirtualBox端口80的端口转发不';行不通

从主机端口80到VirtualBox端口80的端口转发不';行不通,virtualbox,portforwarding,Virtualbox,Portforwarding,我已经阅读了VirtualBox端口转发指南,在这个网站和其他网站上也有类似的问题,但找不到解决方案 UFW在来宾操作系统(Ubuntu)上启用,端口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.9

我已经阅读了VirtualBox端口转发指南,在这个网站和其他网站上也有类似的问题,但找不到解决方案

UFW在来宾操作系统(Ubuntu)上启用,端口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个主机端口:

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

可以以root用户身份运行VirtualBox,这将允许您转发<1024个主机端口,因此,如果您坚持使用VirtualBox执行此操作,您可以以以下方式成为root用户并执行VirtualBox:

$ sudo su -
# VirtualBox

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

  • 从主机端口8080转发到来宾端口80。通过将浏览器指向主机上的8080端口,确保其正常工作
  • 确保您的主机上正在运行sshd。在Mac OS X中,转到
    系统首选项->互联网和无线->共享
    ,并确保选中了
    远程登录
  • 成为你主机上的root用户

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

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

    现在,您应该能够访问主机上的端口80,并看到与访问主机上的端口8080(即来宾操作系统上的端口80)相同的服务

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

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

    正如William提到的,linux/unix操作系统不允许进程侦听<1024个端口,除非它们以root用户身份运行。您可以以root用户身份运行VirtualBox,尽管我已经读过关于这样做的可怕警告。它可能非常不安全

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

    然后,让VirtualBox将较高的端口转发到来宾操作系统端口80

    Apache设置如下所示:

  • 安装HTTP代理模块

    a2enmod代理\u http

  • 确保
    /etc/apache2/ports.conf
    中有
    Listen 80
    指令

  • /etc/apache2/sites available
    中添加另一个站点,或者修改默认站点(或者在
    ports.conf
    中删除此站点)


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

    我也面临同样的问题,但是主机上的1024多个端口到来宾计算机80正在工作,但主机上的端口80到来宾计算机上的任何端口都不工作。。。我正在Mac上使用虚拟盒。请告诉我您是否找到了解决问题的方法?如果您的主机操作系统是*nix操作系统,您可以使用将通信量从端口80重定向到主机操作系统上更高的端口。听起来比涉及Apache或SSL隧道要好得多。使用代理模块转发SSL请求是否同样简单?i、 e.
    或者还有其他步骤吗?@MichaelButler——我必须为SSL设置这些内容,并在Apache2配置中使用额外的https/SSL内容制定出我自己的解决方案版本。详情如下:
    # ssh yourusername@localhost -L localhost:80::8080
    
    <VirtualHost *:80> ProxyPreserveHost On ProxyRequests Off ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ </VirtualHost>
    client --> host:80 --> Apache --> host:8080 ---> vbox NAT ----> guest:80