您的位置:首页 > 理论基础 > 计算机网络

理解openstack中与虚拟机相关一些简单网络知识-1.TUN/TAP network interfaces

2017-12-27 19:10 746 查看
    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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐