首页/云/云平台与虚拟化速查/NAT 与仅主机网络模式
虚拟化基础63 条

NAT 与仅主机网络模式

NAT 与仅主机(host-only/isolated)是两种非桥接网络:前者经宿主地址转换出网、外部访问需端口转发;后者只在宿主与虚机之间互通,用于隔离实验。

云平台与虚拟化速查云更新于 2026-10-13

NAT 与仅主机网络

NAT 与仅主机(host-only / isolated)是两种非桥接的网络模式:NAT 让虚机经宿主做地址转换出网,外部要访问虚机就得配置端口转发;仅主机网络只在宿主与虚机之间互通,天然隔离,适合实验与取证环境。libvirt 默认提供的 default 网络就是 NAT 模式。

基本信息

默认 NAT 网络libvirt 的 default 网络使用 virbr0,网段常见 192.168.122.0/24
出网方式经宿主机做源地址转换(SNAT)
外部访问虚机需要端口转发(DNAT)或宿主侧代理
仅主机网络不提供外网出口,只有宿主可达
管理工具virsh net-* 系列命令,或 virt-manager
持久化手工写入的 iptables 规则不会随重启保存

模式对比

模式虚机出网外部访问虚机典型用途
NAT经宿主转换出网需端口转发开发机、单机实验
仅主机不提供仅宿主可访问隔离实验、取证环境
桥接直接走物理网络同网段直接可达需要独立 IP 的服务器场景
DNS 与 DHCP由虚拟网络提供由虚拟网络提供依赖外部网络

典型使用场景

  • 单机开发环境:虚机需要访问外网下载依赖
  • 隔离实验:虚机与宿主互通但不接触外网
  • 取证与分析环境需要严格网络隔离
  • 临时验证服务:把宿主端口映射给外部访问
  • 搭建多虚机互联的实验拓扑

为 NAT 网络加端口转发

为 NAT 网络加端口转发
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2222 \
  -j DNAT --to 192.168.122.10:22      # 把宿主 2222 转发到虚机 22
sudo iptables -t nat -L POSTROUTING -n | head -5     # 看 NAT 出网规则是否存在
virsh net-list --all                                 # 查看虚拟网络状态
virsh net-dumpxml default | grep -E 'forward|ip address'   # 看是否启用 forward
# 注意:手工规则不随宿主重启保存,也不随 libvirt 网络事件自动维护
NAT 网络的细节最好用 net-* 命令管理:手工往 iptables 里加规则,在 libvirt 重启网络(net-destroy 后 net-start)时会被清理掉,表现为“早上还通、重启网络后就不通”。需要长期生效的转发规则应写进网络定义或宿主持久化配置。
仅主机网络没有出口:需要装包或更新时,要么临时再加一块 NAT 网卡,要么在宿主上做代理,别指望它自己连上外网。

易错点

  • NAT 下用宿主 IP 直连虚机服务不通:忘了端口转发
  • 仅主机网络里指望虚机访问外网,第二块网卡或代理方案未设计
  • 手工 iptables 规则在 libvirt 重启网络后被清掉,故障现象反复出现
  • 端口转发只加 DNAT 没加对应的转发与放行规则,链路仍然不通

数据来源与参考

  • libvirt wiki:Networking
  • Oracle VirtualBox 用户手册:网络模式
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌