一、背景认知
1. 核心概念拆解
- VMware NAT 网络模式:VMware 默认的虚拟网络模式(对应虚拟交换机 VMnet8),核心是让虚拟机共享宿主机的 IP 地址访问外网,宿主机充当 "网络翻译官"(NAT = 网络地址转换),虚拟机位于独立的内网子网,外部设备(局域网 / 公网)无法直接访问虚拟机。
- 端口映射(端口转发) :打破 NAT 模式的内外网隔离,在宿主机和虚拟机之间建立一条 "流量隧道"------ 将宿主机的指定端口,与虚拟机内服务的监听端口绑定,所有访问
宿主机IP:宿主机端口的流量,会自动转发到虚拟机IP:虚拟机端口,实现外部对虚拟机内服务的访问。 - 云原生场景的核心价值 :初学者学习云原生技术,90% 会在 VMware 虚拟机中搭建 Docker、K8s 集群,模拟生产环境。NAT 端口映射是本地访问集群服务的最稳定方案:无需依赖局域网 DHCP、不占用局域网 IP、不受网络环境切换影响,可稳定访问 K8s Dashboard、Prometheus、微服务等云原生组件。
2. 核心适用场景
- 虚拟机内跑 Docker 容器,需在宿主机浏览器 / 工具访问容器服务
- VMware 虚拟机搭建单节点 / 多节点 K8s 集群,需外部访问 NodePort/Ingress 服务
- 局域网内其他设备,需访问你本地虚拟机中的云原生测试环境
- 远程办公场景,需通过内网穿透访问本地虚拟机中的开发环境
- 初学者学习云原生,不想频繁切换网络模式,固定环境配置
3. 前置环境说明
- 宿主机:Windows/macOS(本文以 Windows 为主,macOS 补充核心差异)
- 虚拟化软件:VMware Workstation Pro(推荐,有图形化配置界面)/ VMware Workstation Player(免费版,补充配置方法)
- 虚拟机系统:Ubuntu 20.04+/CentOS 7+(云原生主流系统)
- 虚拟机网络:已设置为NAT 模式(虚拟机设置→网络适配器→勾选 NAT 模式)
- 基础要求:虚拟机可正常访问外网,已安装 Docker/K8s 等云原生组件
二、核心配置
1. VMware NAT 网络核心架构(初学者必懂)
先搞懂数据流转路径,后续配置和排坑不会懵:
外部设备/宿主机 → 宿主机物理网卡/VMnet8虚拟网卡 → 宿主机端口 → VMware NAT网关 → 端口转发规则 → 虚拟机IP:目标端口 → 虚拟机内Docker/K8s服务
核心组件说明:
| 组件 | 核心作用 | 默认配置参考 |
|---|---|---|
| VMnet8 虚拟交换机 | NAT 模式的核心二层设备,连接宿主机和所有 NAT 模式虚拟机 | 子网段 192.168.x.0/24(x 为随机数,每台电脑不同) |
| NAT 网关 | 地址转换核心,负责宿主机与虚拟机子网的流量转发,是虚拟机的默认网关 | 通常为子网段的.2 地址(如 192.168.137.2) |
| DHCP 服务器 | 为 NAT 模式虚拟机自动分配 IP,默认开启 | 地址池通常为子网段.128~.254 |
| 宿主机 VMnet8 虚拟网卡 | 宿主机直接访问虚拟机的桥梁,与虚拟机同子网 | 通常为子网段的.1 地址(如 192.168.137.1) |
| 虚拟机网卡 | 虚拟机内的网络接口,接入 VMnet8 交换机 | 手动配置静态 IP(核心前提) |
2. 端口映射核心原理
NAT 模式下,虚拟机处于隔离内网,外部流量无法直接寻址到虚拟机。端口映射的本质,是在 VMware 的 NAT 网关上手动添加一条流量转发规则,告诉 NAT 设备:"所有访问宿主机 A 端口的 TCP/UDP 流量,全部转发到虚拟机 B 的 C 端口"。
核心特点:
- 单向转发:仅支持外部→虚拟机的入站流量转发,虚拟机主动访问外网无需配置
- 协议绑定:每条规则仅支持 TCP 或 UDP 一种协议,HTTP/SSH/MySQL 等绝大多数服务用 TCP
- 端口唯一:宿主机端口不能被其他程序(如 IIS、Nginx、Docker)占用
- 固定依赖:规则绑定虚拟机 IP,必须给虚拟机配置静态 IP,否则重启后 IP 变化规则失效
3. 端口映射核心配置四要素
所有配置都围绕这 4 个核心项,初学者提前记牢:
- 宿主机端口:外部访问的入口端口,建议 1024~65535 之间(避免系统保留端口),云原生服务建议用 30000 + 端口,与 K8s NodePort 默认范围对齐
- 虚拟机 IP 地址:虚拟机的静态内网 IP,必须在 VMnet8 子网段内
- 虚拟机端口:虚拟机内服务的监听端口(如 SSH 的 22、HTTP 的 80、K8s NodePort 的 30080)
- 传输协议:绝大多数场景选 TCP,DNS、流媒体等特殊服务选 UDP
4. 配置前核心前提(必做,否则 90% 概率配置失败)
- 虚拟机配置静态 IP:关闭 DHCP 自动获取,手动固定 IP,避免重启后 IP 变化导致规则失效
- 防火墙放行:宿主机防火墙放行宿主机端口,虚拟机防火墙放行虚拟机目标端口
- 端口占用检查:提前确认宿主机端口未被占用,避免规则冲突
三、基础实操(零门槛分步走,初学者直接照做)
本章节以 Windows 宿主机 + VMware Workstation Pro+Ubuntu 22.04 虚拟机为例,实现最基础的端口映射:将宿主机 2222 端口映射到虚拟机 22 端口(SSH 远程)、宿主机 8080 端口映射到虚拟机 80 端口(Web 服务),全程无跳步。
前置步骤 1:给虚拟机配置静态 IP(核心必做)
步骤 1.1:获取 VMnet8 网络基础信息
- 打开 VMware Workstation,顶部菜单栏点击「编辑」→「虚拟网络编辑器」
- 弹窗右下角点击「更改设置」,获取 Windows 管理员权限(无管理员权限无法修改配置)
- 在列表中选中「VMnet8」,类型为 NAT 模式,记录 3 个关键信息:
- 子网 IP:如 192.168.137.0
- 子网掩码:255.255.255.0
- 网关 IP:点击「NAT 设置」,查看网关 IP,如 192.168.137.2(必须记录)
- 点击「DHCP 设置」,可查看 IP 地址池,静态 IP 需设置在地址池外(如地址池是 128-254,静态 IP 可设为 192.168.137.100),避免 IP 冲突
步骤 1.2:虚拟机内配置静态 IP
Ubuntu 20.04 + 系统(netplan 管理)
-
登录虚拟机,执行命令查看网卡名称(通常是 ens33):
ip addr -
编辑网络配置文件(文件名以实际为准,通常是 00-installer-config.yaml):
sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak # 先备份 sudo vim /etc/netplan/00-installer-config.yaml -
替换为以下配置,对应你自己的子网信息: yaml
network: ethernets: ens33: # 你的网卡名称 dhcp4: false # 关闭DHCP自动获取 addresses: - 192.168.137.100/24 # 你的静态IP,/24对应子网掩码255.255.255.0 gateway4: 192.168.137.2 # 刚才记录的NAT网关IP nameservers: addresses: [114.114.114.114, 8.8.8.8] # DNS服务器 version: 2 renderer: networkd -
保存退出,执行命令生效配置:
sudo netplan apply -
验证配置:执行
ip addr,确认网卡 IP 已变为静态 IP,同时ping www.baidu.com能通,网络正常
CentOS 7 系统
-
编辑网卡配置文件:
sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33 -
修改核心参数:
BOOTPROTO=static # 改为静态IP ONBOOT=yes # 开机启用网卡 IPADDR=192.168.137.100 # 静态IP NETMASK=255.255.255.0 # 子网掩码 GATEWAY=192.168.137.2 # NAT网关IP DNS1=114.114.114.114 DNS2=8.8.8.8 -
重启网络生效:
sudo systemctl restart network
前置步骤 2:端口占用与防火墙预配置
-
宿主机端口占用检查 :打开 Windows CMD(管理员权限),执行命令,确认端口无占用(无输出即为未占用):
# 检查2222端口是否被占用 netstat -ano | findstr "2222" # 检查8080端口是否被占用 netstat -ano | findstr "8080" -
虚拟机防火墙放行端口 :
# Ubuntu(ufw防火墙) sudo ufw allow 22/tcp sudo ufw allow 80/tcp sudo ufw reload # CentOS(firewalld防火墙) sudo firewall-cmd --permanent --add-port=22/tcp --zone=public sudo firewall-cmd --permanent --add-port=80/tcp --zone=public sudo firewall-cmd --reload -
虚拟机内服务自测 :先确保虚拟机内服务正常启动,比如 SSH 默认开启,Web 服务可临时启动 nginx 测试:
# 安装nginx测试Web服务 sudo apt install nginx -y && sudo systemctl start nginx # 虚拟机内自测,有输出说明服务正常 curl 127.0.0.1:80
正式步骤:配置 VMware NAT 端口映射规则
步骤 1:打开 NAT 设置界面
- 关闭正在运行的虚拟机(建议,避免配置不生效),回到 VMware 主界面
- 顶部菜单栏「编辑」→「虚拟网络编辑器」→ 右下角「更改设置」获取管理员权限
- 选中「VMnet8(NAT 模式)」→ 点击右侧「NAT 设置」,进入端口转发配置界面
步骤 2:添加端口映射规则
- 在「端口转发」区域,点击「添加」,弹出「映射传入端口」窗口
- 按以下示例填写第一条规则(SSH 远程):
- 主机端口:2222(宿主机入口端口)
- 类型:TCP(默认勾选)
- 虚拟机 IP 地址:192.168.137.100(你配置的虚拟机静态 IP)
- 虚拟机端口:22(虚拟机内 SSH 服务端口)
- 描述:可选,填写「虚拟机 SSH 端口映射」,方便后续管理
- 点击「确定」,保存这条规则
- 再次点击「添加」,填写第二条规则(Web 服务):
- 主机端口:8080
- 类型:TCP
- 虚拟机 IP 地址:192.168.137.100
- 虚拟机端口:80
- 描述:虚拟机 Nginx Web 服务映射
- 点击「确定」保存
- 回到 NAT 设置界面,能看到两条规则已添加,连续点击「确定」→「应用」,保存所有配置,关闭虚拟网络编辑器
步骤 3:宿主机防火墙放行端口
Windows Defender 防火墙会拦截外部对端口的访问,必须添加入站规则:
- 按下 Win+R,输入
wf.msc,回车打开「高级安全 Windows Defender 防火墙」 - 左侧点击「入站规则」→ 右侧点击「新建规则」
- 规则类型选择「端口」→ 下一步
- 选择「TCP」→ 「特定本地端口」,填写
2222,8080→ 下一步 - 选择「允许连接」→ 下一步
- 配置文件全选(域、专用、公网)→ 下一步
- 规则名称填写「VMware NAT 端口映射」,点击「完成」
步骤 4:验证端口映射是否生效
严格按照「虚拟机内→宿主机→局域网其他设备」的顺序验证,快速定位问题:
- 虚拟机内自测:确保服务正常,前面已做,无问题再往下
- 宿主机本地访问验证 :
- SSH 测试:打开 CMD/PowerShell,执行
ssh 用户名@127.0.0.1 -p 2222,能正常登录虚拟机说明规则生效 - Web 测试:打开浏览器,访问
http://127.0.0.1:8080,能看到 Nginx 默认页面说明成功
- SSH 测试:打开 CMD/PowerShell,执行
- 局域网其他设备访问验证 :
- 先查看宿主机的局域网 IP(Win CMD 执行
ipconfig,查看物理网卡的 IPv4 地址,如 192.168.3.10) - 同一局域网的手机 / 电脑,访问
http://192.168.3.10:8080,能正常打开页面,说明全量配置成功
- 先查看宿主机的局域网 IP(Win CMD 执行
补充:VMware Workstation Player(免费版)配置方法
免费版无虚拟网络编辑器图形界面,需修改配置文件实现:
-
关闭所有虚拟机和 VMware Player
-
打开路径
C:\ProgramData\VMware\vmnetnat.conf(ProgramData 是隐藏文件夹,需开启显示隐藏文件) -
用记事本打开该文件,找到
[incomingtcp]区块 -
在区块下添加端口映射规则,格式为:
宿主机端口 = 虚拟机IP:虚拟机端口ini
[incomingtcp] 2222 = 192.168.137.100:22 8080 = 192.168.137.100:80 -
保存文件,重启 Windows 的「VMware NAT Service」服务(Win+R 输入
services.msc,找到该服务重启) -
后续防火墙配置、验证步骤和 Pro 版完全一致
初学者 90% 踩坑的排查指南
| 故障现象 | 核心排查方向 |
|---|---|
| 宿主机能访问,局域网其他设备不能 | 1. 宿主机防火墙入站规则未配置;2. 宿主机和局域网设备不在同一网段;3. 路由器开启了 AP 隔离 |
| 配置后完全不通,宿主机也访问不了 | 1. 虚拟机 IP 不是静态 IP,发生了变化;2. 虚拟机内服务未启动 / 端口监听错误;3. 虚拟机防火墙未放行端口;4. 宿主机端口被其他程序占用 |
| 重启虚拟机后规则失效 | 1. 虚拟机未配置静态 IP,DHCP 重新分配了 IP;2. 配置规则后未点击「应用」保存 |
| 能 ping 通虚拟机,但端口访问不通 | 1. 端口映射规则协议选错(TCP/UDP);2. 服务仅监听 127.0.0.1,未监听 0.0.0.0;3. 防火墙拦截 |
四、高阶用法(云原生场景专属)
基础映射只能满足单机服务访问,云原生场景下,我们需要适配 Docker、K8s 集群、多节点、公网访问等进阶需求,以下是可直接落地的高阶配置。
1. Docker 容器场景:双层端口映射联动
场景说明
虚拟机内运行 Docker 容器,容器的端口默认仅虚拟机内可访问,需通过「Docker 端口映射 + VMware NAT 端口映射」两层转发,实现宿主机 / 局域网对容器服务的访问。
核心逻辑
宿主机端口 → VMware NAT映射 → 虚拟机端口 → Docker端口映射 → 容器内端口
实操示例(以 nginx 容器为例)
-
第一步:Docker 容器启动,配置第一层端口映射虚拟机内执行命令,将容器 80 端口映射到虚拟机的 8081 端口:
sudo docker run -d --name nginx-demo -p 0.0.0.0:8081:80 nginx- 关键:必须加
0.0.0.0,让服务监听虚拟机所有网卡,否则仅虚拟机内可访问 - 虚拟机内自测:
curl 127.0.0.1:8081,有输出说明 Docker 映射成功
- 关键:必须加
-
第二步:VMware NAT 配置第二层端口映射打开虚拟网络编辑器→NAT 设置→添加规则:
- 主机端口:8888
- 类型:TCP
- 虚拟机 IP:192.168.137.100
- 虚拟机端口:8081
- 描述:Docker nginx 容器映射
-
第三步:放行防火墙,验证访问 宿主机浏览器访问
http://127.0.0.1:8888,即可直接访问 Docker 容器内的 nginx 服务
进阶技巧
- 容器数量较多时,可批量规划端口段:如虚拟机 10000-10099 端口对应容器端口,宿主机 20000-20099 对应映射,避免端口混乱
- 无需为每个容器单独配置 VMware 规则,可在虚拟机内部署 Nginx 反向代理,仅映射虚拟机 80/443 端口,通过域名区分不同容器服务
2. K8s 集群场景:端口映射适配云原生服务
场景说明
VMware 虚拟机搭建 K8s 集群(单节点 / 多节点),需访问集群内的 NodePort、Ingress、LoadBalancer 类型服务,这是云原生学习的核心场景。
核心适配方案
| K8s 服务类型 | 映射方案 | 适用场景 |
|---|---|---|
| NodePort | 直接映射 NodePort 端口到宿主机 | 测试单个服务,初学者入门首选 |
| Ingress Controller | 映射 80/443 端口到 Ingress 控制器所在节点 | 多服务统一入口,生产级方案 |
| LoadBalancer | 结合 MetalLB,映射 LoadBalancer IP 段 | 模拟公有云 LB,进阶学习 |
实操示例 1:NodePort 服务映射
-
第一步:创建 K8s NodePort 服务虚拟机内(K8s 主节点)创建 nginx-deployment.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-demo spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx-demo-svc spec: type: NodePort selector: app: nginx ports: - port: 80 targetPort: 80 nodePort: 30080 # 手动指定NodePort端口,范围30000-32767 selector: app: nginx -
执行命令创建服务:
kubectl apply -f nginx-deployment.yaml -
验证服务:虚拟机内执行
curl 127.0.0.1:30080,有输出说明服务正常 -
第二步:VMware NAT 配置映射规则添加规则,将宿主机 30080 端口,映射到 K8s 节点(主节点 / 工作节点均可)的 30080 端口:
- 主机端口:30080
- 类型:TCP
- 虚拟机 IP:192.168.137.100(K8s 节点静态 IP)
- 虚拟机端口:30080
- 描述:K8s NodePort nginx 服务
-
验证 :宿主机浏览器访问
http://127.0.0.1:30080,即可访问 K8s 集群内的服务
实操示例 2:Ingress Controller 统一映射
- 先在 K8s 集群内安装 Ingress Nginx Controller,默认监听节点的 80(HTTP)和 443(HTTPS)端口
- VMware NAT 添加两条规则,将宿主机 80/443 端口,映射到 Ingress 控制器所在节点的 80/443 端口
- 后续所有 K8s 服务,只需创建 Ingress 规则,通过不同域名区分,无需再新增 VMware 端口映射规则
- 本地配置 hosts 文件,将域名指向宿主机 IP,即可通过域名直接访问 K8s 内的所有服务,完美模拟生产环境
3. 批量端口映射与脚本化配置
当云原生服务需要映射大量端口时,手动添加规则效率极低,可通过以下方式批量配置:
- 端口段映射 :VMware NAT 支持端口段映射,格式为
起始端口-结束端口,例如将宿主机 30000-30010 端口,批量映射到虚拟机 30000-30010 端口,适合 K8s 多 NodePort 服务场景 - 配置文件批量修改 :直接编辑
vmnetnat.conf文件,在[incomingtcp]下批量添加规则,复制粘贴即可,比图形界面更高效 - 脚本化配置:Windows 可编写批处理脚本,自动修改配置文件、重启 NAT 服务,适合频繁切换测试环境的场景
4. 公网访问进阶配置
如需让公网用户访问你本地虚拟机中的云原生测试环境,可通过「VMware NAT 端口映射 + 内网穿透」实现:
- 先完成基础的 VMware NAT 端口映射,确保宿主机能正常访问服务
- 选择内网穿透工具(frp、ngrok、花生壳等),在宿主机部署客户端
- 配置穿透规则,将公网服务器的端口,映射到宿主机的对应端口
- 安全加固:配置访问密钥、IP 白名单,避免服务暴露在公网被攻击
5. 多虚拟机集群的端口映射隔离
当 VMware 内有多台虚拟机,分别搭建 K8s 集群的主节点、工作节点、存储节点时,需做好端口映射的隔离与规划:
- 为每台虚拟机配置独立的静态 IP,避免 IP 冲突
- 端口规划:按节点角色分配端口段,如主节点用 20000-20099,工作节点 1 用 20100-20199,避免端口冲突
- 访问控制:可在 NAT 设置中,通过描述区分不同节点的规则,也可在宿主机防火墙中配置 IP 白名单,限制仅指定设备可访问对应端口
五、拓展建议(初学者进阶避坑 + 学习路径)
1. 安全加固建议(重中之重)
- 禁止高危端口直接映射公网:严禁将 22(SSH)、3306(MySQL)、6379(Redis)等高危端口直接映射到公网,如需远程访问,必须修改默认端口、配置密钥登录、禁用 root 密码登录
- 最小端口开放原则:仅映射必须的端口,不用的规则及时删除,避免攻击面扩大
- 防火墙精细化配置:不要直接关闭防火墙,而是精准放行对应端口,同时可配置 IP 白名单,仅允许指定 IP 段访问
- 传输加密:Web 服务、API 服务建议配置 HTTPS,避免明文传输数据
- 定期审计:定期查看端口映射规则,清理无效规则,检查服务访问日志,排查异常访问
2. 性能优化建议
- 场景选型:如果是大流量、高并发的云原生服务测试,优先选择桥接模式,NAT 模式有地址转换的性能开销;日常学习、低并发测试,NAT 模式完全足够
- 优化配置:VMware 虚拟网络编辑器中,可将 VMnet8 的 MTU 值调整为与宿主机物理网卡一致,减少分片,提升传输效率
- 关闭不必要的过滤:宿主机防火墙中,仅对映射端口做基础放行,关闭不必要的安全扫描、流量过滤,避免影响传输速度
- 虚拟机网卡优化:虚拟机设置中,将网络适配器改为「VMXNET3」(高性能虚拟网卡),提升虚拟机网络吞吐量
3. 系统化问题排查体系
初学者遇到问题不要乱试,按照「从内到外、从下到上」的固定流程排查,100% 能定位问题:
- 服务层排查 :虚拟机内
curl 127.0.0.1:目标端口,确认服务正常启动、端口监听正确(ss -tulpn | grep 端口查看监听地址是否为 0.0.0.0) - 虚拟机网络层排查:ping 网关 IP,确认虚拟机网络正常;关闭虚拟机防火墙临时测试,确认是否为防火墙拦截
- VMware 规则层排查:检查虚拟网络编辑器中的规则,确认 IP、端口、协议配置正确;重启 VMware NAT Service 服务,重新加载配置
- 宿主机网络层排查 :
telnet 127.0.0.1 宿主机端口,确认宿主机端口可通;检查宿主机防火墙入站规则,关闭防火墙临时测试 - 外部网络层排查:局域网设备 ping 宿主机 IP,确认网络互通;检查宿主机局域网 IP 是否正确,路由器是否开启 AP 隔离
4. 网络模式选型对比(避免用错场景)
| 网络模式 | 核心特点 | 云原生适用场景 | 端口映射需求 |
|---|---|---|---|
| NAT 模式 | 虚拟机共享宿主机 IP,独立子网,隔离性好,不依赖局域网环境 | 本地学习测试、频繁切换网络环境、多虚拟机集群搭建 | 必须配置端口映射,外部才能访问 |
| 桥接模式 | 虚拟机直接接入局域网,和宿主机平级,有独立局域网 IP | 固定办公环境,需要局域网其他设备直接访问虚拟机,大流量测试 | 无需端口映射,直接通过虚拟机 IP 访问 |
| 仅主机模式 | 虚拟机仅能和宿主机通信,无法访问外网 | 完全隔离的测试环境,安全要求高的场景 | 仅宿主机可访问,无需映射,外部无法访问 |
5. 初学者进阶学习路径
- 吃透基础:先搞懂 VMware 虚拟网络的底层原理,熟练掌握 NAT 模式的端口映射、排坑,能独立完成 Docker、K8s 服务的映射配置
- 深入 Docker 网络:学习 Docker 的 bridge、host、overlay 网络模式,理解容器端口映射的底层实现,和 VMware NAT 的区别
- 攻克 K8s 网络模型:学习 K8s 的 Pod 网络、Service、Ingress、CNI 插件,理解云原生场景下的南北向、东西向流量转发
- 进阶网关与服务网格:学习 APISIX、Istio 等云原生网关,理解七层流量转发,替代传统的端口映射,实现更灵活的服务访问控制
- 生产级实践:学习公有云 VPC、NAT 网关、负载均衡的配置,将本地 VMware 的学习经验,迁移到生产级云原生环境中