linux上使用tun/tap设备模拟一个虚拟网卡,并将该虚拟网卡连接到新创建的网桥上

linux上使用tun/tap设备模拟一个虚拟网卡,并将该虚拟网卡连接到新创建的网桥上

一、tun/tap设备简介

tun/tap 设备是操作系统内核中的虚拟网络设备,是用软件模拟的网络设备,提供与硬件网络设备完全相同的功能。主要用于用户空间和内核空间传递报文。

tun/tap 设备与物理网卡的区别:

  1. 对于硬件网络设备而言,一端连接的是物理网络,一端连接的是网络协议栈。
  2. 对于 tun/tap 设备而言,一端连接的是应用程序(通过 字符设备文件 /net/dev/tun),一端连接的是网络协议栈。

二、在linux上使用tun/tap设备模拟一个虚拟网卡

  1. 确认内核是否支持tun/tap

    确认内核是否有tun模块

    modinfo tun
    

    出现如下提示,表示有tun模块

    image-20230318232301374

    加载tun模块

    modprobe tun
    
  2. 创建和配置虚拟网卡

    先安装tunctl,该工具可以通过安装软件包uml-utilities来获得,我的环境ubuntu,具体命令如下:

    apt install uml-utilities
    # 如果安装的时候找不到安装包,就使用如下命令更新软件列表信息
    apt upgrade
    

    创建虚拟网卡设备,命名为tap0

    tunctl -t tap0 -u root
    

    设置虚拟网卡,并配置ip地址和子网掩码等信息

    ifconfig tap0 192.168.0.1 netmask 255.255.255.0 promisc
    

三、 创建网桥连接到虚拟网卡上

# 创建一个名为br1的网桥
ip link add br1 type bridge

# 将tap0网卡设备加进来
ip tuntap add dev tap0 mode tap

# 将br1设置为tap0的目标网桥
ip link set dev tap0 master br1

# 启动网桥
ip link set dev br0 up

都搞定以后,查看网桥状态,需要安装brctl,该工具可以通过安装软件包bridge-utils来获得,具体命令如下:

apt install bridge-utils

安装好以后,用brctl show命令来查看网桥状态

四、参考资料:

Linux下添加虚拟网卡

在Linux系统下使用TUN/TAP虚拟网卡的基本教程

Linux 虚拟网卡技术:Macvlan

qemu网桥配置

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Linux 中,可以使用 golang 来创建、启动、关闭和删除 tun 虚拟网卡。下面是一个简单的代码示例: ```golang package main import ( "log" "os/exec" ) const ( // tun 设备名称 tunName = "mytun" // tun 设备 IP 地址 tunIP = "10.0.0.1/24" ) func createTun() { // 创建 tun 设备 cmd := exec.Command("ip", "tuntap", "add", tunName, "mode", "tun") if err := cmd.Run(); err != nil { log.Fatalf("Failed to create tun device: %v", err) } } func startTun() { // 设置 tun 设备 IP 地址并启动 cmd := exec.Command("ip", "addr", "add", tunIP, "dev", tunName) if err := cmd.Run(); err != nil { log.Fatalf("Failed to set tun device IP address: %v", err) } cmd = exec.Command("ip", "link", "set", tunName, "up") if err := cmd.Run(); err != nil { log.Fatalf("Failed to start tun device: %v", err) } } func stopTun() { // 停止 tun 设备 cmd := exec.Command("ip", "link", "set", tunName, "down") if err := cmd.Run(); err != nil { log.Fatalf("Failed to stop tun device: %v", err) } } func deleteTun() { // 删除 tun 设备 cmd := exec.Command("ip", "tuntap", "del", tunName, "mode", "tun") if err := cmd.Run(); err != nil { log.Fatalf("Failed to delete tun device: %v", err) } } func main() { createTun() startTun() // do something with the tun device stopTun() deleteTun() } ``` 在上面的示例中,我们首先定义了 tun 设备名称和 IP 地址。然后,我们实现了四个函数:`createTun()`、`startTun()`、`stopTun()` 和 `deleteTun()`。这些函数分别用于创建、启动、停止和删除 tun 设备。 在 `createTun()` 函数中,我们使用 `ip tuntap add` 命令来创建 tun 设备。在 `startTun()` 函数中,我们使用 `ip addr add` 命令来设置 tun 设备的 IP 地址,并使用 `ip link set` 命令启动 tun 设备。在 `stopTun()` 函数中,我们使用 `ip link set` 命令停止 tun 设备。在 `deleteTun()` 函数中,我们使用 `ip tuntap del` 命令删除 tun 设备。 最后,在 `main()` 函数中,我们按照创建、启动、停止、删除的顺序调用这些函数,以完成对 tun 设备的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值