# Linux中TUN/TAP虛擬接口怎么用
## 1. TUN/TAP概述
TUN和TAP是Linux內核提供的虛擬網絡設備,用于實現用戶空間程序與內核網絡棧的交互:
- **TUN設備**:工作在網絡層(L3),處理IP數據包
- **TAP設備**:工作在數據鏈路層(L2),處理以太網幀
典型應用場景包括:
- VPN實現(如OpenVPN)
- 虛擬機網絡連接
- 網絡協議棧測試
- 自定義隧道協議
## 2. 創建TUN/TAP設備
### 2.1 使用ip命令創建
```bash
# 創建TUN設備
sudo ip tuntap add dev tun0 mode tun
# 創建TAP設備
sudo ip tuntap add dev tap0 mode tap
# 查看創建的設備
ip link show
sudo tunctl -t tap0 -u $(whoami)
在/etc/network/interfaces
中添加(Debian系):
auto tap0
iface tap0 inet manual
pre-up ip tuntap add dev tap0 mode tap user root
up ip link set dev tap0 up
down ip link del dev tap0
# 啟用設備
sudo ip link set dev tun0 up
# 分配IP地址
sudo ip addr add 10.0.0.1/24 dev tun0
# 添加路由
sudo ip route add 10.0.0.0/24 via 10.0.0.1
以下是一個簡單的C程序,演示如何從TUN設備讀取數據:
#include <linux/if_tun.h>
#include <fcntl.h>
#include <sys/ioctl.h>
int tun_alloc(char *dev) {
struct ifreq ifr;
int fd, err;
if ((fd = open("/dev/net/tun", O_RDWR)) < 0)
return -1;
memset(&ifr, 0, sizeof(ifr));
ifr.ifr_flags = IFF_TUN | IFF_NO_PI;
strncpy(ifr.ifr_name, dev, IFNAMSIZ);
if ((err = ioctl(fd, TUNSETIFF, (void *)&ifr)) < 0) {
close(fd);
return err;
}
return fd;
}
# 創建網橋
sudo ip link add name br0 type bridge
# 添加物理接口和TAP設備
sudo ip link set eth0 master br0
sudo ip link set tap0 master br0
# 啟用網橋
sudo ip link set dev br0 up
sudo ip tuntap add dev tun0 mode tun
sudo ip addr add 10.8.0.1/24 dev tun0
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo ip tuntap add dev tun0 mode tun
sudo ip addr add 10.8.0.2/24 dev tun0
sudo ip route add default via 10.8.0.1
<!-- libvirt虛擬機配置片段 -->
<interface type='bridge'>
<mac address='52:54:00:4a:5f:3a'/>
<source bridge='br0'/>
<target dev='vnet0'/>
<model type='virtio'/>
</interface>
sudo ip tuntap add dev tap0 mode tap multi_queue
sudo ip link set dev tap0 mtu 1400
# 限制帶寬為1Mbps
sudo tc qdisc add dev tap0 root tbf rate 1mbit burst 32kbit latency 400ms
確保用戶有訪問權限:
sudo chown user:group /dev/net/tun
或使用:
sudo ip tuntap add dev tap0 mode tap user $(whoami)
檢查內核模塊是否加載:
lsmod | grep tun
modprobe tun
TUN/TAP設備為Linux網絡提供了強大的擴展能力,從簡單的網絡測試到復雜的VPN實現都能勝任。掌握其使用方法可以極大擴展網絡編程的靈活性。實際使用時建議結合具體場景選擇合適的模式(TUN或TAP),并注意性能優化和安全配置。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。