![端口转发至虚拟机](https://linux22.com/image/491667/%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%E8%87%B3%E8%99%9A%E6%8B%9F%E6%9C%BA.png)
我在 Ubuntu 8.04 服务器(位于 Virtualbox 机器中,位于 Ubuntu 9.04 机器上)上运行 http(zope) 服务器。客户系统通过 NAT 访问网络。如何将主机的端口 80 转发到客户系统的 http 端口?
答案1
您必须在 VirtualBox 中启用端口转发。您可以使用以下VBoxManage
命令执行此操作。例如:
VBoxManage setextradata VM_NAME "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/HostPort" 8888
VBoxManage setextradata VM_NAME "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/GuestPort" 80
VBoxManage setextradata VM_NAME "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guesthttp/Protocol" TCP
在这种情况下,这将在您的主机(物理机)上打开端口 8888/tcp,并将其转发到您的虚拟机的端口 80/tcp(将 VM_NAME 替换为您的虚拟机的名称)。
更多详情,请参阅“使用 NAT 配置端口转发“ 在里面VirtualBox 用户手册(第 6.4.1 节,第 84 页)
如果您需要从外部访问托管在虚拟机上的 Web 服务器,那么您还需要创建端口转发规则(例如通过iptables
或在路由器中配置它)。
答案2
确定客户系统的 IP 地址(虽然是 DHCP 分配的,但重启后更有可能具有相同的地址;如果不是,请切换到静态 IP)
iptables -t nat -A PREROUTING -s 0/0 -d IP_HOST -p tcp --dport 80 -j DNAT --to IP_GUEST:80