VirtualBox NAT设置和端口转发

本文详细介绍了VirtualBox中网络地址转换(NAT)的工作原理及配置方法,包括如何通过端口转发实现虚拟机服务对外可见。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://huzhangsheng.blog.163.com/blog/static/34787784200802801435931/

电脑笔记    2008-01-28 00:14   阅读3898   评论3  
字号:    

 

临川十中 胡长生

这是我对 VirtualBox 自带帮助关于 NAT 设置部分的翻译,翻的不当处,请批评指正,我不是英语专业。未完,待续。转载我的文章,请注明出处,非常感谢。

1、  Network Address Translation (NAT)

Network Address Translation (NAT) is the simplest way of accessing an external network from a virtual machine. Usually, it does not require any configuration on the host network and guest system. For this reason, it is the default networking mode in VirtualBox.

网络地址转换( NAT )是最简单的方法从一个虚拟机访问外部网。通常,它并不要求在主机网络和客户机上做任何配置。基于这个原因,它是默认的网络模式 。

A virtual machine with NAT enabled acts much like a real computer that connects to the Internet through a router. The “router”, in this case, is the VirtualBox networking engine, which maps traffic from and to the virtual machine transparently. The disadvantage of NAT mode is that, much like a private network behind a router, the virtual machine is invisible and unreachable from the outside internet; you cannot run a server this way unless you set up port forwarding (described below).

设置为通过 NAT 方式连接的一台虚拟机能像一台真正的计算机一样访问互联网,主机就是一只路由器。 在这种方式下,通过 VirtualBox 网络引擎,虚拟机透明地映射到外部网络。 NAT 方式不方便是,很像是在路由器之后的一个专用网络,从外部互联网看来,虚拟机是无形和不能到达的; 您不可能在虚拟机上运行一个服务器,因为外部网络无法访问通过 NAT 方式连接的内部机,除非您设定了端口转发(下述)。

The virtual machine receives its network address and configuration on the private network from a DHCP server that is integrated into VirtualBox. The address which the virtual machine receives is usually on a completely different network to the host.As more than one card of a virtual machine can be set up to use NAT, the first card is connected to the private network 10.0.2.0, the second card to the network 10.0.3.0 and so on.

虚拟机从一个 VirtualBox 整合的 DHCP 服务器得到私有的网址。 这个网址对主机来说是一个完全不同的网络。一台虚拟机的多个网卡可以被设定使用 NAT, 第一个网卡连接了到专用网 10.0.2.0,第二个网卡连接到专用网络 10.0.3.0,等等。默认得到的客户端ip(IP Address)是10.0.2.15,网关(Gateway)是10.0.2.2,域名服务器(DNS)是10.0.2.3,可以手动参考这个进行修 改。

 The network frames sent out by the guest operating system are received by VirtualBox’s NAT engine, which extracts the TCP/IP data, and resends it using the host operating system. To an application on the host, or to another computer on the same network as the host, it looks like the data was sent by the VirtualBox application on the host, using an IP address belonging to the host. VirtualBox listens for replies to the packages sent, and repacks and resends them to the guest machine on its private network.

客户机(即虚拟机)送出的网络帧被 VirtualBox 的 NAT 引擎收到,抽取 TCP/IP 数据,再通过主机的操作系统(即安装 VirtualBox 的操作系统)重新发送出去。送到在主机上的一个应用程序,或者到位于主机同一网络的另一台计算机上,它看起来好象是安装在主机上的程序 VirtualBox,通过一个属于主机的 IP 地址,把数据发送出去。VirtualBox  倾听到数据包裹的回复,通过客户机的私人网络重新包装和发送往客户机上。

You can set up a guest service which you wish to proxy using the command line tool VBoxManage. You will need to know which ports on the guest the service uses and to decide which ports to use on the host (often but not always you will want to se the same ports on the guest and on the host). You can use any ports on the host which are not already in use by a service. An example of how to set up incoming NAT connections to a ssh server on the guest requires the following three commands:

你可以设置一个虚拟机的服务(比如 WEB  服务),通过使用命令行工具 VboxManage 代理。你需要知道虚拟机的服务使用哪个端口,然后决定在主机上使用哪个端口(通常但不总是想要使虚拟机和主机使用同一个端口)。在主机上提供一个服务需要 使用一个端口,你能使用在主机上没有准备用来提供服务的任何端口。一个怎样设置新的 NAT 例子,在虚拟机上连接到一个 ssh 服务器,需要下面的三个命令:

VBoxManage setextradata "Linux Guest" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/Protocol" TCP

VBoxManage setextradata "Linux Guest" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/GuestPort" 22

VBoxManage setextradata "Linux Guest" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/guestssh/HostPort" 2222

说明:VboxManage 是一个命令行程序,请查询你的 VirtualBox 安装目录,"Linux Guest" 是虚拟主机名。guestssh 是一个自定义的名称,你可以任意设置,通过上面的三个命令,把虚拟机的 22 端口 转发到主机的 2222 端口。

 又比如,我在虚拟机 debian 上安装了 apache2 服务器,使用 80 端口,映射到主机的 80 端口。使用下面的命令。

"C:/Program Files/innotek VirtualBox/VBoxManage.exe" setextradata "debian" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/huzhangsheng/Protocol" TCP

"C:/Program Files/innotek VirtualBox/VBoxManage.exe" setextradata "debian" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/huzhangsheng/GuestPort" 80

"C:/Program Files/innotek VirtualBox/VBoxManage.exe" setextradata "debian" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/huzhangsheng/HostPort" 80

注意:要使设置生效,请关掉 VirtualBox 再运行虚拟机,我把 VirtualBox 安装在 winxp 上,在虚拟机中安装 debian 4.02r ,虚拟机名是 debian ,并安装了 apache2 php5 mysql-server ,在主机上用IE浏览 http://localhost,成功转发到虚拟机 debian 的 apache2 web 服务器上,通过这点我发现:可能 VirtualBox 的设置比 vmware 更灵活,更强大。

<think>我们正在解决用户的问题:如何配置VirtualBoxNAT模式下的端口转发规则,以便访问虚拟机上的特定服务(非80端口)。根据引用内容,特别是引用[1][3][5]提到,VirtualBoxNAT模式下需要手动设置端口转发规则才能让宿主机访问虚拟机上的非80端口服务(如SSH)。步骤分解:1.确认虚拟机网络设置NAT模式(默认即是)2.打开VirtualBox端口转发配置界面3.添加转发规则:将宿主机的某个端口映射到虚拟机的目标服务端口具体操作步骤:###1.确认虚拟机网络设置-在VirtualBox管理器中,选择目标虚拟机,点击“设置”-进入“网络”选项卡,确认“连接方式”为“网络地址转换(NAT)”###2.打开端口转发配置界面-在“网络设置中,展开“高级”选项-点击“端口转发”按钮,打开端口转发规则配置窗口###3.添加端口转发规则-点击右上角的“添加”按钮(图标为“+”)-填写规则参数(以SSH服务为例):- **名称**:自定义,如“SSHForwarding”- **协议**:选择TCP(大多数服务使用TCP,如SSH、HTTP等;如果是UDP服务则选UDP)- **主机IP**:留空(表示绑定到宿主机的所有网络接口)或指定宿主机IP(如127.0.0.1则只能本机访问)-**主机端口**:宿主机的端口(如1022,注意避免与宿主机已用端口冲突)- **子系统IP**:留空(表示虚拟机NAT网络接口)或填写虚拟机的IP(通常留空即可)- **子系统端口**:虚拟机内服务的端口(SSH默认为22,其他服务填写实际端口)>📌示例规则(引用[5]示例):> -主机端口:122>-子系统端口:22>则宿主机通过`localhost:122`即可访问虚拟机的SSH服务[^5]。###4.保存并启动虚拟机-保存设置后启动虚拟机,在宿主机上测试访问:```bash#测试SSH访问(使用主机端口122)ssh-p122 username@localhost```>💡对于其他服务(如Web服务的8080端口),只需将“子系统端口”改为8080,并选择一个宿主机空闲端口(如8088)即可。 ###图形界面替代方案(引用[3]说明)> “VirtualBox现在包含一个简单的图形端口转发窗口”[^3]###命令行配置方法(可选)如果习惯使用命令行,可以使用`VBoxManage`工具(需在宿主机命令行执行):```bash#添加转发规则(虚拟机名称为"YourVMName")VBoxManage modifyvm "YourVMName"--natpf1"规则名,tcp,,主机端口,,子系统端口"```>例如:将宿主机的1022端口转发虚拟机的22端口>```bash> VBoxManagemodifyvm"UbuntuVM" --natpf1 "ssh,tcp,,1022,,22"> ```###注意事项-**端口冲突**:确保“主机端口”在宿主机上未被占用-**虚拟机服务状态**:确保虚拟机内目标服务已启动并监听对应端口(如`netstat -tuln |grep22`)- **虚拟机防火墙**:如果虚拟机有防火墙(如Linux的firewalld),需放行目标端口(引用[5]提到临时关闭防火墙测试)[^5]通过以上步骤,即可实现宿主机通过指定端口访问虚拟机上的服务。 ###流程图```mermaidgraphTDA[启动VirtualBox管理器] -->B[选择目标虚拟机]B--> C[打开“设置”]C--> D[进入“网络”选项卡]D--> E[展开“高级”选项]E--> F[点击“端口转发”]F -->G[点击“+”添加规则]G--> H[填写名称、协议、主机端口、子系统端口]H -->I[保存设置]I -->J[启动虚拟机]J -->K[宿主机访问localhost:主机端口] ```§§相关问题§§1.VirtualBox桥接模式NAT模式有什么区别? 2.如何检查Linux虚拟机中某个端口是否被监听? 3.虚拟机内防火墙如何开放特定端口(如CentOS7)?</think>### VirtualBox NAT模式端口转发配置指南 在VirtualBoxNAT模式下配置端口转发,可使宿主机访问虚拟机内的特定服务(如SSH、Web服务等)。以下是详细步骤: #### 📌 图形界面配置(推荐) 1. **打开虚拟机设置** - 在VirtualBox管理器中选择目标虚拟机 - 点击"设置" > "网络" > "网卡1"选项卡 - 确认"连接方式"为**NAT** 2. **配置端口转发规则** - 展开"高级"选项 - 点击"端口转发"按钮 - 在弹出窗口中点击"+"添加新规则 ``` ┌───────────────────────┐ │ 名称: SSH_Forward │ │ 协议: TCP │ │ 主机IP: 留空 │ │ 主机端口: 2222 │ │ 子系统IP: 留空 │ │ 子系统端口: 22 │ └───────────────────────┘ ``` > 📝 规则说明: > - **主机端口**:宿主机访问时使用的端口(如2222) > - **子系统端口**:虚拟机内实际服务端口(如SSH默认为22) > - 其他字段通常留空即可[^3][^5] 3. **保存并测试** - 保存所有设置 - 启动虚拟机 - 在宿主机通过`localhost:主机端口`访问: ```bash ssh -p 2222 username@localhost # 测试SSH连接 ``` #### ⚙️ 命令行配置(适用于脚本/高级用户) ```bash # 添加端口转发规则 VBoxManage modifyvm "虚拟机名称" --natpf1 "规则名,tcp,,主机端口,,子系统端口" # 示例:将宿主机2222端口映射到虚拟机22端口 VBoxManage modifyvm "UbuntuVM" --natpf1 "ssh,tcp,,2222,,22" # 删除规则 VBoxManage modifyvm "UbuntuVM" --natpf1 delete "ssh" ``` > 💡 提示:使用`VBoxManage list vms`查看虚拟机名称[^3] #### 🔍 验证端口转发 1. **在虚拟机内检查服务状态** ```bash # 检查SSH服务是否运行 sudo systemctl status ssh # 确认端口监听状态 sudo netstat -tuln | grep :22 ``` 2. **在宿主机测试连接** ```bash # Windows 命令提示符 telnet localhost 2222 # Linux/macOS nc -zv localhost 2222 ``` #### ⚠️ 常见问题解决 1. **连接失败检查点**: - 虚拟机内防火墙是否放行目标端口(如`sudo ufw allow 22`) - 虚拟机内服务是否绑定到`0.0.0.0`而非`127.0.0.1` - 宿主机防火墙是否放行主机端口(如Windows防火墙) 2. **多服务转发示例**: | 服务类型 | 主机端口 | 子系统端口 | 访问方式 | |----------|----------|------------|-------------------| | SSH | 2222 | 22 | `ssh -p 2222 user@localhost` | | Web | 8080 | 80 | `http://localhost:8080` | | MySQL | 3307 | 3306 | `mysql -h 127.0.0.1 -P 3307` | > 通过端口转发NAT模式可实现宿主机与虚拟机间的服务访问,无需配置复杂网络[^1][^5]。 ```mermaid graph LR A[宿主机] -->|访问 localhost:2222| B[VirtualBox NAT引擎] B -->|转发到 :22| C[虚拟机] C -->|响应| B B -->|返回数据| A ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值