我已阅读VirtualBox端口转发指南,此站点和其他站点中的类似问题但无法找到解决方案。
在Guest OS(Ubuntu)上启用了UFW,端口80和22已打开。我可以从主机ssh到ubuntu,并可以从主机浏览器访问ubuntu站点。
在Guest上,我设置了Nat和hostonly(vboxnet3)适配器。 还打开路由器端口80(192.168.1.90) 访客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
但是,此设置不起作用。如果你指引我走正确的路,我感激不尽。
答案 0 :(得分:27)
正如威廉所说,linux / unix操作系统不允许进程监听端口< 1024,除非它们以root身份运行。你可以以root身份运行VirtualBox,虽然我已经阅读了关于这样做的可怕警告。这可能是非常不安全的。
相反,在主机系统上设置Apache2以侦听端口80(它应该已经设置好了),但不是在主机上提供服务,而是将代理流量提供给更高端口 - 比方说, 8080 - 在主持人身上。
然后,让VirtualBox将更高端口转发到来宾操作系统端口80。
Apache设置将是这样的:
安装HTTP代理模块
a2enmod proxy_http
确保/etc/apache2/ports.conf
中有Listen 80
指令
在/etc/apache2/sites-available
中添加其他网站或修改默认网站(或者只是在ports.conf
中点击此内容)
<VirtualHost *:80> ProxyPreserveHost On ProxyRequests Off ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ </VirtualHost>
反弹apache
service apache2 restart
VirtualBox设置为host port: 8080, guest port: 80
。
交通将会:
client --> host:80 --> Apache --> host:8080 ---> vbox NAT ----> guest:80
这类似于William的ssh隧道,但每次重新启动主机时都不需要手动干预(重新输入密码)。
答案 1 :(得分:8)
如果您不习惯以root用户身份运行VirtualBox,那么这是另一种可行的方法。您可以使用SSH来设置从主机端口80到某个非限制端口的端口转发(在下面的示例中,我使用端口8080),然后将其转发到访客端口80.Carvoluted,但它可以工作。
System Preferences -> Internet & Wireless -> Sharing
并确保选中Remote Login
。在您的主机上成为root用户
$ sudo su -
使用SSH将主机端口80转发到主机端口8080(绑定地址\*
使端口在所有接口上可用。)
# ssh yourusername@localhost -L \*:80::8080
请注意,它会要求您使用您的用户名使用的任何凭据登录,因此很可能会要求您输入密码,当您成功时,实际上会让您登录。</ p>
您现在应该能够在主机上点击端口80并看到与在主机上命名端口8080相同的服务,即客户操作系统上的端口80.
如果您不希望网络上的其他人能够访问该计算机上的端口80,但仍希望能够从主机系统上的浏览器访问该端口,请将该端口绑定到{{1} }:
localhost
答案 2 :(得分:6)
根据http://www.virtualbox.org/manual/ch06.html#natforward
转发主机端口&lt; 1024不可能:
在基于Unix的主机(例如Linux,Solaris,Mac OS X)上,无法从非root运行的应用程序绑定到1024以下的端口。因此,如果您尝试配置此类端口转发,则VM将拒绝启动。
可以以root身份运行VirtualBox,这将允许您转发主机端口&lt; 1024,所以如果你坚持用VirtualBox做这件事,你可以成为root用户并以这种方式执行VirtualBox:
$ sudo su -
# VirtualBox