- 浏览: 1478569 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (691)
- linux (207)
- shell (33)
- java (42)
- 其他 (22)
- javascript (33)
- cloud (16)
- python (33)
- c (48)
- sql (12)
- 工具 (6)
- 缓存 (16)
- ubuntu (7)
- perl (3)
- lua (2)
- 超级有用 (2)
- 服务器 (2)
- mac (22)
- nginx (34)
- php (2)
- 内核 (2)
- gdb (13)
- ICTCLAS (2)
- mac android (0)
- unix (1)
- android (1)
- vim (1)
- epoll (1)
- ios (21)
- mysql (3)
- systemtap (1)
- 算法 (2)
- 汇编 (2)
- arm (3)
- 我的数据结构 (8)
- websocket (12)
- hadoop (5)
- thrift (2)
- hbase (1)
- graphviz (1)
- redis (1)
- raspberry (2)
- qemu (31)
- opencv (4)
- socket (1)
- opengl (1)
- ibeacons (1)
- emacs (6)
- openstack (24)
- docker (1)
- webrtc (11)
- angularjs (2)
- neutron (23)
- jslinux (18)
- 网络 (13)
- tap (9)
- tensorflow (8)
- nlu (4)
- asm.js (5)
- sip (3)
- xl2tp (5)
- conda (1)
- emscripten (6)
- ffmpeg (10)
- srt (1)
- wasm (5)
- bert (3)
- kaldi (4)
- 知识图谱 (1)
最新评论
-
wahahachuang8:
我喜欢代码简洁易读,服务稳定的推送服务,前段时间研究了一下go ...
websocket的helloworld -
q114687576:
http://www.blue-zero.com/WebSoc ...
websocket的helloworld -
zhaoyanzimm:
感谢您的分享,给我提供了很大的帮助,在使用过程中发现了一个问题 ...
nginx的helloworld模块的helloworld -
haoningabc:
leebyte 写道太NB了,期待早日用上Killinux!么 ...
qemu+emacs+gdb调试内核 -
leebyte:
太NB了,期待早日用上Killinux!
qemu+emacs+gdb调试内核
tun在网络层
tap在二层
lsmod|grep tun
linux下TUN/TAP虚拟网卡的使用
http://www.tuicool.com/articles/mu6vY3
ibm的文章
http://www.ibm.com/developerworks/cn/linux/l-tuntap/
skb_buffer
http://blog.chinaunix.net/uid-21768364-id-209652.html
centos7没有了
http://heanet.dl.sourceforge.net/project/tunctl/tunctl/1.5/tunctl-1.5.tar.gz
http://netassist.dl.sourceforge.net/project/tunctl/tunctl/1.5/tunctl-1.5.tar.gz
http://www.blogjava.net/kuuyee/archive/2010/12/07/339987.html
http://www.tuicool.com/articles/mu6vY3
设置桥接,
把本机网络eth0通过桥接,连到tap设备上,使tap设备能和外部通信
给tap设置网络
http://blog.csdn.net/ixidof/article/details/10148899
tunctl的代码非常简单:
tunctl.c:
执行编译:
tap在二层
lsmod|grep tun
linux下TUN/TAP虚拟网卡的使用
http://www.tuicool.com/articles/mu6vY3
ibm的文章
http://www.ibm.com/developerworks/cn/linux/l-tuntap/
skb_buffer
http://blog.chinaunix.net/uid-21768364-id-209652.html
modinfo tun modprobe tun lsmod|grep tun yum install tunctl -y
centos7没有了
http://heanet.dl.sourceforge.net/project/tunctl/tunctl/1.5/tunctl-1.5.tar.gz
http://netassist.dl.sourceforge.net/project/tunctl/tunctl/1.5/tunctl-1.5.tar.gz
yum install docbook* -y tar zxvf tunctl-1.5.tar.gz cd tunctl-1.5 make make install
http://www.blogjava.net/kuuyee/archive/2010/12/07/339987.html
http://www.tuicool.com/articles/mu6vY3
建立 tunctl -t tap0 -u root 删除使用 tunctl -d tap0
设置桥接,
把本机网络eth0通过桥接,连到tap设备上,使tap设备能和外部通信
ip link ifconfig eth0 0.0.0.0 promisc brctl addif br0 eth0 ip link set br0 up dhclient br0 brctl addif br0 tap0
给tap设置网络
ifconfig tap0 10.0.2.2 netmask 255.255.255.0 promisc
http://blog.csdn.net/ixidof/article/details/10148899
tunctl的代码非常简单:
tunctl.c:
/* Copyright 2002 Jeff Dike * Licensed under the GPL */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <fcntl.h> #include <unistd.h> #include <pwd.h> #include <grp.h> #include <net/if.h> #include <sys/ioctl.h> #include <linux/if_tun.h> /* TUNSETGROUP appeared in 2.6.23 */ #ifndef TUNSETGROUP #define TUNSETGROUP _IOW('T', 206, int) #endif static void Usage(char *name) { fprintf(stderr, "Create: %s [-b] [-u owner] [-g group] [-t device-name] " "[-p|-n] [-f tun-clone-device]\n", name); fprintf(stderr, "Delete: %s -d device-name [-f tun-clone-device]\n\n", name); fprintf(stderr, "The default tun clone device is /dev/net/tun - some systems" " use\n/dev/misc/net/tun instead\n\n"); fprintf(stderr, "-b will result in brief output (just the device name)\n"); fprintf(stderr, "-n will result in a point-to-point tun device,\n"); fprintf(stderr, "-p in an ethernet tap device. Default is a tap,\n"); fprintf(stderr, " except the device contains \"tun\" in the name.\n"); exit(1); } int main(int argc, char **argv) { struct ifreq ifr; struct passwd *pw; struct group *gr; uid_t owner = -1; gid_t group = -1; int tap_fd, opt, delete = 0, brief = 0, type = 0; char *tun = "", *file = "/dev/net/tun", *name = argv[0], *end; while((opt = getopt(argc, argv, "bd:f:npt:u:g:h")) > 0){ switch(opt) { case 'b': brief = 1; break; case 'd': delete = 1; tun = optarg; break; case 'f': file = optarg; break; case 'p': if(type != 0) Usage(name); type = IFF_TAP; break; case 'n': if(type != 0) Usage(name); type = IFF_TUN; break; case 'u': pw = getpwnam(optarg); if(pw != NULL){ owner = pw->pw_uid; break; } owner = strtol(optarg, &end, 0); if(*end != '\0'){ fprintf(stderr, "'%s' is neither a username nor a numeric uid.\n", optarg); Usage(name); } break; case 'g': gr = getgrnam(optarg); if(gr != NULL){ group = gr->gr_gid; break; } group = strtol(optarg, &end, 0); if(*end != '\0'){ fprintf(stderr, "'%s' is neither a groupname nor a numeric group.\n", optarg); Usage(name); } break; case 't': tun = optarg; break; case '?': case 'h': default: Usage(name); } } argv += optind; argc -= optind; if(argc > 0) Usage(name); if((tap_fd = open(file, O_RDWR)) < 0){ fprintf(stderr, "Failed to open '%s' : ", file); perror(""); exit(1); } if(type == 0) { type = strstr(tun, "tun") ? IFF_TUN : IFF_TAP; } memset(&ifr, 0, sizeof(ifr)); ifr.ifr_flags = type | IFF_NO_PI; strncpy(ifr.ifr_name, tun, sizeof(ifr.ifr_name) - 1); if(ioctl(tap_fd, TUNSETIFF, (void *) &ifr) < 0){ perror("TUNSETIFF"); exit(1); } if(delete){ if(ioctl(tap_fd, TUNSETPERSIST, 0) < 0){ perror("disabling TUNSETPERSIST"); exit(1); } printf("Set '%s' nonpersistent\n", ifr.ifr_name); } else { /* emulate behaviour prior to TUNSETGROUP */ if(owner == -1 && group == -1) { owner = geteuid(); } if(owner != -1) { if(ioctl(tap_fd, TUNSETOWNER, owner) < 0){ perror("TUNSETOWNER"); exit(1); } } if(group != -1) { if(ioctl(tap_fd, TUNSETGROUP, group) < 0){ perror("TUNSETGROUP"); exit(1); } } if(ioctl(tap_fd, TUNSETPERSIST, 1) < 0){ perror("enabling TUNSETPERSIST"); exit(1); } if(brief) printf("%s\n", ifr.ifr_name); else { printf("Set '%s' persistent and owned by", ifr.ifr_name); if(owner != -1) printf(" uid %d", owner); if(group != -1) printf(" gid %d", group); printf("\n"); } } return(0); }
执行编译:
gcc -g -Wall -o tunctl tunctl.c
发表评论
-
建立tap设备的c的代码
2019-01-08 19:09 474tapper.c #include <stdio.h& ... -
br0和tap0的互相影响
2019-01-02 19:17 815转载 http://www.cnblogs.com/wlei/ ... -
M版openstack(ovs,dvr,动态迁移)
2017-06-09 10:30 1789主要内容 1.先搭建三个节点的环境,dvr模式 2.建一个vm ... -
M版本的openstack的例子(linuxbridge)
2017-05-23 15:05 558做两个节点控制节点和计算节点 mcontroller521 ... -
vxlan多台主机的vm之间不同网段互通
2016-09-19 21:06 4376组播: 试验: 在三台机器上 192.168.139.251 ... -
vxlan多台主机的vm之间相同网段互通
2016-09-19 16:30 2241三台机器 建立namespace ... -
qemu用tap方式启动vm的网络试验(ip route)
2016-09-14 11:29 2809ip route add 192.168.8.0/24 via ... -
openstack的topo图
2016-09-07 14:07 634http://haoningabc.iteye.com/blo ... -
openstack的M版本的neutron的实验
2016-09-01 20:00 3135试验步骤: 1.创建内部 ... -
openstack的M版本安装
2016-08-17 13:33 1059参考 http://docs.openstack.org/mi ... -
can't initialize iptables table错误
2016-04-26 10:05 789can't initialize iptables table ... -
openstack L版本(openvswitch的安装和应用)
2016-03-24 15:04 3021参考L版本的linuxbridge的安装方式 和k版本的ov ... -
openstack试验(linux vxlan)
2016-03-22 22:27 2729yum install centos-release-open ... -
backup a libvirt xml
2016-03-18 21:23 570<domain type='kvm' id='2'> ... -
neutron router试验
2016-03-17 20:41 966上接 http://haoningabc.iteye.com/ ... -
openstack L版本(使用linux bridge的vxlan)
2016-03-12 23:35 2379参考 http://docs.openstack.org/li ... -
openstack的L版本安装(flat网络)
2016-03-07 17:55 982参考http://docs.openstack.org ... -
openstack调试 数据库跟踪
2016-03-04 18:07 719查看openstack代码 openstack每个命令之后,数 ... -
neutron基础九(qemu nat网络)
2016-02-06 17:21 1622接上基础八,kvm透传nested忽略 1.在主机ce ... -
neutron基础八(qemu 桥接网络)
2016-02-06 13:13 1544qemu的桥接和nat的qemu启动命令是一样的,但是后续的脚 ...
相关推荐
TUN/TAP虚拟网卡设备在Ad-hoc组网中的应用与实现,蔡佳翌,李绍胜,极限场景下的通信是工程师们最容易忽略,而关键时刻却又至关重要的研究重点之一。因自然灾害或战争形成的重灾区,基础通信设施往
本文简单介绍一下Linux虚拟网卡的概念,并以tun设备为例在客户端和服务器端分别建立一个实际的虚拟网卡,最终实现一个从客户端到服务器的简单的IP隧道,希望本文能对理解虚拟网卡和IP隧道有所帮助,本文将提供完整的...
Tun/Tap驱动是Linux内核中用于创建虚拟网络接口的关键组件,它在软件层面模拟了网络硬件的行为,使得无需实际物理网络设备就能进行网络数据包的收发。这种虚拟化技术在网络安全测试、虚拟机网络配置以及网络隔离等...
TUN/TAP设备支持为用户提供了一种在用户空间接收和发送数据包的能力,可以用来虚拟网卡或点对点通道。 **使用环境:** - 当用户空间的程序需要使用TAP设备来实现特定功能时,例如创建虚拟网络环境或进行网络测试。 ...
需要确保内核支持TUN/TAP设备驱动,然后可以像配置物理网卡一样配置虚拟网络设备。 - 如果内核不支持,可以通过重新编译内核,将TUN/TAP设备驱动设为模块(M)。 以上就是在VMware中配置Linux网络的基本步骤和相关...
例如,一个名为 br0 的 Linux Bridge 可以将物理网卡 eth0 和通过 TAP(Tun/Tun)设备连接的虚拟网卡 vnet0/vnet1 连接在一起。这样,虚拟机 VM1 和 VM2 就可以像在同一个物理交换机上一样相互通信,并且能够通过 ...
KVM(Kernel-based Virtual Machine)是一种开源的虚拟机软件,能够在 Linux 操作系统上实现虚拟化技术。配置 KVM 网络需要了解网桥模式的配置方法,以下是详细的配置步骤和相关知识点。 一、网桥模式的配置方法 1...
- **BT(Binary Translation)**:通过软件实现的完全虚拟化,例如使用模拟器。 - **HVM(Hardware-Assisted Virtualization)**:利用现代处理器提供的硬件辅助虚拟化功能实现。 - **半虚拟化(Para-...
- tunctl:配置TUN/TAP虚拟网络接口。 - libvirt:提供虚拟化管理的库和API。 - qemu-kvm:KVM虚拟机的运行时环境。 3. 配置桥接网络接口:创建一个新的网络配置文件,设置一个桥接设备br0,将其绑定到物理网络接口...
1. **TAP/TUN/VETH**:TAP/TUN是Linux内核实现的一对虚拟网络设备,TAP工作在二层,TUN工作在三层。它们为用户程序提供了类似物理网络设备的操作能力,可以用来实现虚拟网卡等功能。VETH设备则成对出现,可以理解为...
3. FlowBifurcation:利用SR-IOV能力虚拟出多张网卡(一个物理功能PF和多个虚拟功能VF),利用网卡分流引擎将特定网络流导向内核驱动控制的虚拟网卡。此方案依赖于硬件的包分类和过滤能力,缺乏灵活性。 DPDK v...
此外,还需安装`tunctl`来管理TUN/TAP设备,以支持某些网络配置。 在配置网络时,通常选择桥接模式,使虚拟机直接接入物理网络。这需要禁用NetworkManager服务,并创建一个新的桥接设备,如`br0`。在`/etc/...
1. Tap INTERFACE:命名为 tapXXXX,用于连接 instance 的虚拟网卡。 2. Linux Bridge:命名为 qbrXXXX,用于连接虚拟网络设备和物理网卡。 3. Veth Pair:命名为 qvbXXXX, qvoXXXX,用于连接 Linux Bridge 和 ...
首先,安装`tunctl`,用于创建TUN/TAP设备: ``` wget tunctl-1.5.tar.gz tar xzvf tunctl-1.5.tar.gz cd tunctl-1.5 make make install ``` 接下来,禁用NetworkManager,因为它可能与桥接网络冲突: `...
- **内核网络接口库(KNI)**:类似于Linux的TUN/TAP接口,但提供了更高的性能,支持单个物理网口虚拟化为多个KNI接口。 ### 日志系统篇 #### 全局日志变量rte_logs - **结构体定义**: ```c struct rte_logs ...
1. **网卡虚拟化**: - **TAP设备**:是一种二层设备,可以在Linux内核和用户空间之间传输数据帧。 - **TUN设备**:是一种三层设备,用于在Linux内核和用户空间之间传输IP数据包。 - **VETH**:是一种成对出现的...