KVM虚拟机桥接网络,虚拟机获取独立公网IP
KVM虚拟机默认使用NAT网络,虚拟机只能通过宿主机上网,外部无法直接访问。
如果你需要让虚拟机拥有独立公网IP,比如搭建对外服务或模拟真实服务器环境,桥接网络是常用方案。
本文从零开始,教你配置KVM桥接网络,让虚拟机直接获取公网IP。
准备工作:检查宿主机网络与权限
在操作前,确认宿主机满足以下条件:
- 宿主机有一块物理网卡(如
eth0或eno1),且已连接网络,能正常上网。 - 拥有宿主机
root权限或可执行sudo。 - 已安装
bridge-utils工具,用于管理网桥。若未安装,执行:
# CentOS/RHEL
sudo yum install bridge-utils -y
# Ubuntu/Debian
sudo apt install bridge-utils -y
- 确认宿主机网络配置方式:如果是
NetworkManager管理,建议改用network-scripts或systemd-networkd以避免冲突。本文以network-scripts为例。
重要: 修改网络配置可能导致宿主机断网,建议在本地控制台或带外管理下操作,不要仅依赖SSH。
创建网桥并绑定物理网卡
桥接网络的核心是创建一个虚拟网桥,将物理网卡“桥接”进去,虚拟机再连接到网桥,从而与物理网络互通。
- 备份当前网络配置:
sudo cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0.bak
- 修改物理网卡配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0,将其设为网桥的从属接口:
DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
BRIDGE=br0
- 创建网桥配置文件
/etc/sysconfig/network-scripts/ifcfg-br0,内容如下(根据你的公网IP信息填写):
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
ONBOOT=yes
IPADDR=你的公网IP
NETMASK=你的子网掩码
GATEWAY=你的网关
DNS1=8.8.8.8
- 重启网络服务使配置生效:
sudo systemctl restart network
验证: 执行 ip addr show br0,应看到网桥已启动并绑定了IP;brctl show 应显示 eth0 已加入 br0。
调整虚拟机网络设置
虚拟机需要连接到网桥,而不是默认的虚拟网络。
根据虚拟机是否已创建,有两种方式:
新建虚拟机时: 在 virt-install 命令中指定 --network bridge=br0。
已有虚拟机: 编辑虚拟机XML配置文件。
- 查看虚拟机名称:
sudo virsh list --all
- 编辑XML(将
vm-name替换为你的虚拟机名称):
sudo virsh edit vm-name
- 找到
部分,修改为:
保存退出后,重启虚拟机:
sudo virsh destroy vm-name
sudo virsh start vm-name
避坑指南:常见问题与解决
- 宿主机断网: 如果修改后宿主机无法上网,检查网桥配置文件是否写错IP、网关或DNS。可通过
ip route查看默认路由是否正确指向网关。 - 虚拟机无法获取IP: 确保虚拟机内部网卡配置为DHCP或手动设置了与宿主机同网段的公网IP。如果使用DHCP,需网络中有DHCP服务器。
- 网桥未生效: 某些系统需关闭NetworkManager,改用network服务:
systemctl stop NetworkManager && systemctl disable NetworkManager。 - 防火墙或SELinux: 临时关闭测试:
systemctl stop firewalld和setenforce 0,若问题解决再逐步放行规则。
验证虚拟机公网连通性
在虚拟机内执行:
ip addr show
ping -c 4 8.8.8.8
curl ifconfig.me
若 ping 通且 curl 返回公网IP,说明桥接成功。
从外部网络尝试SSH连接虚拟机IP,能登录即表示独立公网IP生效。
注意: 如果公网IP由云服务商分配,需确保网卡MAC地址与IP绑定关系正确,必要时在控制台更新。
常见疑问
Q:桥接后宿主机和虚拟机能否互相访问?
可以,它们在同一网桥下,如同连接同一交换机,可互相通信。
Q:一个网桥可以连接多台虚拟机吗?
可以,多台虚拟机连接到同一网桥,各自获取独立IP,互不干扰。
Q:无线网卡能否做桥接?
通常不支持,无线驱动限制较多,建议使用有线网卡。
按照以上步骤操作,你应该能让KVM虚拟机获得独立公网IP。
如果遇到问题,优先检查网桥状态和防火墙规则,多数故障可快速定位。