本文首發於我的公眾號 Linux雲計算網絡(id: cloud_dev),專注於干貨分享,號內有 10T 書籍和視頻資源,后台回復「1024」即可領取,歡迎大家關注,二維碼文末可以掃。
在前面一篇文章中,我們已經介紹了 tap/tun 的基本原理,本文將介紹如何使用工具 tunctl
和 ip 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
ubuntu
是 apt-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: user
和 group
參數和 tunctl
的 -u、 -g 參數是一樣的。
以上兩個工具,我們更推薦使用 ip tuntap
,一個是因為 iproute2
更全更新,已經逐步在替代老舊的一些工具,另一個是因為 tunctl
在某些 Debian
類的系統上支持不全。
總結
tunctl
和 ip tuntap
的常見使用方式。
更推薦使用 ip tuntap
工具。
我的公眾號 「Linux雲計算網絡」(id: cloud_dev) ,號內有 10T 書籍和視頻資源,后台回復 「1024」 即可領取,分享的內容包括但不限於 Linux、網絡、雲計算虛擬化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++編程技術等內容,歡迎大家關注。