前言
在网上看了一些关于虚拟网络技术的文章,觉得比较有兴趣,在看tun/tap
虚拟网卡的时候,钻研了很久,还是看不是很懂,主要也是没有实际应用去理解。这里先记录下自己使用过程中的一些记录。下面的操作都是在qemu
中操作的。
内核打开tun/tap配置
打开图中红框选项,我选择编译成ko
一开始加载的时候会报错误tun: module verification failed: signature and/or required key missing - tainting kernel
报错解决方法则是配置为CONFIG_MODULE_SIG = n
加载成功
ip命令配置tun/tap网卡
如果直接通过ifconfig -a
或者ip link
是不会显示tun0/tap0
,且使用ifconfig
方法去设置tun/tap
的网卡也是没有用的。
想要让虚拟网卡工作,要么代码里面去配置(下次介绍),要么用ip
命令去设置。
先查询下ip
命令是否支持tun/tap
接着创建 tap/tun
设备
ip tuntap add dev tap0 mod tap # 创建 tap
ip tuntap add dev tun0 mod tun # 创建 tun
ip link # 查询
tap
等同于一个以太网设备,它操作第二层数据包如以太网数据帧。默认是UP
状态。
tun
是点对点的,操作第三层数据包比如IP
数据封包,不需要mac
地址,它的MAC
地址全是 0
。图中也可以看到tun
标志着POINTTOPOINT,NOARP
。默认是 DOWN
状态。
激活虚拟网卡
ip link set tun0 up
ip link set tap0 up #tap默认是up,不过ip还需要自己配置下
给tun0
网卡分配IP
ip addr add 10.0.0.1/24 dev tun0
ip命令删除tun/tap网卡
删除 tap/tun
设备:
ip tuntap del dev tap0 mod tap # 删除 tap
ip tuntap del dev tun0 mod tun
说明
在ifconfig -a
的时候会看到有一个tunl0
网卡,这个是内核的IPIP
模块提供的,好像是跟IP
隧道有关的。
lo网卡
刚把tun0
网卡的ip
配置起来后,ip
是 10.0.0.1
,一开始比较懵逼去ping 10.0.0.1
,通了,还在思考为什么这个tun0
网卡可以自发自收的。。。
再加上这个destination 10.0.0.1
搞得我非常迷惑
后面自己抓tun0
的包,结果并没有,才反应过来走的是lo
网卡。比如你去ping
你本机的ip
全都是走的lo
网卡,而不是你自己的enp0s1
,tap0
,tun0
。而且这种自发自收的包,是不会在你的enp0s1
,tap0
,tun0
计数的。
destination 10.0.0.1
到底是什么意思呢?这个指的是点对点链接另一端的远程主机的地址。从网上链接找到了一个关于tun0
网卡的解释。