其中virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接口,也是一个switch和bridge,负责把内容分发到各虚拟机。几个虚拟机管理模块产生的接口关系如下图:
┌───────────────────────┐ │ HOST │ │ ┌──────┐ │ ┌─────────────────┐ │ │ br0 │─┬──────┐ │ │Virtual Machine 1│ │ └──────┘ │ │ │ │ ┌──────┐ │ │ │ │ ┌───────┐ │ ─ │ │ br0 │ │ │ │ │ │ vnet0 │─│┘ │ └──────┘ │ │ ┌──────┐ │ └───────┘ │ └─────────────────┘ │ │virbr0│ │ ┌───────┐ │ ┌─────────────────┐ │ │ -nic │ └──│ vnet1 │─│┐ │Virtual Machine 2│ │ └──────┘ └───────┘ │ │ │ │ ┌──────┐ │└ ─│ ┌──────┐ │ │ │ eno0 │ │ │ │ br0 │ │ │ └──────┘ │ │ └──────┘ │ │ ┌──────┐ │ └─────────────────┘ │ │ eno1 │ │ │ └──────┘ │ └───────────────────────┘从图上可以看出,虚拟接口和物理接口之间没有连接关系,所以虚拟机只能在通过虚拟的网络访问外部世界,无法从网络上定位和访问虚拟主机。virbr0是一个桥接器,接收所有到网络192.168.122.*的内容。从下面命令可以验证:
brctl show # 输出结果 # --------------------- # bridge name bridge id STP enabled interfaces # br0 8000.3863bb44cf6c no eno1 # vnet0 # virbr0 8000.525400193f0f yes virbr0-nic ip route # default via 192.168.188.1 dev br0 # 169.254.0.0/16 dev br0 scope link metric 1012 # 192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 # 192.168.188.0/24 dev br0 proto kernel scope link src 192.168.188.132同时,虚拟机支持模块会修改iptables规则,通过命令可以查看:
iptables -t nat -L -nv iptables -t filter -L -nv如果没有default的话,或者需要扩展自己的虚拟网络,可以使用命令重新安装NAT。
virsh net-define /usr/share/libvirt/networks/default.xml此命令定义一个虚拟网络,default.xml的内容:
<network> <name>default</name> <bridge /> <forward/> <ip address="192.168.122.1" netmask="255.255.255.0"> <dhcp> <range start="192.168.122.2" end="192.168.122.254" /> </dhcp> </ip> </network>也可以修改xml,创建自己的虚拟网络。
重新加载和激活配置:
virsh net-define /etc/libvirt/qemu/networks/default.xml标记为自动启动:
virsh net-autostart default # Network default marked as autostarted virsh net-start default启动网络
virsh net-start default # Network default started网络启动后可以用命令brctl show 查看和验证。
修改vi /etc/sysctl.conf中参数,允许ip转发,CentOS7是在vi /usr/lib/sysctl.d/00-system.conf 这里面修改
net.ipv4.ip_forward=1通过 sysctl -p 查看修改结果
自定义NAT网络创建名为management的NAT网络,vi /usr/share/libvirt/networks/management.xml
<network> <name>management</name> <bridge/> <forward/> <ip address="192.168.123.1" netmask="255.255.255.0"> <dhcp> <range start="192.168.123.2" end="192.168.123.254"/> </dhcp> </ip> </network>启用新建的NAT网络
virsh net-define /usr/share/libvirt/networks/management.xml virsh net-start management virsh net-autostart management