tun/tap的作用及区别
TUN 设备是一种虚拟网络设备,通过此设备,程序可以方便地模拟网络行为。TUN 模拟的是一个三层设备,通过它可以处理来自网络层的数据,更通俗一点的说,通过它,我们可以处理 IP 数据包。
TAP 设备是一个二层设备,它比 TUN 更加深入,通过 /dev/tapX 文件可以收发 MAC 层数据包,即数据链路层,拥有 MAC 层功能,可以与物理网卡做 bridge,支持 MAC 层广播。
TAP 设备与 TUN 设备工作方式完全相同,区别在于:
(1)TUN 设备是一个三层设备,它只模拟到了 IP 层,即网络层 我们可以通过 /dev/tunX 文件收发 IP 层数据包,它无法与物理网卡做 bridge,但是可以通过三层交换(如 ip_forward)与物理网卡连通。可以使用ifconfig之类的命令给该设备设定 IP 地址。
(2)同样的,我们也可以通过ifconfig之类的命令给TAP设备设定 IP 地址,你如果愿意,我们可以给它设定 MAC 地址。

# ip tuntap help
Usage: ip tuntap { add | del | show | list | lst | help } [ dev PHYS_DEV ]
          [ mode { tun | tap } ] [ user USER ] [ group GROUP ]
          [ one_queue ] [ pi ] [ vnet_hdr ] [ multi_queue ] [ name NAME ]
Where: USER  := { STRING | NUMBER }
       GROUP := { STRING | NUMBER }

1、创建tun/tap设备

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

2、删除tun/tap设备

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

注:user 和 group 参数与 tunctl 的 -u、 -g 参数是一样的。
以上两个工具,更推荐使用 ip tuntap,一个是因为 iproute2 更全更新,已经逐步在替代老旧的一些工具;另一个是因为 tunctl 在某些Debian 类的系统上支持不全。

tun/tap的编程例子:
参考:https://blog.csdn.net/hbcbgcx/article/details/89227781

tun/tap的作用及区别TUN 设备是一种虚拟网络设备,通过此设备,程序可以方便地模拟网络行为。TUN 模拟的是一个三层设备,通过它可以处理来自网络层的数据,更通俗一点的说,通过它,我们可以处理 IP 数据包。TAP 设备是一个二层设备,它比 TUN 更加深入,通过 /dev/tapX 文件可以收发 MAC 层数据包,即数据链路层,拥有 MAC 层功能,可以与物理网卡做 bridge,支持 MAC 层广播。TAP 设备与 TUN 设备工作方式完全相同,区别在于:(1)TUN 设备是一个三层设备,它
决定坚持混 linux ,当然继续走低端路线,用ubuntu。 因为很多数据库都在各种云上,开了openvpn还不够,还要同时几个不同的数据库一起开着查东西。于是又兼职当了回网管。 基本的修改步骤是先ifconfig查好自己的以太网的interface name 接下来去修改/etc/network/interfaces 最后重启一把network,就应该一劳永逸了。 sudo serv...
用于 创建 、删除、读取和编写 linux Tap s 的 Golang 库。 该库还允许 创建 和管理桥梁。 目标是为 创建 桥提供一个很好的包装器。 例如,可以简单地 创建 第二层隧道: if err := tap . CreateBridge ( bridge_name ); err != nil { log . Fatal ( "Failed to create bridge" , err ) t , err := tap . Create Tap ( tap _name ) if err != nil { log . Fatal ( "Failed to create tap manager" ) if err := t . AddToBridge ( bridge_name ); err != nil { log . Fatal ( "Failed
ubuntu 创建 tap 设备 原文:Ubuntu Manpage: tun ctl — create and manage persistent TUN / TAP interfaces 1 首先安装 UML 工具 $ apt install uml-utilities 2 To create an interface for use by a particular user, invoke tun ctl without the -d option: 要 创建 一个接口给特定用户使用,不要使用 -d 命令
1、VRRP概述. Virtual Router Redundancy Protocol,也即虚拟路由器冗余协议。 ·利用VRRP,一组路由器(同一个LAN中的接口)协同工作,但只有一个处于Master状态,处于该状态的路由器(的接口)承担实际的数据流量转发任务。在一个VRRP组内的多个路由器接口共用一个虚拟IP地址,该地址被作为局域网内所有主机的缺省网关地址。 · VRRP决定哪个路由器是Master ,Master路由器负责接收发送至用户网关的数据包并进行转发,以及响应PC对于其网关lP地址的ARP请求
VRRP、DHCP和中继DHCP的基本知识点一、VRRP----虚拟路由器冗余协议1.1 VRRP的概述1.2 VRRP的术语1.3 VRRP状态机1.4 VRRP报文1.5 VRRP的作用1.6 VRRP的相关配置二、DHCP和中继DHCP2.1 DHCP动态主机配置协议2.1.1 DHCP的好处和用途2.1.2 DHCP的交互2.1.3 DCHP的配置2.2 中继DCHP2.2.1 应用场景2.2.2 工作原理:2.2.3 中继DCHP的配置 一、VRRP----虚拟路由器冗余协议 1.1 VRRP的概
终端一般都是使用路由器或者三层交换机的IP地址作为网关,如果这个网关发生了故障,那么所有主机都不能够去上网,而终端上最多只能配置一个网关,使用VRRP技术可以把多个路由器虚拟成一个逻辑的路由器 2.vrrp的基本概念(一) const ( TUN SETIFF = 0x400454ca // set tun nel type IFF_ TUN = 0x0001 // virtual tun nel IFF_NO_PI = 0x1000 // no packet information func main() { fd, err := syscall.Open("/dev/net/ tun ", os.O_RDWR, 0) if err != nil { panic(err) ifr := &syscall.Ifreq{ Name: [syscall.IFNAMSIZ]byte{'t', 'u', 'n', '0'}, ifr.Flags = IFF_ TUN | IFF_NO_PI _, _, err = syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), uintptr( TUN SETIFF), uintptr(unsafe.Pointer(ifr))) if err != 0 { panic(err) fmt.Printf(" TUN device %s created\n", ifr.Name[:]) 启动 tun : ```go package main import ( "fmt" "os/exec" const ( TUN _NAME = " tun 0" IP_ADDR = "10.0.0.1" NETMASK = "255.255.255.0" func main() { cmd := exec.Command("ip", "link", "set", "dev", TUN _NAME, "up") if err := cmd.Run(); err != nil { fmt.Fprintf(os.Stderr, "Error starting TUN device: %v", err) os.Exit(1) cmd = exec.Command("ip", "addr", "add", IP_ADDR+"/"+NETMASK, "dev", TUN _NAME) if err := cmd.Run(); err != nil { fmt.Fprintf(os.Stderr, "Error configuring TUN device: %v", err) os.Exit(1) fmt.Println(" TUN device started") 删除 tun : ```go package main import ( "fmt" "os/exec" const ( TUN _NAME = " tun 0" func main() { cmd := exec.Command("ip", "link", "del", TUN _NAME) if err := cmd.Run(); err != nil { fmt.Fprintf(os.Stderr, "Error deleting TUN device: %v", err) os.Exit(1) fmt.Println(" TUN device deleted") error: L6047U: The size of this image (32868 bytes) exceeds the maximum allowed for this version of 30375