KVM网络模型补充

Posted 活跃的Jerry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KVM网络模型补充相关的知识,希望对你有一定的参考价值。

隔离模型

      虚拟机网卡被分成前半段和后半段,彼此之间存在对应关系。前半段在虚拟机上通常表现为eth0、eth1等接口,后半段是物理主机上是一个虚拟接口,通常表现为vnet0、vnet1,与网桥关联(vnet0、vnet1通常称为tap设备)。任何时候guest1发往eth0的报文都发往vnet0,guest2发往eth0的报文都发往vnet1,vnet0和vnet1是网桥(虚拟交换机)上的接口,guest1和guest2通信则通过网桥才能进行通信,实现二层通信。(即相当于guest1和guest2连接至同一个网桥上)

网桥上没有关联物理网卡,所有隔离模型无法与外部网络进行通信也无法与主机自身通信。隔离模型类似于vmware中的VMnet2、VMnet3等虚拟通道。

 

仅主机模式

 

路由模型

KVM网络模型补充

 

NAT模型

KVM网络模型补充

 

桥接模型

   KVM网络模型补充

 

测试环境 

 

添加一个网桥

依赖的软件包是bridge-utils

KVM网络模型补充

依赖的模块:即在内核级别软件模拟一个软交换机,即使用bridge-utils向内核发指令,由内核创建网桥设备,网桥是在内核中实现的。

KVM网络模型补充

#brctl -h     查看帮助信息

#brctl addbr br0     添加网桥设备,命名为br0

#brctl stp br0 off    关闭stp

#ifconfig -a

KVM网络模型补充

表现为一个网络接口,使用ifconfig无法查看,原因是br0未激活。

#brctl show  查看当前主机上的所有桥设备

KVM网络模型补充

 

#ip link set dev br0 up   激活接口

注意:以上添加网桥的方式,重启后就消失了。要想永久生效,需要自定义脚本,创建kvm虚拟机时同时指定脚本路径。

KVM网络模型补充/etc/qemu-ifup

KVM网络模型补充/etc/qemu-ifdown

#chmod +x /etc/qemu-ifup

#chmod +x /etc/qemu-ifdown

 

设置隔离模型

#brctl addbr br0

#ip link set dev br0 up    激活网桥

添加第一台虚拟机至网桥

#qemu-kvm -m 128 -cpu host -smp 2 -name "test1" -drive file=/image/cirros-no_cloud-0.3.0-x86_64-disk.img,if=virtio,media=disk,format=qcow2,cache=writeba
ck -nographic -net nic -net tap,ifname=vif0.0,script=/etc/qemu-ifup

 

  添加第二台虚拟机至同一网桥

#qemu-kvm -m 128 -cpu host -smp 2 -name "test2" -drive file=/image/cirros-no_cloud-0.3.0-x86_64-disk.img,if=virtio,media=disk,format=qcow2,cache=writeba
ck -nographic -net nic,macaddr=52:54:00:12:34:57 -net tap,ifname=vif1.0,script=/etc/qemu-ifup

#ifconfig    在物理机上查看创建的tap设备(即后半段)

KVM网络模型补充

#brctl show    查看网桥关联的tap设备

KVM网络模型补充

 

虚拟机1:

#ifconfig eth0 10.0.100.1/24

虚拟机2:

ifconfig eth0 10.0.100.2/24d

 

设置路由模型

在上述隔离模式的基础上执行以下操作。

在物理机上添加一块虚拟网卡(前半段和后半段):

#ip link add veth1.0 type veth peer veth1.1

#ifconfig -a     查看生成的虚拟网卡

KVM网络模型补充

激活网卡:

#ip link set veth0 up

#ip link set veth0.1 up

将veth1:0(后半段)关联至网桥:

#brctl addif br0 veth1.0

查看网桥上关联的接口:

#brctl show

KVM网络模型补充

#ifconfig veth0 10.0.100.3/24

此时虚拟机1和虚拟机2能够与veth0虚拟接口进行通信,要实现虚拟机能够与物理机物理网卡通信,要在虚拟机上指定网关(网关为veth0):

虚拟机1:

#route add default gw 10.0.100.3

虚拟机2:

#route add default gw 10.0.100.3

此时虚拟机能够与网络主机通信,要实现虚拟机与外部网络通信,主机要开启核心转发功能:

#echo 1 > /proc/sys/net/ipv4/ip_forward

存在的问题是:无法收到回包,可以通过在外部网络中添加路由实现(这种方式不太现实),也可以通过NAT模式实现(这种方式比较理想)。

 

设置NAT模型

 添加iptables规则:

#iptables -t nat -A POSTROUTING -s 10.0.100.0/24 -o eth3 -j SNAT --to-source 192.168.1.230

#iptables -t nat -L -n

#tcpdump -i veth0 -nn icmp    抓包查看ping过程

测试发现虚拟机无法ping通外部网络,导致的原因是通信链太长,如下图:

KVM网络模型补充

 

删除虚拟网卡:

#ip link delete veth1.0 type veth

#ifconfig br0 10.0.100.3

#tcpdump -i br0 -nn icmp

 #tcpdump -i eth3 -nn icmp

 

 

设置桥接模型

#ip addr del 10.0.100.3/24 dev br0

#ip addr del 192.168.1.230 dev eth3; brctl addif br0 eth3; ip addr add 192.168.1.230 dev br0;

#brctl show  网桥上关联了一张物理网卡和两个虚拟机网卡的后半段即虚拟网卡的后半段直接关联至物理网卡

虚拟机1:

#ifconfig eth0 192.168.1.67/24 

虚拟机2:

#ifconfig eth0 192.168.1.68/24

测试:虚拟机可以直接ping通外部网络

虚拟机1:

#ping 192.168.1.230  通

#ping 192.168.1.25  通


以上是关于KVM网络模型补充的主要内容,如果未能解决你的问题,请参考以下文章

KVM虚拟化的四种简单网络模型介绍及实现

linux中的虚拟化网络模型及使用qemu-kvm创建隔离模型

虚拟化一之虚拟机网络模型简介

matlab bp神经网络 预测模型 代码(详见补充),非常感谢!

[Linux网络编程]多路IO复用Epoll Select问题补充

KVM的基础功能(网络内存cpu存储的配置)