KVM桥接网络配置,虚拟机直接获取公网IP完整步骤
KVM 桥接网络配置的作用是让虚拟机直接使用宿主机的物理网卡,从而和宿主机处于同一局域网,并在公网环境下直接获取公网 IP。
本文面向零基础用户,按实际执行顺序拆解完整步骤,包含桥接网卡创建、虚拟机配置和验证方法,照做即可完成部署。
配置前需要准备什么
整个操作需要一台安装好 KVM 的 Linux 宿主机,系统可以是 CentOS、Ubuntu 或 Debian。
宿主机必须有物理网卡(如 eth0、enp3s0),并且确认你有一个空闲的 IP 地址供虚拟机使用。
执行以下命令查看当前网卡和 IP 信息:
ip addr show
ip route show
记录物理网卡名称、当前 IP、网关和 DNS。
后面配置桥接网卡时要复用这些参数。
另外,操作前建议通过控制台或物理终端连接宿主机,避免网络断连后无法恢复。
创建桥接网卡并绑定物理网卡
不同发行版的网络配置方式不同,这里分别给出 Debian/Ubuntu(netplan)和 CentOS(ifcfg)的写法。
Ubuntu/Debian 使用 netplan 时,编辑 /etc/netplan/01-netcfg.yaml:
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: no
bridges:
br0:
interfaces: [enp3s0]
addresses: [192.168.1.100/24]
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
注意 enp3s0 换成你本机实际网卡名,IP 和网关按实际填写。
执行 sudo netplan apply 生效。
CentOS 7/8 使用 ifcfg 文件时,先给物理网卡创建备份,然后编辑 /etc/sysconfig/network-scripts/ifcfg-enp3s0:
DEVICE=enp3s0
TYPE=Ethernet
BOOTPROTO=none
NM_CONTROLLED=no
BRIDGE=br0
ONBOOT=yes
再创建 /etc/sysconfig/network-scripts/ifcfg-br0:
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DELAY=0
ONBOOT=yes
保存后执行 systemctl restart network 重启网络。
如果使用 NetworkManager,建议先停用再操作,否则桥接可能被覆盖。
创建虚拟机时指定桥接网卡
宿主机网络恢复正常后,确认桥接网卡已启用:
ip addr show br0
能看到你配置的 IP,说明桥接正常。
用 virt-manager 或 virsh 创建虚拟机时,在虚拟网络设置中选择“桥接模式”,设备名称填 br0。
命令行方式可以这样指定:
virt-install \
--network bridge=br0 \
--name vm-public \
--memory 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/vm-public.qcow2,size=20 \
--os-variant centos7.0
如果虚拟机系统内使用 DHCP,开机后会自动从上层路由器获取 IP。
若需要静态 IP,则登录虚拟机后在系统内手动配置,地址要与宿主机同一网段,且不能冲突。
验证虚拟机是否拿到公网 IP
在虚拟机内执行:
ip addr show
ip route show
确认网卡上有公网 IP,且默认网关指向物理网关。
然后从外部 ping 该 IP,若通说明桥接成功。
也可以从虚拟机向外发起 ping:
ping -c 4 223.5.5.5
如果能通,说明虚拟机已经能够直接上网,公网对虚拟机为可达状态。
高频问题与避坑提醒
物理网卡配置了 IP 导致桥接失败:桥接模式下,物理网卡不能保留自己的 IP,必须把 IP 配置到 br0 上。
如果发现 br0 无 IP 或无法上网,优先检查是否仍然给物理网卡设置了 dhcp4 或 BOOTPROTO。
网卡名不一致:有些系统使用 ens33、enp1s0,不要照抄教程里的名字,务必用 ip addr 查看实际名称。
云服务器环境:多数公有云底层不允许客户自定义桥接,即使配置成功也拿不到公网 IP,宿主机网络可能直接中断。
本地物理服务器或自建机柜环境下此方案才稳定。
防火墙干扰:虚拟机拿到公网 IP 后,如果外部访问不了,检查宿主机和虚拟机内 iptables 是否放行对应端口:
iptables -L -n
另外,如果 br0 创建后宿主机 DNS 异常,记得检查 resolv.conf 或 netplan 中的 nameserver 配置。
按以上步骤执行,KVM 虚拟机直接获取公网 IP 就能顺利落地。
实际操作时如果遇到网络断开,用控制台切回原配置即可回滚,建议先在测试环境演练一遍再对生产机操作。