tun/tap的作用及区别TUN 设备是一种虚拟网络设备,通过此设备,程序可以方便地模拟网络行为。TUN 模拟的是一个三层设备,通过它可以处理来自网络层的数据,更通俗一点的说,通过它,我们可以处理 IP 数据包。TAP 设备是一个二层设备,它比 TUN 更加深入,通过 /dev/tapX 文件可以收发 MAC 层数据包,即数据链路层,拥有 MAC 层功能,可以与物理网卡做 bridge,支持 MAC 层广播。TAP 设备与 TUN 设备工作方式完全相同,区别在于:(1)TUN 设备是一个三层设备,它
. CreateBridge ( bridge_name ); err != nil {
log . Fatal ( "Failed to create bridge" , err )
t , err :=
. Create
_name )
if err != nil {
log . Fatal ( "Failed to create
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