(可选)配置虚拟机网络
虚拟机安装完成后,为了可以从局域网的其他PC访问到KVM虚拟机上的服务,一种可行的方法是将KVM虚拟机(GUEST)以桥接方式与宿主机(HOST)连接,使虚拟机可以获得局域网中一个独立的IP地址。
如果没有从局域网的其他PC访问KVM虚拟机的需求,则无需进行网络配置。
配置网桥
- 查看网络。
ip a
本示例目标是将KVM虚拟机桥接到enp3s0所在网段(192.168.224.XXX,子网掩码是255.255.255.0)。
- 查看网桥,确认没有网桥br0。
1
brctl show
- 停止NetworkManager服务,防止后面修改的配置被意外生效。
1
systemctl stop NetworkManager
- 创建网桥br0。
- 打开文件ifcfg-br0。
1
vi /etc/sysconfig/network-scripts/ifcfg-br0
- 按“i”进入编辑模式,添加如下内容:
DEVICE=br0 ONBOOT=yes TYPE=Bridge NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.224.2 NETMASK=255.255.255.0 GATEWAY=192.168.224.1 STP=on DELAY=0.0
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 示例中的IPADDR和GATEWAY按实际情况修改。
- 如果使用如下操作创建网桥,在宿主机重启后会失效,示例中的IP地址请按实际情况修改。
brctl addbr br0 brctl addif br0 enp5s0 ifconfig br0 192.168.224.2/24 service network restart brctl show ip a
- 打开文件ifcfg-br0。
- 修改文件ifcfg-enp3s0,使enp3s0网口连接br0网桥。
- 备份文件ifcfg-enp3s0。
mv /etc/sysconfig/network-scripts/ifcfg-enp3s0 /home/
- 打开文件ifcfg-enp3s0。
1
vi /etc/sysconfig/network-scripts/ifcfg-enp3s0
- 按“i”进入编辑模式,添加如下内容。
HWADDR=a8:49:4d:f6:84:dc DEVICE=enp3s0 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BRIDGE=br0
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
查看enp3s0的HWADDR值,回显中ether后面的mac地址值就是HWADDR值。
ip a
- 备份文件ifcfg-enp3s0。
- 使ifcfg-br0和ifcfg-enp3s0生效。
- CentOS系统
1
systemctl restart network
- openEuler系统
1
systemctl restart NetworkManager
重启网络服务后,若配置仍未生效,一方面需要检查以上操作配置是否正确,另一方面可尝试重启宿主机然后再重启网络服务。
- CentOS系统
- 查看网络。
1
ip a
- 查看网桥。
1
brctl show
br0的interfaces下出现了enp3s0,则网桥配置成功。
配置虚拟机
- 修改虚拟机配置。
- 打开虚拟机配置文件。
1
vi /etc/libvirt/qemu/vm1.xml
或
1
virsh edit vm1
- 在<devices>标签下找到<interface>标签,将br1修改为br0。
若不存在<interface>标签,则直接在<devices>标签下添加如下内容:
<interface type='bridge'> <mac address='52:54:00:7a:95:48'/> <source bridge='br1'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </interface>
- <interface type='bridge'>表示虚拟机将使用桥接模式。
- <mac address='52:54:00:7a:95:48'/>中的MAC地址在安装虚拟机后自动生成,将被用作虚拟机网卡eth0的MAC地址,通常情况不需要修改,若修改需要确认不能和网桥br0的MAC地址相同。
- <source bridge='br0'/>表示将与宿主机中的br0网桥连接。
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 打开虚拟机配置文件。
- 使虚拟机配置生效。
1
systemctl restart libvirtd
- 关闭虚拟机。
- 查看虚拟机状态。
1
virsh list --all
- 关闭虚拟机。
1
virsh shutdown vm1
- 确认虚拟机是否已关闭。
1
virsh list --all
- 查看虚拟机状态。
- 启动虚拟机。
virsh start vm1 virsh list --all
- 查看网桥。
1
brctl show
若br0的interfaces下出现“vnet0”,则表示虚拟机vm1成功连接网桥,只有vm1.xml配置生效且vm1启动成功,vnet0才存在。
- 登录虚拟机。
1 2
virsh list --all virsh console vm1 --force
- 配置网卡。
- 查看网络。
ip a
- 修改网卡配置。
- CentOS系统
- 编辑ifcfg-eth0文件。
1
vi /etc/sysconfig/network-scripts/ifcfg-eth0
- 按“i”进入编辑模式,修改如下内容。
只需要修改少许部分,IPADDR配置为与宿主机同网段的未被使用的IP地址,请按实际情况填写。
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=eth0 UUID=aca69508-f4c7-4ff2-9cc5-668ac45e429e DEVICE=eth0 ONBOOT=yes IPADDR=192.168.224.3 NETMASK=255.255.255.0 GATEWAY=192.168.224.1
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 编辑ifcfg-eth0文件。
- openEuler系统
- 打开ifcfg-enp1s0文件。
1
vi /etc/sysconfig/network-scripts/ifcfg-enp1s0
- 按“i”进入编辑模式,修改如下内容。
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=enp1s0 UUID=dedf1652-5eff-3fb4-be23-c658b834774f DEVICE=enp1s0 ONBOOT=yes AUTOCONNECT_PRIORITY=-999 IPADDR=192.168.224.13 NETMASK=255.255.255.0 GATEWAY=192.168.224.1
IPADDR配置为与宿主机同网段的未被使用的IP地址,请按实际情况填写。
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 打开ifcfg-enp1s0文件。
- CentOS系统
- 查看网络。
- 生效网卡。
- CentOS系统
systemctl restart network ip a
- openEuler系统
systemctl restart NetworkManager ifdown enp1s0 ifup enp1s0 ip a
- CentOS系统
验证网络
- 验证网桥是否配置完成,分别在虚拟机与宿主机、虚拟机与局域网内其他主机、宿主机与局域网内其他主机进行互ping。
- 定位问题。
- 在宿主机对网桥br0抓包。
yum -y install tcpdump tcpdump -i br0
- 根据抓包信息进行问题定位并修复。
- 在宿主机对网桥br0抓包。
- 再次执行1。
- 禁用网络过滤器。
- 编辑“sysctl.conf”文件。
1
vim /etc/sysctl.conf
- 按“i”进入编辑模式,在文件中添加如下配置。
net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 重新加载kernel参数使配置生效。
1
sysctl -p
- 编辑“sysctl.conf”文件。
- 再次执行1。
父主题: 安装