在 VMware虚拟机中使用 NAT 网络模式
目录
问题
环境
NAT 网络的几个特性
NAT 网络配置步骤
1 将 VMware 配置为 NAT 网络模式
2 手动设置虚拟机 IP
3 设置端口转发
4 在宿主机访问虚拟机的服务
其他常用命令
问题
可恶的 mac 自动更新!!!再也不自动更新了!!我的 ubuntu 虚拟机用桥接跑的好好的,mac 升级到 sequoia 15.5 版本之后,虚拟机就直接和宿主机通信不了了….
原因可能是:https://community.broadcom.com/vmware-cloud-foundation/question/vmware-fusion-136-no-internet-connection-after-upgrade-to-macos-sequoia
讨论就是在说,macOS Sequoia 15.x 和 VMware Fusion 存在兼容问题。
暂时没有好的解决办法,因此本文将 VMware 下虚拟机的网络模式从桥接模式改成了 NAT模式 + 端口转发。
但影响就是:
- 以前在宿主机上直接访问的虚拟机 IP,要全部改为访问 localhost
- 虚拟机上增加了新的服务时,每次都需要手动加端口转发规则
环境
宿主机 macOS Sequoia 15.5
VMware Fusion 13.6.2
虚拟机 Ubuntu 24.04
NAT 网络的几个特性
(1) 与物理网卡无关
NAT 网络是完全由 VMware 虚拟化层管理的,不会使用宿主机的任何物理网卡(en0、en1)
(2) 可以动态/静态分配 IP
VMware 的 NAT 服务默认会通过 DHCP 自动为虚拟机分配 IP,但是如果你需要:
- 端口转发:需要将宿主机端口转发到虚拟机(如2222->22)
- 多个虚拟机之间互通
还是需要手动设置静态 IP 的,下面也是使用静态 IP 的方式来设置虚拟机的。
(3) 宿主机如何访问虚拟机
只能通过端口转发,需要手动设置转发规则。
比如:将宿主机的 2222 转发到虚拟机的 22 端口,用于 SSH。
这样在宿主机可以直接通过 localhost: 2222 访问虚拟机的 22 即 SSH 服务。
ps: 宿主机上是无法直接访问虚拟机 IP 的
(4) 虚拟机如何访问宿主机
直接通过 IP 访问
NAT 网络配置步骤
1 将 VMware 配置为 NAT 网络模式
(1) 修改 .vmx 配置文件
在宿主机上找到你的虚拟机文件(xxx.vmwarevm 文件),右键显示包内容,找到 .vmx 文件,打开编辑模式,修改或添加如下网络适配器配置:
ethernet0.connectionType = "nat" # NAT 模式
ethernet0.virtualDev = "vmxnet3" # 高性能网卡类型
ethernet0.present = "TRUE" # 启用网卡
ethernet0.addressType = "generated" # MAC地址自动生成
ethernet0.wakeOnPcktRcv = "FALSE" # 禁用网络唤醒
ethernet0.pciSlotNumber = "160" # 保持PCI插槽号不变
(2) 重启 VMware 网络服务
sudo "/Applications/VMware Fusion.app/Contents/Library/vmnet-cli" --stop
sudo "/Applications/VMware Fusion.app/Contents/Library/vmnet-cli" --start
2 手动设置虚拟机 IP
(1) 查看 VMware NAT 子网
# 在宿主机
cat "/Library/Preferences/VMware Fusion/vmnet8/dhcpd.conf"# 输出如下
subnet 172.16.240.0 netmask 255.255.255.0 { # 声明子网range 172.16.240.128 172.16.240.254; # DHCP 自动分配的 IP 范围option broadcast-address 172.16.240.255; # 广播地址option domain-name-servers 172.16.240.1; # DNS 服务器地址option routers 172.16.240.1; # 默认网关
}
可以看到 DHCP 自动分配的 IP 范围为 172.16.240.128 ~ 172.16.240.254,我们选择静态 IP 时要避开此范围(以下我们选用 172.16.240.10)
(2) 在虚拟机编辑 /etc/netplan/ 下的 yaml 配置文件(我的是 50-cloud-init.yaml)
network:version: 2ethernets:ens160: # 虚拟机的出口网卡dhcp4: no # 不自动分配IPaddresses: [172.16.240.10/24] # 静态IProutes:- to: defaultvia: 172.16.240.1 # 默认网关nameservers:addresses: [172.16.240.1, 8.8.8.8] # 同时配置NAT网关DNS和公共DNS
然后重启生效:
sudo netplan apply
3 设置端口转发
(1) 打开宿主机的 "/Library/Preferences/VMware Fusion/vmnet8/nat.conf" 配置文件,为你需要的端口设置转发规则
[incomingtcp]
2222 = 172.16.240.10:22 # ssh端口
5236 = 172.16.240.10:5236 # 其他你需要的端口
这样设置后,默认仅允许从宿主机本地访问,端口不会对外开放。
如果你需要开启外部访问,可以加一个 host 参数:
[incomingtcp]
2222 = 172.16.240.10:22, host = *
(2) 重启 VMware 网络服务
sudo "/Applications/VMware Fusion.app/Contents/Library/vmnet-cli" --stop
sudo "/Applications/VMware Fusion.app/Contents/Library/vmnet-cli" --start
(3) 验证端口是否开放
nc -zv localhost 2222
4 在宿主机访问虚拟机的服务
telnet localhost 5236 # 测试服务连通性
ssh -p 2222 username@localhost # 进入SSH
其他常用命令
# 查看网段占用情况
netstat -rn | grep 172.16# 查看网卡
ifconfig bridge101# 查看网关是否可达
ping 172.16.240.1# 查看默认网关
ip route show# 监听 ARP 响应
sudo tcpdump -i ens160 arp# 检查 ARP 解析
arp -an | grep 172.16.240.1