在Linux上创建tun/tap设备

tun/tap的作用及区别
TUN 设备是一种虚拟网络设备,通过此设备,程序可以方便地模拟网络行为。TUN 模拟的是一个三层设备,通过它可以处理来自网络层的数据,更通俗一点的说,通过它,我们可以处理 IP 数据包。
TAP 设备是一个二层设备,它比 TUN 更加深入,通过 /dev/tapX 文件可以收发 MAC 层数据包,即数据链路层,拥有 MAC 层功能,可以与物理网卡做 bridge,支持 MAC 层广播。
TAP 设备与 TUN 设备工作方式完全相同,区别在于:
(1)TUN 设备是一个三层设备,它只模拟到了 IP 层,即网络层 我们可以通过 /dev/tunX 文件收发 IP 层数据包,它无法与物理网卡做 bridge,但是可以通过三层交换(如 ip_forward)与物理网卡连通。可以使用ifconfig之类的命令给该设备设定 IP 地址。
(2)同样的,我们也可以通过ifconfig之类的命令给TAP设备设定 IP 地址,你如果愿意,我们可以给它设定 MAC 地址。

# ip tuntap help
Usage: ip tuntap { add | del | show | list | lst | help } [ dev PHYS_DEV ]
          [ mode { tun | tap } ] [ user USER ] [ group GROUP ]
          [ one_queue ] [ pi ] [ vnet_hdr ] [ multi_queue ] [ name NAME ]
Where: USER  := { STRING | NUMBER }
       GROUP := { STRING | NUMBER }

1、创建tun/tap设备

ip tuntap add dev tap0 mod tap # 创建 tap 
ip tuntap add dev tun0 mod tun # 创建 tun

2、删除tun/tap设备

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

注:user 和 group 参数与 tunctl 的 -u、 -g 参数是一样的。
以上两个工具,更推荐使用 ip tuntap,一个是因为 iproute2 更全更新,已经逐步在替代老旧的一些工具;另一个是因为 tunctl 在某些Debian 类的系统上支持不全。

tun/tap的编程例子:
参考:https://blog.csdn.net/hbcbgcx/article/details/89227781

你可能感兴趣的:(LINUX)