返回文章列表
行业动态

什么是 tun 设备?有什么用?

比伯
2025-11-14
2小时前
什么是 tun 设备?有什么用?

tun 设备是一种虚拟网络设备,它工作在网络层(OSI 第 3 层)。tun 设备处理的是 IP 数据包。它看到的是剥离了数据链路层(如以太网帧头)的原始 IP 包。

与之相对的是 tap 设备,后者工作在数据链路层(OSI 第 2 层),处理完整的以太网帧(包含 MAC 地址)。

tun 设备可以理解为虚拟网卡,没有 MAC 地址,主要用于 VPN 程序。在 Windows 下设备表现如下:

在网络连接中可以看到对应的虚拟网卡

在 linux 下一旦创建并配置好(分配 IP 地址、设置路由)tun 设备,tun 设备就会被内核视为一个普通的网络接口。

tun 设备的主要用途就是VPN(虚拟专用网络),像 OpenVPN, WireGuard, StrongSwan (IPsec) 、easytier 等 VPN 客户端/服务器都依赖 tun 设备。

内核的防火墙规则(如 iptables/nftables)可以应用到 tun 上,在写 iptables 策略时不用单独考虑 tun 设备,可以把其当成普通网口。

tun 设备是纯软件模拟的,没有关联的物理硬件。它不处理物理层(Layer 1)和数据链路层(Layer 2)的细节(如 MAC 地址、ARP、CSMA/CD)。用户空间程序看到/操作的就是纯粹的 IP 包。

linux 下查看 tun 设备:

ip tuntap

ip addr show dev tun0


linux 下 tun 设备的管理

创建

# 创建名为 tun0 的 tun 设备

sudo ip tuntap add mode tun dev tun0


# 或指定用户和组(供非 root 程序使用)

sudo ip tuntap add mode tun user [username] group [groupname] dev tun0

分配 IP 地址

# 为 tun0 分配 IP 地址(点对点模式)

sudo ip addr add 10.8.0.1 peer 10.8.0.2 dev tun0


# 或普通单播地址

sudo ip addr add 192.168.100.1/24 dev tun0

激活设备

sudo ip link set tun0 up

添加路由

# 示例:将所有到 10.8.0.0/24 的流量路由到 tun0

sudo ip route add 10.8.0.0/24 dev tun0


# 或设置默认网关(谨慎!)

sudo ip route add default via 10.8.0.1 dev tun0

销毁 tun 设备

sudo ip link delete tun0

典型工作流示例(手动创建 VPN 隧道)

# 1. 创建设备

sudo ip tuntap add mode tun user vpn dev tun0


# 2. 配置 IP

sudo ip addr add 10.8.0.1 peer 10.8.0.2 dev tun0

sudo ip link set tun0 up


# 3. 设置路由

sudo ip route add 192.168.50.0/24 via 10.8.0.2


# 4. 配置防火墙

sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE


# 5. 用户空间程序读写 /dev/net/tun

#    (例如自定义 VPN 程序读写数据包)


# 6. 销毁

sudo ip link del tun0

在使用 easytier 创建 P2P 网络的过程中会涉及到 tun 设备,以上过程会由 VPN 客户端自动完成。

本文内容仅供参考,不构成任何专业建议。使用本文提供的信息时,请自行判断并承担相应风险。

分享文章
合作伙伴

本站所有广告均是第三方投放,详情请查询本站用户协议