服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-10-23 简米科技 4,375 字 10 分钟阅读

虚拟机NAT转发后,如何从外网正确访问内网服务?,外网访问虚拟机NAT端口映射教程

导读虚拟机的NAT模式转发是典型的“出口简单、入口复杂”,外网想访问内网虚拟机,核心在于把三个环节打通:虚拟机端口映射必须配好、宿主机防火墙必须放行、路由器必须拿到公网IP并做端口转发;如果最后一步没有公网IP,那就老老实实用内网穿透,搞清楚NAT模式的网络链路,才知道卡在哪一步NAT模式下,虚拟机和宿主机共享一个……

虚拟机的NAT模式转发是典型的“出口简单、入口复杂”,外网想访问内网虚拟机,核心在于把三个环节打通:虚拟机端口映射必须配好、宿主机防火墙必须放行、路由器必须拿到公网IP并做端口转发;如果最后一步没有公网IP,那就老老实实用内网穿透。

搞清楚NAT模式的网络链路,才知道卡在哪一步

NAT模式下,虚拟机和宿主机共享一个IP地址,比如你在VMware里建了一台CentOS,虚拟机的IP是192.168.88.128,宿主机Windows的IP是192.168.1.10,那么外网访问的流量路径是这样的:

外部设备 → 你的家庭路由器(公网IP) → 宿主机(Windows) → 虚拟机(CentOS的服务端口)

这中间任何一环断了,外网都进不来,大多数人配置失败,不是端口映射写错,就是根本不知道运营商给的是内网IP。

虚拟机端口映射怎么设置,这一步错了后面全白搭

先明确一个概念:NAT模式下,虚拟机对于宿主机来说是一台“隐形设备”,宿主机自己有一套流量转发机制,但默认不主动把外网流量导给虚拟机,你得手动告诉虚拟化软件:某个端口的流量,请转交给虚拟机的某个IP的某个端口。

VMware Workstation的NAT映射配置

打开VMware Workstation,菜单栏点击“编辑” → “虚拟网络编辑器”。

  • 选中NAT模式的网卡(通常是VMnet8)。
  • 点击右下角NAT设置按钮。
  • 在弹出的窗口中,点击添加端口转发规则。
  • 主机端口填一个没被占用的端口,比如2222。
  • 虚拟机IP地址填你系统的实际IP,比如192.168.88.128。
  • 虚拟机端口填22(SSH)或者8080(Web服务),看你需要转发什么。

配置完成后,在本机用 telnet 127.0.0.1 2222 测一下,能通就说明宿主机到虚拟机的转发已经生效。

VirtualBox的端口映射命令

VirtualBox的NAT转发不提供图形界面入口,得用VBoxManage命令行工具,打开终端(Windows用CMD或PowerShell),切换到VirtualBox的安装目录:

VBoxManage modifyvm "你的虚拟机名称" --natpf1 "规则名称,tcp,,2222,,22"

这条命令的意思是:把宿主机的2222端口TCP流量转发到虚拟机的22端口,以此类推,把最后的两个数字改成你需要的端口就行,想删掉规则,用:

VBoxManage modifyvm "你的虚拟机名称" --natpf1 delete "规则名称"

虚拟机端口映射不生效的常见原因

根据多数用户踩过的坑,以下是几个高频故障点:

  • 虚拟机IP写死了旧地址:如果你在虚拟机里设置了静态IP,但网卡换了网段,转发规则会指向一个不存在的IP,用 ip addr 或 ipconfig 确认当前实际IP。
  • 宿主机端口被占用:比如你转发宿主机80端口,但宿主机自己装了nginx或IIS,端口已经占用了,换一个高位端口,比如8080、8443。
  • 虚拟机防火墙拦截:Ubuntu系统默认开着ufw,CentOS默认有firewalld,先临时关闭防火墙测试,能通再放行具体端口:
systemctl stop firewalld   # CentOS
systemctl stop ufw         # Ubuntu

NAT模式外网访问内网虚拟机,宿主机防火墙是第二道拦路虎

就算虚拟机端口映射配好了,宿主机Windows或Linux的防火墙也可能把所有入站流量挡在门外,上面说的 telnet 127.0.0.1 2222 测试走的是回环地址,绕过了防火墙检查,等外网流量从物理网卡进来,防火墙规则就生效了。

在Windows宿主机上,以管理员身份运行CMD,执行:

netsh advfirewall firewall add rule name="VM_NAT" dir=in action=allow protocol=TCP localport=2222

这条命令的作用是放行TCP入站的2222端口,如果你用的是Linux宿主机,更简单:

iptables -I INPUT -p tcp --dport 2222 -j ACCEPT

做完这一步,再用手机4G网络(关闭WiFi)访问 宿主机局域网IP:2222 测试一下,通了,说明宿主机这一层没问题了。

没有公网IP怎么外网访问虚拟机,内网穿透方案怎么选

这是最现实的一个问题,根据宽带服务商的普遍策略,家庭宽带的公网IPv4地址已经日益稀少,相当一部分地区的用户拿到的是CGNAT(运营商级NAT)后的内网IP,你打电话申请公网IP,客服往往回复没有权限或需要企业专线,这种情况下,路由器端口转发根本无从谈起,因为路由器WAN口IP本身就是私有的。

行业共识认为,在无法获取公网IPv4的前提下,内网穿透是VMware虚拟机外网访问的唯一可靠路径,目前主流方案有三类,各有短板:

方案 适用场景 优点 缺点
frp 有云服务器 稳定可控,流量不走第三方 需要一台带公网IP的云主机,有运维门槛
cpolar/花生壳 个人演示 配置简单,下载即用 免费版带宽小,部分功能收费
Tailscale/ZeroTier 多设备互访 走P2P通道,延迟低 两端都要装客户端,不适合开放给外部用户

个人开发者的典型场景是:在家用旧电脑跑了个虚拟机做测试环境,在公司或出差时想连回去看看服务状态,这种情况下,Tailscale是最省心的方案,在宿主机和你的电脑上各装一个客户端,登录同一账号,虚拟机网络选NAT模式,宿主机开启IP转发,之后直接用虚拟机的Tailscale虚拟IP访问就行。

如果是给朋友演示项目,或者让客户临时看个页面,用cpolar这类隧道工具更快,在宿主机安装后,执行一条命令就能映射出公网地址:

cpolar tcp -region=cn 2222

生成一个形如 tcp.cpolar.cn:12345 的公网地址,对方的SSH客户端直接连这个地址就能到达虚拟机的22端口。

光猫拨号还是路由器拨号,决定了路由器端口转发能不能做

前面说的是没有公网IP的情况,如果你确认自己有公网IP,但端口转发还是不生效,那问题多半出在光猫上。

宽带安装时,默认是光猫拨号,路由器WAN口拿到的是光猫分配的私有IP,比如192.168.1.2,你在路由器上做端口映射时,实际上是把规则加在了私有网络内部,外网流量根本到不了路由器这一层。

正确做法是改成路由器拨号:

  • 用超级管理员账号登录光猫的配置页面(常见地址192.168.1.1,超级账号一般是telecomadmin,密码因地区而异,网上搜索对应型号的默认密码)。
  • 找到“网络” → “宽带设置”,把连接模式从Route改成Bridge。
  • 进入你的路由器后台,设置PPPoE拨号,填写宽带账号密码。

改完之后,路由器WAN口地址变成真正的公网IP,然后到“端口映射”或“虚拟服务器”页面,把21115这类端口映射到宿主机的192.168.1.10,再通过VMware NAT把宿主机的21115端口映射到虚拟机的22端口,这一套下来才是完整的链路。

行业人士指出,在光猫改桥接的过程中,IPTV和固话业务可能受到影响,操作前务必拍下光猫原来的配置截图,出了问题能及时还原。

外网访问速度慢或者失败?逐层排查端口转发链路

不管是NAT模式的端口转发,还是内网穿透,你最终都要验证“整条链路是否畅通”,用一张表直接理清排查顺序:

排查步骤 验证方法 常见结论
虚拟机服务监听地址 在虚拟机内执行 ss -lntp 服务必须监听0.0.0.0而非127.0.0.1
宿主机到虚拟机 宿主机执行 telnet 虚拟机IP 22 不通则检查VMware NAT规则
局域网设备到宿主机 手机连同一路由器,访问 宿主机IP:2222 不通则检查Windows防火墙
外网到路由器 用手机4G访问 公网IP:2222 不通则检查路由器端口映射或光猫桥接

服务监听地址是很多人忽略的一点,默认情况下,Nginx可能只监听127.0.0.1,MongoDB也可能只绑定localhost,你从虚拟机外访问自然会被拒绝,确认下配置文件,改成 listen 0.0.0.0:8080 或 bind_ip_all = true,然后重启服务。

外网用域名访问虚拟机,DDNS动态解析要提前搞定

家庭宽带的公网IP地址是动态变化的,断电重启光猫IP就变了,你刚才在路由器上配好的端口转发规则用的公网IP是新地址,下次就失效了。

在路由器后台找一下“DDNS”或“动态DNS”功能,通常内置了花生壳、DynDNS或No-IP的客户端,注册一个免费域名,填写账号密码后,路由器会在IP变化时自动更新解析记录,这样你只需要记住域名,不用每次查IP地址。

特别注意:DDNS只是把域名解析到你的公网IP,端口转发规则必须跟着IP段调整,如果路由器重启后WAN口IP变了,去检查一下已有端口映射规则,部分路由器会自动更新,部分需要手动改。

关于虚拟机NAT转发的几个高频问题

为什么外网访问很慢,但局域网内访问飞快?

多数情况下是上行带宽瓶颈,家庭宽带的上行速度通常远小于下行,从外网拉取虚拟机里的资源时,实际流量走公网上行链路,速度取决于你宽带的签约上行速率,和虚拟机网络模式没关系,NAT模式下所有流量经宿主机转发,如果宿主机CPU占用率高,也会造成额外的性能损耗。

虚拟机NAT模式和桥接模式哪个好?

从外网访问的角度来看,桥接模式更直接,虚拟机和宿主机在同一网段,相当于一台独立设备,端口映射只需在路由器上做一次,NAT模式则在虚拟机外多包了一层宿主机转发,排查链路更复杂,但NAT模式的优点是虚拟机IP固定,不会因为路由器DHCP地址池的变化而改变,适合长时间运行的测试环境。

用内网穿透工具映射的地址会被别人扫描吗?

会,任何暴露在公网的端口都会面临持续扫描,这是常态,建议在虚拟机上启用SSH密钥认证、禁用密码登录,或者把端口限制为固定来源IP,穿透工具的免费域名经常变化,也容易成为扫描目标,重要服务还是用frp绑定的自定义域名配合访问控制更稳妥。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱