设为首页 收藏本站
查看: 1192|回复: 0

[经验分享] linux网络虚拟化

[复制链接]

尚未签到

发表于 2017-6-24 18:09:55 | 显示全部楼层 |阅读模式
图解几个与Linux网络虚拟化相关的虚拟网卡-VETH/MACVLAN/MACVTAP/IPVLAN
  http://smilejay.com/2012/08/qemu-kvm-networking-mode/
  http://smilejay.com/kvm_theory_practice/
  http://smilejay.com/2012/08/kvm-sdl-display/
http://smilejay.com/kvm-principles-and-practices/
http://smilejay.com/2013/12/qemu-kvm-install-guest-in-text-mode/
http://www.diyoms.com/cloud/836.html
http://www.diyoms.com/cloud/827.html
  在安装系统时就把桥做好,然后装完进入系统后
systemctl disable NetworkManager
systemctl disable wpa_supplicant
systemctl disable irqbalance
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
reboot
重启后桥丢失,通过systemctl status network发现报错提示没有brctl这个命令
因为默认没有安装bridge-utils这个包,那么由NetworkManager来管理维护桥,这时候NetworkManager又被禁用了,所以不能启动网络
结论就是如果不安装bridge-utils这个包,那么就不应禁用NetworkManager
  ip addr add 192.168.0.193/24 dev wlan0
ip addr del 192.168.0.193/24 dev wlan0
在我们安装好虚拟化组件(RHEL6.0之后,系统自带的均是KVM,已经没有XEN虚拟化的支持了),会自动生成一个virbr0这样的桥接设备
[iyunv@clovemzone ~]# brctl  show
bridge name    bridge id        STP enabled    interfaces
virbr0      8000.5254007543ce    yes          virbr0-nic
按照这篇文中所说:http://www.iyunv.com/Linux/2013-08/88720.htm ,virbr0默认使用的是NAT方式跟虚拟机网卡进行通讯,在实际生产环境中我们多数情况下面使用桥接Bridge的方式进行物理机跟虚拟机的通讯,删除这个virbr0的方法在上面给出的链接中已经说明,这篇文章主要讲述Bridge的简单实现原理以及实际配置方法。
安装 Xen 或安装 KVM 后都会发现网络接口里多了一个叫做 virbr0 的虚拟网络接口:        
这是由于安装和启用了 libvirt 服务后生成的,libvirt 在服务器(host)上生成一个 virtual network switch (virbr0),host 上所有的虚拟机(guests)通过这个 virbr0 连起来。默认情况下 virbr0 使用的是 NAT 模式(采用 IP Masquerade),所以这种情况下 guest 通过 host 才能访问外部。
大多数时候我们虚拟机使用的是 bridge(网桥)直接连到局域网里,所以这个 virbr0 不是必须的(注:不要搞混淆了,bridge 和这里的 virbr0 bridge 是互不相干的)。如何关掉这个 virbr0 呢?先 net-destroy 然后 net-undefine,最后别忘了重启 libvirtd 让设置生效:
# virsh net-list
Name                State      Autostart
-----------------------------------------
default              active    yes
# virsh net-destroy default
Network default destroyed
# virsh net-undefine default
Network default has been undefined
# service libvirtd restart
Stopping libvirtd daemon:                                  [  OK  ]
Starting libvirtd daemon:                                  [  OK  ]        
  NM_CONTROLLED这个属性值,根据redhat公司的文档是必须设置为“no”的(这个值为“yes”表示可以由服务NetworkManager来管理。NetworkManager服务不支持桥接,所以要设置为“no”。),但实际上发现设置为“yes”没有问题。通讯正常。
编辑修改虚拟机配置文件 /etc/libvirt/qemu/v1.xml,增加如下内容
    <interface type='bridge'>
      <mac address='52:54:00:da:c3:dc'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
  今天在VMWare WorkStation9中安装了CentOS7虚拟机。虚拟机与宿主机网络连接有三种方式:桥接模式、NAT模式和Host Only模式。
KVM虚拟机网络配置的两种方式:NAT方式和Bridge方式。Bridge方式的配置原理和步骤。Bridge方式适用于服务器主机的虚拟化。        

  KVM 客户机网络连接有两种方式:
    用户网络(User Networking):让虚拟机访问主机、互联网或本地网络上的资源的简单方法,但是不能从网络或其他的客户机访问客户机,性能上也需要大的调整。NAT方式。
    虚拟网桥(Virtual Bridge):这种方式要比用户网络复杂一些,但是设置好后客户机与互联网,客户机与主机之间的通信都很容易。Bridge方式。
   
DSC0000.png


Linux 抽象网络设备简介
  和磁盘设备类似,Linux 用户想要使用网络功能,不能通过直接操作硬件完成,而需要直接或间接的操作一个 Linux 为我们抽象出来的设备,既通用的 Linux 网络设备来完成。一个常见的情况是,系统里装有一个硬件网卡,Linux 会在系统里为其生成一个网络设备实例,如 eth0,用户需要对 eth0 发出命令以配置或使用它了。更多的硬件会带来更多的设备实例,虚拟的硬件也会带来更多的设备实例。随着网络技术,虚拟化技术的发展,更多的高级网络设备被加入了到了 Linux 中,使得情况变得更加复杂。在以下章节中,将一一分析在虚拟化技术中经常使用的几种 Linux 网络设备抽象类型:Bridge、802.1.q VLAN device、VETH、TAP,详细解释如何用它们配合 Linux 中的 Route table、IP table 简单的创建出本地虚拟网络。
  如果已安装 VLAN 内核模块和管理工具 vconfig,TAP/TUN 设备管理工具 tunctl
[iyunv@localhost ~]# modprobe -l|grep vlan
kernel/drivers/net/macvlan.ko
kernel/net/bridge/netfilter/ebt_vlan.ko
[iyunv@1st-kvm ~]# lsmod |grep vlan
[iyunv@1st-kvm ~]# modprobe ebt_vlan
[iyunv@1st-kvm ~]# lsmod |grep vlan
ebt_vlan               12911  0

The vconfig program configures and adjusts 802.1q VLAN parameters.
This tool is deprecated in favor of "ip link" command.
这个工具已经降级,取而代之的是ip link命令

    查询 VLAN 设备情况:cat /proc/net/vlan/[VLAN DEVICE NAME]
    创建 VETH 设备:ip link add link [DEVICE NAME] type veth
    创建 TAP 设备:tunctl -p [TAP DEVICE NAME]
    删除 TAP 设备:tunctl -d [TAP DEVICE NAME]
    查询系统里所有二层设备,包括 VETH/TAP 设备:ip link show
    删除普通二层设备:ip link delete [DEVICE NAME] type [TYPE]




tap参数,表明使用TAP设备。TAP是虚拟网络设备,它仿真了一个数据链路层设备(ISO七层网络结构的第二层),它像以太网的数据帧一样处理第二层数据报。
而TUN与TAP类似,也是一种虚拟网络设备,它是对网络层设备的仿真。TAP被用于创建一个网络桥,而TUN与路由相关。

同时启动两个虚拟机
295  /usr/libexec/qemu-kvm -boot dc -hda disk/cs65-2.qcow2 -m 1024 -vnc :1 -net bridge -net nic -daemonize
296  /usr/libexec/qemu-kvm -boot dc -hda disk/cs65.qcow2 -m 1024 -vnc :2 -net bridge -net nic -daemonize
生成两个tap虚拟设备
13: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN qlen 500
link/ether fe:4e:d4:29:d1:ea brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc4e:d4ff:fe29:d1ea/64 scope link
valid_lft forever preferred_lft forever
14: tap1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN qlen 500
link/ether fe:7c:80:c8:9a:f9 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc7c:80ff:fec8:9af9/64 scope link
valid_lft forever preferred_lft forever
但是这两个虚拟机的网卡ip与mac是一样的
[iyunv@2nd-kvm net]# pwd
/sys/devices/virtual/net
[iyunv@2nd-kvm net]# ll
total 0
drwxr-xr-x 7 root root 0 8月   3 16:42 br0
drwxr-xr-x 5 root root 0 8月   3 16:20 lo
drwxr-xr-x 6 root root 0 8月   3 17:51 tap0
drwxr-xr-x 6 root root 0 8月   3 17:51 tap1
drwxr-xr-x 7 root root 0 8月   3 16:20 virbr0
drwxr-xr-x 6 root root 0 8月   3 16:20 virbr0-nic
[iyunv@2nd-kvm net]# ll /dev/net
total 0
crw-rw-rw- 1 root root 10, 200 8月   3 16:20 tun

如果是2块物理网卡冗余, 采用这样的方式,eth0 和 eth1 绑定成 bond0,br0 再绑定 bond0,客户机tap加入br0。可行吗?
可以的啊,我就这样用过的,先建立bond0,再用它建立br0。宿主机双网卡,可以考虑3个用途:1. 就是你自己说的那样;2. 独立建立两个bridge,给不同的客户机用;3.可以将一个网卡VT-d直接分配给对网络要求很高的虚拟机,另一个建立br0做普通用途。
大多数时候我们虚拟机使用的是 bridge(网桥)直接连到局域网里,所以这个 virbr0 不是必须的(注:不要搞混淆了,bridge 和这里的 virbr0 bridge 是互不相干的)。如何关掉这个 virbr0 呢?先 net-destroy 然后 net-undefine,最后别忘了重启 libvirtd 让设置生效:
# virsh net-list
Name                State      Autostart
-----------------------------------------
default              active    yes
# virsh net-destroy default
Network default destroyed
# virsh net-undefine default
Network default has been undefined
# service libvirtd restart
Stopping libvirtd daemon:                                  [  OK  ]
Starting libvirtd daemon:                                  [  OK  ]

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-387610-1-1.html 上篇帖子: CS基本网络中Agent使用双网卡进行流量划分 下篇帖子: 虚拟化代码博客
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表