tun_tap学习(一)

Posted by 婷 on October 15, 2023 本文总阅读量

前言

在网上看了一些关于虚拟网络技术的文章,觉得比较有兴趣,在看tun/tap虚拟网卡的时候,钻研了很久,还是看不是很懂,主要也是没有实际应用去理解。这里先记录下自己使用过程中的一些记录。下面的操作都是在qemu中操作的。

内核打开tun/tap配置

打开图中红框选项,我选择编译成ko

image-20231001180142829

一开始加载的时候会报错误tun: module verification failed: signature and/or required key missing - tainting kernel

image-20231002172505487

报错解决方法则是配置为CONFIG_MODULE_SIG = n

image-20231002172644706

加载成功

image-20231002173425455

ip命令配置tun/tap网卡

如果直接通过ifconfig -a或者ip link是不会显示tun0/tap0,且使用ifconfig方法去设置tun/tap的网卡也是没有用的。

想要让虚拟网卡工作,要么代码里面去配置(下次介绍),要么用ip命令去设置。

image-20231002173905300

先查询下ip命令是否支持tun/tap

image-20231002195420461

接着创建 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 状态。

image-20231002195620429

激活虚拟网卡

ip link set tun0 up
ip link set tap0 up #tap默认是up,不过ip还需要自己配置下

image-20231002195724008

tun0网卡分配IP

ip addr add 10.0.0.1/24 dev tun0

image-20231002195847875

ip命令删除tun/tap网卡

删除 tap/tun 设备:

ip tuntap del dev tap0 mod tap # 删除 tap
ip tuntap del dev tun0 mod tun 

image-20231002200037344

说明

ifconfig -a的时候会看到有一个tunl0网卡,这个是内核的IPIP模块提供的,好像是跟IP隧道有关的。

image-20231015231711035

lo网卡

刚把tun0网卡的ip配置起来后,ip10.0.0.1,一开始比较懵逼去ping 10.0.0.1,通了,还在思考为什么这个tun0网卡可以自发自收的。。。

image-20231002195924451

再加上这个destination 10.0.0.1搞得我非常迷惑

image-20231015223448695

后面自己抓tun0的包,结果并没有,才反应过来走的是lo网卡。比如你去ping你本机的ip全都是走的lo网卡,而不是你自己的enp0s1tap0tun0。而且这种自发自收的包,是不会在你的enp0s1tap0tun0计数的。

image-20231015230902868

destination 10.0.0.1到底是什么意思呢?这个指的是点对点链接另一端的远程主机的地址。从网上链接找到了一个关于tun0网卡的解释。

image-20231015231318779

参考链接