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

fedora虚拟机NAT模式下如何实现主机与虚拟机互访?,NAT模式虚拟机与主机通信设置技巧

导读Fedora虚拟机在NAT模式下,虚拟机默认可以访问主机和外网,但主机无法直接访问虚拟机;实现互访的关键是配置端口转发,并放行Fedora防火墙, 换句话说,NAT模式不是不能互访,而是需要你手动打开一条“门”,下面从原理到命令,一步步拆解,Fedora虚拟机NAT模式下如何实现主机与虚拟机互访?核心原理与操作……

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虚拟机NAT模式下如何实现主机与虚拟机互访?,NAT模式虚拟机与主机通信设置技巧

假设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服务:

    fedora虚拟机NAT模式下如何实现主机与虚拟机互访?,NAT模式虚拟机与主机通信设置技巧

    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模式下如何实现主机与虚拟机互访?,NAT模式虚拟机与主机通信设置技巧

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网关,主机访问虚拟机靠端口映射,两者都通,本地开发环境就顺了。

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