Fedora虚拟机在NAT模式下,虚拟机默认可以访问主机和外网,但主机无法直接访问虚拟机;实现互访的关键是配置端口转发,并放行Fedora防火墙。 换句话说,NAT模式不是不能互访,而是需要你手动打开一条“门”,下面从原理到命令,一步步拆解。
Fedora虚拟机NAT模式下如何实现主机与虚拟机互访?核心原理与操作路径
NAT模式互访的基本逻辑
NAT模式下,虚拟化软件会创建一个私有网络,Fedora虚拟机获得类似168.x.128的地址,网关通常是168.x.2或0.2.2,虚拟机发出的请求会被NAT设备转换后送到主机和外网。
但反过来,主机想访问虚拟机时,NAT设备不知道把请求转给哪台虚拟机,据VMware官方文档,NAT模式通过虚拟NAT设备和DHCP服务器为虚拟机分配私有IP,主机访问虚拟机必须依赖端口转发,也就是把主机某个端口映射到虚拟机的IP和端口上。
虚拟机访问主机则简单得多,虚拟机可以把NAT网关当作跳板,直接访问主机在NAT网络中的虚拟网卡地址,比如VMware的VMnet8网卡,VirtualBox的0.2.2。
Fedora NAT模式与桥接模式互访区别:为什么NAT需要额外配置
| 对比项 | NAT模式 | 桥接模式 |
|---|---|---|
| 虚拟机IP | 私有地址,由虚拟DHCP分配 | 与主机同网段,由路由器分配 |
| 主机访问虚拟机 | 需要端口转发 | 可直接访问 |
| 虚拟机访问主机 | 通过NAT网关 | 通过局域网IP |
| 外部网络访问 | 默认不可入站 | 可被局域网其他设备访问 |
| 安全性 | 较高,默认隔离 | 较低,暴露在局域网 |
| 适用场景 | 本地开发、测试、IP资源有限 | 需要模拟独立服务器 |
行业共识认为,NAT模式比桥接模式更安全,但互访需要显式配置,如果你只是本地开发,NAT加端口转发足够用,不必改动虚拟机网络为桥接。
本地开发场景下Fedora虚拟机NAT互访配置:主机访问虚拟机服务
VMware Workstation端口转发配置步骤

假设Fedora虚拟机运行SSH服务,端口22,你希望主机通过0.0.1:2222访问它。
-
第一步,确认Fedora虚拟机IP,在虚拟机内执行:
ip addr show ip route | grep default
记下类似
168.100.128的地址。 -
第二步,打开VMware Workstation,点击“编辑”菜单,选择“虚拟网络编辑器”,需要管理员权限,点击“更改设置”。
-
第三步,选中VMnet8,点击“NAT设置”,在“端口转发”区域点击“添加”。
-
第四步,填写规则:
- 主机端口:
2222 - 类型:
TCP - 虚拟机IP地址:
168.100.128 - 虚拟机端口:
22 - 描述:
fedora-ssh
- 主机端口:
-
第五步,保存后,在主机上测试:
ssh fedora@127.0.0.1 -p 2222
如果Fedora里运行的是Web服务,比如8080端口,同样添加主机端口
8080映射到虚拟机8080,然后浏览器访问http://127.0.0.1:8080。
VirtualBox端口转发配置步骤
VirtualBox的NAT网络默认网关是0.2.2,配置路径略有不同。
- 关闭虚拟机,进入“设置” -> “网络” -> “网卡1”。
- 连接方式选择“NAT”。
- 点击“高级” -> “端口转发”。
- 添加规则:
- 名称:
ssh - 协议:
TCP - 主机IP:留空或
0.0.1 - 主机端口:
2222 - 子系统IP:留空或填写虚拟机IP
- 子系统端口:
22
- 名称:
- 启动虚拟机,主机执行:
ssh fedora@127.0.0.1 -p 2222
据VirtualBox用户手册,NAT网络默认网关为0.2.2,主机环回地址0.0.1可用于端口转发访问。
Fedora防火墙与SELinux放行策略
端口转发配置成功后,主机仍可能连不上虚拟机,多数情况下,是Fedora防火墙或SELinux在拦截。
- 查看防火墙状态:
sudo firewall-cmd --state sudo firewall-cmd --list-all
- 放行SSH服务:
sudo firewall-cmd --add-service=ssh --permanent sudo firewall-cmd --reload
- 放行自定义Web端口:
sudo firewall-cmd --add-port=8080/tcp --permanent sudo firewall-cmd --reload
- 检查SELinux:
getenforce
如果返回
Enforcing,且Web服务使用非标准端口,可能需要调整端口标签:sudo semanage port -a -t http_port_t -p tcp 8080
如果
semanage命令不存在,安装policycoreutils-python-utils。
无需额外公网IP的Fedora虚拟机NAT互访方案:虚拟机访问主机
确认主机在NAT网络中的地址
Fedora虚拟机访问主机,不需要端口转发,只需要知道主机在NAT网络中的虚拟网卡IP。
- VMware:在主机上执行
ipconfig(Windows)或ip addr(Linux),查看VMnet8的地址,通常是168.x.1。 - VirtualBox:虚拟机内直接使用
0.2.2访问主机。 - Fedora虚拟机内测试:
ping 192.168.x.1 curl http://192.168.x.1:8080
放行主机防火墙入站规则
主机上的服务也需要放行,比如主机运行了Python HTTP服务,监听0.0.0:8080,但Windows Defender防火墙可能阻止入站。
- Windows主机:进入“高级安全Windows Defender防火墙” -> “入站规则” -> “新建规则” -> 端口 -> TCP 8080 -> 允许连接。
- Linux主机:使用firewalld或ufw放行:
sudo firewall-cmd --add-port=8080/tcp --permanent sudo firewall-cmd --reload
或
sudo ufw allow 8080/tcp
测试互访连通性
配置完成后,用以下命令验证:
- 主机访问虚拟机SSH:
ssh -p 2222 fedora@127.0.0.1
- 主机访问虚拟机Web:
curl http://127.0.0.1:8080
- 虚拟机访问主机Web:
curl http://192.168.x.1:8080
- 检查端口监听:
ss -tlnp
如果仍不通,依次排查:虚拟机IP是否变化、端口转发规则是否生效、Fedora防火墙是否放行、主机防火墙是否拦截、SELinux是否阻止。

Fedora虚拟机NAT模式互访常见问题解答
Fedora虚拟机NAT模式下主机ping不通虚拟机怎么办?
NAT模式默认不转发ICMP协议,所以主机ping不通虚拟机是正常现象,端口转发只支持TCP和UDP,不支持ICMP,如果你必须用ping测试,可以改用桥接模式,或者使用Host-Only模式再加一张网卡,对于本地开发,直接测试SSH或HTTP端口即可,不必纠结ping。
Fedora NAT模式与桥接模式哪个更适合主机与虚拟机互访?
看场景,如果你需要主机直接访问虚拟机,且虚拟机数量少,桥接模式更省事,虚拟机会获得局域网IP,主机和虚拟机互相直接访问,如果你需要隔离环境、IP资源有限、不想让虚拟机暴露在局域网,NAT模式加端口转发更合适,近年来,本地开发环境使用虚拟机进行隔离测试越来越普遍,NAT模式配合端口转发是零成本方案,无需额外购买公网IP或云服务器。
Fedora虚拟机NAT端口转发后仍无法访问如何排查?
按顺序检查:
- 虚拟机IP是否与转发规则一致,Fedora重启后DHCP可能分配新IP。
- 端口转发是否保存并应用,VMware需要点击“确定”后重启NAT服务,VirtualBox需要关闭虚拟机再设置。
- Fedora防火墙是否放行对应端口,执行
sudo firewall-cmd --list-all查看。 - SELinux是否拦截,执行
getenforce,临时设为宽容模式测试:sudo setenforce 0。 - 主机防火墙是否阻止入站,Windows Defender或Linux的firewalld。
- 服务是否监听正确地址,Fedora内执行
ss -tlnp,确认服务监听0.0.0或,而不是仅0.0.1。 - 端口是否被占用,主机上执行
netstat -ano | findstr 2222。
如果以上都正常,重启虚拟化软件的网络服务,或重启主机网络适配器,端口转发本质是DNAT,主机端口收到请求后转给虚拟机IP和端口,任何一环断开都会失败。
Fedora虚拟机NAT模式下实现主机与虚拟机互访,核心就是端口转发加防火墙放行。 虚拟机访问主机靠NAT网关,主机访问虚拟机靠端口映射,两者都通,本地开发环境就顺了。