KVM 网络配置实战:NAT 与桥接(Bridge)怎么选?
这是 KVM 虚拟化从入门到实战 系列的第 5 篇。虚拟机建好了、磁盘准备好了,接下来要解决"虚拟机怎么上网、怎么被访问"的问题,这就是网络配置。
KVM 网络模式总览
| 模式 | 说明 | 虚拟机能否被外部访问 |
|---|---|---|
| NAT(默认 default) | 虚拟机经宿主机转发上网,隐藏在内网 | 默认不能,需端口映射 |
| 桥接 Bridge | 虚拟机与宿主机在同一网段,像独立主机 | 可以 |
| 隔离网络 | 虚拟机之间互通,不与外部相连 | 不能 |
一、NAT 模式(默认,最简单)
安装 libvirt 时自动创建了 default 网络(NAT):
bash
|---|----------------------------------------|
| | # 查看网络 |
| | virsh net-list --all |
| | virsh net-info default |
| | |
| | # 查看网络的 DHCP 配置(通常 192.168.122.0/24) |
| | virsh net-dumpxml default |
NAT 模式下虚拟机通过宿主机上网,虚拟机的 IP 由 libvirt 内置 DHCP 分配(默认 192.168.122.x)。
特点:
- ✅ 配置简单,开箱即用
- ✅ 安全,虚拟机不直接暴露
- ❌ 外部无法直接访问虚拟机,需配置端口转发
二、桥接模式(生产环境首选)
桥接让虚拟机直接接入物理网络,获得与宿主机同网段的 IP,就像一台独立主机。这是生产环境最常见的需求。
创建桥接
bash
|---|--------------------------------------------------------------|
| | # 查看当前网卡 |
| | ip addr |
| | |
| | # 创建桥接 br0(配置文件 /etc/sysconfig/network-scripts/ifcfg-br0) |
| | cat > /etc/sysconfig/network-scripts/ifcfg-br0 << 'EOF' |
| | DEVICE=br0 |
| | TYPE=Bridge |
| | BOOTPROTO=static |
| | ONBOOT=yes |
| | IPADDR=192.168.1.100 # 宿主机原 IP |
| | NETMASK=255.255.255.0 |
| | GATEWAY=192.168.1.1 |
| | EOF |
| | |
| | # 修改物理网卡 enp0s3 桥接到 br0 |
| | cat > /etc/sysconfig/network-scripts/ifcfg-enp0s3 << 'EOF' |
| | DEVICE=enp0s3 |
| | TYPE=Ethernet |
| | ONBOOT=yes |
| | BRIDGE=br0 |
| | EOF |
| | |
| | # 重启网络 |
| | systemctl restart network |
创建桥接虚拟机
bash
|---|--------------------------|
| | virt-install \ |
| | --name vm02 \ |
| | --network bridge=br0 \ |
| | ... |
三、常用网络操作
bash
|---|-------------------------------------------------------------------------|
| | # 查看网络状态 |
| | virsh net-list --all |
| | |
| | # 查看网桥信息 |
| | brctl show |
| | |
| | # 为虚拟机动态添加网卡(需编辑配置后重启) |
| | virsh attach-interface vm01 --type bridge --source br0 --model virtio |
四、端口映射(NAT 下开放服务)
如果用了 NAT 又想暴露服务,可以配置端口转发,但比较繁琐。生产环境推荐直接改桥接更省心。
如何选择?
- 个人测试、快速体验 → NAT(默认即可)
- 生产环境、对外提供服务 → 桥接(首选)
- 内部隔离网络、集群内网 → 隔离网络
小结
网络是虚拟机对外服务的桥梁。记住:生产环境用桥接,虚拟机才有独立的网络身份。下一篇进入性能优化,教你把 KVM 调优到接近物理机性能。