TUN/TAP 创建连接到用户空间文件描述符的虚拟网络接口。 TUN 设备承载第 3 层 IP 数据包;TAP 设备承载第 2 层以太网帧。 VPN、数据包分析器、用户空间网络协议栈和虚拟机都会使用它们。
创建接口 #
以读写方式打开 /dev/net/tun,并使用 ifreq 发出 TUNSETIFF。
设置 IFF_TUN 或 IFF_TAP;如果程序只应接收数据包或帧,则添加 IFF_NO_PI。
不使用 IFF_NO_PI 时,每次读取都会以一个四字节的数据包信息头开始,其中包含标志和协议。
内核创建网络接口后,可以使用 ip link、ip address 和 ip route 配置其管理状态、
地址和路由。
在不会自动创建设备节点的系统上,该节点是主设备号为 10、次设备号为 200 的字符设备。 必须谨慎控制访问权限:创建接口或将其附加到网络命名空间需要适当的权限。 关闭最后一个文件描述符会移除非持久化的 TUN/TAP 接口,除非该接口配置为持久存在。
数据包方向 #
程序写入的数据包会被内核接收,就像它们到达了虚拟接口一样。
内核通过该接口发送的数据包会由 read(2) 返回给程序。
ip tuntap add dev tun0 mode tun 或 mode tap 可以在不编写自定义 C 程序的情况下完成基本创建。
评论
在 GitHub 上阅读或评论(发表评论需要登录)