Linux 网络工具详解之 ip tuntap 和 tunctl 创建 tap/tun 设备

本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,欢迎大家关注,二维码文末可以扫。

在前面一篇文章中,我们已经介绍了 tap/tun 的基本原理,本文将介绍如何使用工具 tunctlip tuntap 来创建并使用 tap/tun 设备。

tunctl

安装

首先在 centos 的环境中安装 tunctl

[root@localhost ~]# vim /etc/yum.repos.d/nux-misc.repo

[nux-misc]
name=Nux Misc
baseurl=http://li.nux.ro/download/nux/misc/el7/x86_64/
enabled=0
gpgcheck=1
gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro

ubuntuapt-get install uml-utilities

man tunctl 查看 tunctl 手册,用法如下:

Synopsis
tunctl [ OPTIONS ] [ -u owner ] [-g group] [ -t device-name ]
  • -u 参数指定用户名,表明这个接口只受该用户控制,这个接口发生的事不会影响到系统的接口。
  • -g 指定一组用户
  • -t 指定要创建的 tap/tun 设备名。

[OPTIONS] 部分:

  • -b 简单打印创建的接口名字
  • -n 创建 tun 设备
  • -p 创建 tap 设备,默认创建该设备
  • -f tun-clone-device 指定 tun 设备对应的文件名,默认是 /dev/net/tun,有些系统是 /dev/misc/net/tun
  • -d interfacename 删除指定接口

使用

常见用法:

默认创建 tap 接口:

tunctl

以上等价于 tunctl -p

为用户 user 创建一个 tap 接口:

# tunctl -u user

创建 tun 接口:

tunctl -n

为接口配置 IP 并启用:

# ifconfig tap0 192.168.0.254 up

为接口添加路由:

# route add -host 192.168.0.1 dev tap0

删除接口:

# tunctl -d tap0

ip tuntap

安装

命令行输入 ip help 查看 ip 命令是否支持 tuntap 工具,支持的话就会显示 tuntap 选项:

[root@localhost ~]# ip help
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
       ip [ -force ] -batch filename
where  OBJECT := { link | addr | addrlabel | route | rule | neigh | ntable |
                   tunnel | tuntap | maddr | mroute | mrule | monitor | xfrm |
                   netns | l2tp | tcp_metrics | token }

不支持就请升级或下载最新的 iproute2 工具包,或者使用上面介绍的 tunctl 工具。

使用

输入 ip tuntap help 查看详细使用命令:

[root@localhost ~]# ip tuntap help
Usage: ip tuntap { add | del } [ dev PHYS_DEV ]
          [ mode { tun | tap } ] [ user USER ] [ group GROUP ]
          [ one_queue ] [ pi ] [ vnet_hdr ] [ multi_queue ]

Where: USER  := { STRING | NUMBER }
       GROUP := { STRING | NUMBER }

常见用法:

创建 tap/tun 设备:

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

删除 tap/tun 设备:

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

PS: usergroup 参数和 tunctl 的 -u、 -g 参数是一样的。

以上两个工具,我们更推荐使用 ip tuntap,一个是因为 iproute2 更全更新,已经逐步在替代老旧的一些工具,另一个是因为 tunctl 在某些 Debian 类的系统上支持不全。

总结

tunctlip tuntap 的常见使用方式。

更推荐使用 ip tuntap 工具。


公众号后台回复“加群”,带你进入高手如云交流群

我的公众号 「Linux云计算网络」(id: cloud_dev) ,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,分享的内容包括但不限于 Linux、网络、云计算虚拟化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++编程技术等内容,欢迎大家关注。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 中,可以使用 golang 来创建、启动、关闭和删除 tun 虚拟网卡。下面是一个简单的代码示例: ```golang package main import ( "log" "os/exec" ) const ( // tun 设备名称 tunName = "mytun" // tun 设备 IP 地址 tunIP = "10.0.0.1/24" ) func createTun() { // 创建 tun 设备 cmd := exec.Command("ip", "tuntap", "add", tunName, "mode", "tun") if err := cmd.Run(); err != nil { log.Fatalf("Failed to create tun device: %v", err) } } func startTun() { // 设置 tun 设备 IP 地址并启动 cmd := exec.Command("ip", "addr", "add", tunIP, "dev", tunName) if err := cmd.Run(); err != nil { log.Fatalf("Failed to set tun device IP address: %v", err) } cmd = exec.Command("ip", "link", "set", tunName, "up") if err := cmd.Run(); err != nil { log.Fatalf("Failed to start tun device: %v", err) } } func stopTun() { // 停止 tun 设备 cmd := exec.Command("ip", "link", "set", tunName, "down") if err := cmd.Run(); err != nil { log.Fatalf("Failed to stop tun device: %v", err) } } func deleteTun() { // 删除 tun 设备 cmd := exec.Command("ip", "tuntap", "del", tunName, "mode", "tun") if err := cmd.Run(); err != nil { log.Fatalf("Failed to delete tun device: %v", err) } } func main() { createTun() startTun() // do something with the tun device stopTun() deleteTun() } ``` 在上面的示例中,我们首先定义了 tun 设备名称和 IP 地址。然后,我们实现了四个函数:`createTun()`、`startTun()`、`stopTun()` 和 `deleteTun()`。这些函数分别用于创建、启动、停止和删除 tun 设备。 在 `createTun()` 函数中,我们使用 `ip tuntap add` 命令来创建 tun 设备。在 `startTun()` 函数中,我们使用 `ip addr add` 命令来设置 tun 设备IP 地址,并使用 `ip link set` 命令启动 tun 设备。在 `stopTun()` 函数中,我们使用 `ip link set` 命令停止 tun 设备。在 `deleteTun()` 函数中,我们使用 `ip tuntap del` 命令删除 tun 设备。 最后,在 `main()` 函数中,我们按照创建、启动、停止、删除的顺序调用这些函数,以完成对 tun 设备的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值