从主机端口80到VirtualBox端口80的端口转发不起作用

joh*_*206 20 virtualbox portforwarding

我已阅读VirtualBox端口转发指南,此站点和其他站点中的类似问题但无法找到解决方案.

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

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

所以在客户设置> Nat>端口转发我放:

TCP host-ip:192.168.1.90 host-port:80 guest-ip:192.168.70.10 guestost-port:80

但是,此设置不起作用.如果你指引我走正确的路,我感激不尽.

Pet*_*ter 29

正如威廉所提到的,linux/unix操作系统不会让进程侦听端口<1024,除非它们以root身份运行.你可以以root身份运行VirtualBox,虽然我已经阅读了关于这样做的可怕警告.这可能是非常不安全的.

相反,在主机系统上设置Apache2以侦听端口80(它应该已经设置好了),但不是在主机上提供网站服务,而是将代理流量提供给更高端口 - 比如8080 - 主人.

然后,让VirtualBox将更高端口转发到来宾OS端口80.

Apache设置将是这样的:

  1. 安装HTTP代理模块

    a2enmod proxy_http

  2. 确保/etc/apache2/ports.conf有一个Listen 80指令

  3. 添加另一个站点/etc/apache2/sites-available或修改默认站点(或者只是将其打入ports.conf)

    <VirtualHost *:80>
        ProxyPreserveHost On
        ProxyRequests Off
        ProxyPass / http://localhost:8080/
        ProxyPassReverse / http://localhost:8080/
    </VirtualHost>
    
  4. 反弹阿帕奇

    service apache2 restart

VirtualBox设置将是host port: 8080, guest port: 80.

交通将会:

client --> host:80 --> Apache --> host:8080 ---> vbox NAT ----> guest:80
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您的主机操作系统是*nix操作系统,您可以使用[iptables](http://www.catonmat.net/blog/unprivileged-programs-privileged-ports/)将流量从端口80重定向到更高端口主机操作系统 听起来比涉及Apache或SSL隧道要好得多. (4认同)

Wil*_*ury 9

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

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

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

    # ssh yourusername@localhost -L \*:80::8080
    
    Run Code Online (Sandbox Code Playgroud)

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

您现在应该能够在主机上命中端口80并看到与在主机上命名端口8080相同的服务,即客户操作系统上的端口80.

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

# ssh yourusername@localhost -L localhost:80::8080
Run Code Online (Sandbox Code Playgroud)


Wil*_*ury 6

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

转发主机端口<1024不可能:

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

它可以运行VirtualBox的为根,-will-让你转发主机端口<1024,所以如果你是坚定的关于在VirtualBox中这样做,你就可以成为根和执行VirtualBox的是这样的:

$ sudo su -
# VirtualBox
Run Code Online (Sandbox Code Playgroud)