理解openstack中与虚拟机相关一些简单网络知识-1.TUN/TAP network interfaces
TUN/TAP虚拟网络设备为用户空间程序提供了网络数据包的发送和接收能力。他既可以当做点对点设备(TUN),也可以当做以太网设备(TAP)。实际上,不仅Linux支持TUN/TAP虚拟网络设备,其他UNIX也是支持的,他们之间只有少许差别。 TUN/TAP虚拟网络设备的原理比较简单,他在Linux内核中添加了一个TUN/TAP虚拟网络设备的驱动程序和一个与之相关连的字符设备/dev/ne
TUN/TAP虚拟网络设备为用户空间程序提供了网络数据包的发送和接收能力。他既可以当做点对点设备(TUN),也可以当做以太网设备(TAP)。实际上,不仅Linux支持TUN/TAP虚拟网络设备,其他UNIX也是支持的,他们之间只有少许差别。
TUN/TAP虚拟网络设备的原理比较简单,他在Linux内核中添加了一个TUN/TAP虚拟网络设备的驱动程序和一个与之相关连的字符设备/dev/net/tun,字符设备tun作为用户空间和内核空间交换数据的接口。当内核将数据包发送到虚拟网络设备时,数据包被保存在设备相关的一个队列中,直到用户空间程序通过打开的字符设备tun的描述符读取时,它才会被拷贝到用户空间的缓冲区中,其效果就相当于,数据包直接发送到了用户空间。通过系统调用write发送数据包时其原理与此类似。
QEMU虚拟机网络的缺省模式是NAT方式,即虚拟机可以通过host访问外网,但host和外网无法访问虚拟机。如果要想让host访问虚拟机,则可以使用TAP方式。
它会将guestsystem的网络和host system的网络连在一起。
通过TUN/TAPadapter,会生成一个在host system上的虚拟网卡tap,而tun建立了point to point的网络设备,使得guest system的网卡和tap虚拟网卡成为一对,从而guest system的所有网络包,host system都能收到。
如图所示:
创建的过程如下
(1) 在Host机器上创建bridge br0
brctl addbr br0
(2) 将br0设为up
ip link set br0 up
(3) 创建tap device
# tunctl –b tap0
(4) 将tap0设为up
ip link set tap0 up
(5) 将tap0加入到br0上
brctl addif br0 tap0
(6) 启动虚拟机
qemu-system-x86_64-enable-kvm -name ubuntutest -m 2048 -hda ubuntu-14.04.img -boot c -vnc:19 -net nic,model=virtio -net tap,ifname=tap0,script=no,downscript=no
虚拟机连接tap0,tap0连接br0
(7) 虚拟机启动后,网卡没有配置,所以无法连接外网,先给br0设置一个ip
ifconfig br0192.168.57.1/24
(8) 在虚拟机里面,给网卡设置地址
ifconfig eth0192.168.57.2/24
这个时候在虚拟机里面可以ping的通192.168.57.1了,但是还是无法访问外网
(9) 在Host上设置NAT,并且enable ip forwarding
# sysctl -p
net.ipv4.ip_forward = 1
sudo iptables -t nat -APOSTROUTING -o eth0 -j MASQUERADE
(10) 在虚拟机里面设置默认网关
route add –net defaultgw 192.168.57.1
这个时候,可以ping的通外网网关了
ping 16.158.164.1
(11) 然后在虚拟机里面设置dns,则可以进行apt-get
# cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BEOVERWRITTEN
nameserver 16.110.135.52
nameserver 16.110.135.51
(12)所以如上所说
我们可以在openstack环境上验证该特性在虚拟机上的使用:
# 通过登录计算节点查看
# virsh dumpxml instance-00000517
<interface type='bridge'>
<mac address='fa:16:3e:5c:fd:01'/>
<source bridge='qbr7522d763-26'/>
<target dev='tap7522d763-26'/>
<model type='virtio'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
# ps -ef|grep instance-00000517
root 3421 2874 0 16:46 pts/30 00:00:00 grep --color=auto instance-00000517
qemu 31996 1 3 Dec06 ? 19:59:03 /usr/libexec/qemu-kvm -name guest=instance-00000517 -netdev tap,fd=30,id=hostnet0,vhost=on,vhostfd=39 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=fa:16:3e:5c:fd:01,bus=pci.0,addr=0x3 …
虚拟机关联的tap设备是tap7522d763-26 (tap+neutron分配的端口的前11位)
虚拟机关联的bridge是qbr7522d763-26
虚拟机网络的模式是tap方式
参考文档:
https://www.cnblogs.com/popsuper1982/p/3841838.html
http://blog.csdn.net/batmancn/article/details/50668399
更多推荐
所有评论(0)