基于云原生的 VMware NAT 网络端口映射

张开发
2026/4/22 9:09:38 15 分钟阅读

分享文章

基于云原生的 VMware NAT 网络端口映射
一、背景认知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/24x 为随机数每台电脑不同NAT 网关地址转换核心负责宿主机与虚拟机子网的流量转发是虚拟机的默认网关通常为子网段的.2 地址如 192.168.137.2DHCP 服务器为 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传输协议绝大多数场景选 TCPDNS、流媒体等特殊服务选 UDP4. 配置前核心前提必做否则 90% 概率配置失败虚拟机配置静态 IP关闭 DHCP 自动获取手动固定 IP避免重启后 IP 变化导致规则失效防火墙放行宿主机防火墙放行宿主机端口虚拟机防火墙放行虚拟机目标端口端口占用检查提前确认宿主机端口未被占用避免规则冲突三、基础实操零门槛分步走初学者直接照做本章节以 Windows 宿主机 VMware Workstation ProUbuntu 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虚拟机内配置静态 IPUbuntu 20.04 系统netplan 管理登录虚拟机执行命令查看网卡名称通常是 ens33ip addr编辑网络配置文件文件名以实际为准通常是 00-installer-config.yamlsudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak # 先备份 sudo vim /etc/netplan/00-installer-config.yaml替换为以下配置对应你自己的子网信息yamlnetwork: 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修改核心参数BOOTPROTOstatic # 改为静态IP ONBOOTyes # 开机启用网卡 IPADDR192.168.137.100 # 静态IP NETMASK255.255.255.0 # 子网掩码 GATEWAY192.168.137.2 # NAT网关IP DNS1114.114.114.114 DNS28.8.8.8重启网络生效sudo systemctl restart network前置步骤 2端口占用与防火墙预配置宿主机端口占用检查打开 Windows CMD管理员权限执行命令确认端口无占用无输出即为未占用# 检查2222端口是否被占用 netstat -ano | findstr 2222 # 检查8080端口是否被占用 netstat -ano | findstr 8080虚拟机防火墙放行端口# Ubuntuufw防火墙 sudo ufw allow 22/tcp sudo ufw allow 80/tcp sudo ufw reload # CentOSfirewalld防火墙 sudo firewall-cmd --permanent --add-port22/tcp --zonepublic sudo firewall-cmd --permanent --add-port80/tcp --zonepublic 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 主界面顶部菜单栏「编辑」→「虚拟网络编辑器」→ 右下角「更改设置」获取管理员权限选中「VMnet8NAT 模式」→ 点击右侧「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 防火墙会拦截外部对端口的访问必须添加入站规则按下 WinR输入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 默认页面说明成功局域网其他设备访问验证先查看宿主机的局域网 IPWin CMD 执行ipconfig查看物理网卡的 IPv4 地址如 192.168.3.10同一局域网的手机 / 电脑访问http://192.168.3.10:8080能正常打开页面说明全量配置成功补充VMware Workstation Player免费版配置方法免费版无虚拟网络编辑器图形界面需修改配置文件实现关闭所有虚拟机和 VMware Player打开路径C:\ProgramData\VMware\vmnetnat.confProgramData 是隐藏文件夹需开启显示隐藏文件用记事本打开该文件找到[incomingtcp]区块在区块下添加端口映射规则格式为宿主机端口 虚拟机IP:虚拟机端口ini[incomingtcp] 2222 192.168.137.100:22 8080 192.168.137.100:80保存文件重启 Windows 的「VMware NAT Service」服务WinR 输入services.msc找到该服务重启后续防火墙配置、验证步骤和 Pro 版完全一致初学者 90% 踩坑的排查指南故障现象核心排查方向宿主机能访问局域网其他设备不能1. 宿主机防火墙入站规则未配置2. 宿主机和局域网设备不在同一网段3. 路由器开启了 AP 隔离配置后完全不通宿主机也访问不了1. 虚拟机 IP 不是静态 IP发生了变化2. 虚拟机内服务未启动 / 端口监听错误3. 虚拟机防火墙未放行端口4. 宿主机端口被其他程序占用重启虚拟机后规则失效1. 虚拟机未配置静态 IPDHCP 重新分配了 IP2. 配置规则后未点击「应用」保存能 ping 通虚拟机但端口访问不通1. 端口映射规则协议选错TCP/UDP2. 服务仅监听 127.0.0.1未监听 0.0.0.03. 防火墙拦截四、高阶用法云原生场景专属基础映射只能满足单机服务访问云原生场景下我们需要适配 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虚拟机 IP192.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进阶学习实操示例 1NodePort 服务映射第一步创建 K8s NodePort 服务虚拟机内K8s 主节点创建 nginx-deployment.yamlapiVersion: 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虚拟机 IP192.168.137.100K8s 节点静态 IP虚拟机端口30080描述K8s NodePort nginx 服务验证宿主机浏览器访问http://127.0.0.1:30080即可访问 K8s 集群内的服务实操示例 2Ingress Controller 统一映射先在 K8s 集群内安装 Ingress Nginx Controller默认监听节点的 80HTTP和 443HTTPS端口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. 安全加固建议重中之重禁止高危端口直接映射公网严禁将 22SSH、3306MySQL、6379Redis等高危端口直接映射到公网如需远程访问必须修改默认端口、配置密钥登录、禁用 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 的学习经验迁移到生产级云原生环境中

更多文章