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 包。ip tuntapip addr show dev tun0
# 创建名为 tun0 的 tun 设备sudo ip tuntap add mode tun dev tun0# 或指定用户和组(供非 root 程序使用)sudo ip tuntap add mode tun user [username] group [groupname] dev tun0
分配 IP 地址
sudo ip addr add 10.8.0.1 peer 10.8.0.2 dev tun0sudo ip addr add 192.168.100.1/24 dev tun0
激活设备
添加路由
sudo ip route add 10.8.0.0/24 dev tun0sudo ip route add default via 10.8.0.1 dev tun0
销毁 tun 设备
典型工作流示例(手动创建 VPN 隧道)
sudo ip tuntap add mode tun user vpn dev tun0sudo ip addr add 10.8.0.1 peer 10.8.0.2 dev tun0sudo ip link set tun0 upsudo ip route add 192.168.50.0/24 via 10.8.0.2sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADEsudo ip link del tun0
在使用 easytier 创建 P2P 网络的过程中会涉及到 tun 设备,以上过程会由 VPN 客户端自动完成。
还没有评论,来说两句吧...