centos怎么建立一个tap接口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了centos怎么建立一个tap接口相关的知识,希望对你有一定的参考价值。

参考技术A CentOS/RHEL6引入了一致和可预测的网络设备命名网络接口的方法。这些特性可以唯一地确定网络接口的名称以使定位和区分设备更容易,并且在这样一种方式下,无论是否重启机器、过了多少时间、或者改变硬件,其名字都是持久不变的。然而,这种命名规则并不是默认在CentOS/RHEL6上开启。从CentOS/RHEL7起,这种可预见的命名规则变成了默认。根据这一规则,接口名称被自动基于固件,拓扑结构和位置信息来确定。现在,即使添加或移除网络设备,接口名称仍然保持固定,而无需重新枚举,和坏掉的硬件可以无缝替换。
* 基于接口类型的两个字母前缀:
* en -- 以太网
* sl -- 串行线路IP (slip)
* wl -- wlan
* ww -- wwan
*
* 名字类型:
* b<number> -- BCMA总线和新书
* ccw<name> -- CCW总线组名
* o<index> -- 车载设备的索引号
* s<slot>[f<function>][d<dev_port>] -- 热插拔插槽索引号
* x<MAC> -- MAC 地址
* [P<domain>]p<bus>s<slot>[f<function>][d<dev_port>]
* -- PCI 位置
* [P<domain>]p<bus>s<slot>[f<function>][u<port>][..]1[i<interface>]
* -- USB端口号链
新的命名方案的一个小的缺点是接口名称相比传统名称有点难以阅读。例如,你可能会发现像enp0s3名字。再者,你再也无法来控制接口名了。

如果由于某种原因,你喜欢旧的方式,并希望能够选择任意名称分配给CentOS/ RHEL7的设备,你需要重写默认的可预测的命名规则,定义基于MAC地址udev规则。
下面是如何在CentOS或RHEL7命名网络接口。
首先,让我们来禁用该可预测命名规则。对于这一点,你可以在启动时传递“net.ifnames=0”的内核参数。这是通过编辑/etc/default/grub并加入“net.ifnames=0”到GRUBCMDLINELINUX变量来实现的。
参考技术B 两种方法:用GRE建立,或用openvpn建立。
既然用到tap / tun了,那就肯定是私有隧道了,openvpn太繁琐了,就说GRE吧:
配置gre隧道 / gre通道用于打通两地内网

Client端:
modprobe ip_gre # 调用内核中的ip_gre模块
ip tunnel add grevipvpn mode gre remote 111.2222.333.444 local 555.666.777.888 # 在客户端555.666.777.888上写,和对端公网111.2222.333.444建立,本地GRE网卡名为grevipvpn
ifconfig grevipvpn 10.93.93.17 netmask 255.255.255.252 up # 指定客户端的隧道ip为 10.93.93.17

Server端:
modprobe ip_gre
ip tunnel add grehz mode gre remote 555.666.777.888 local 111.2222.333.444
ifconfig grevipvpn 10.93.93.18 netmask 255.255.255.252 up # 服务端指定隧道ip为10.93.93.18

PS: 能ping通隧道ip即表示完成;
客户端撰写一遍, 服务端再撰写一遍,刚好相反;

撤销GRE隧道
ip link set gre1 down
ip tunnel del gre1
PS:和openvpn相比:明文传输,没有安全性;配置简单不复杂;

CentOS下使用TUN/TAP虚拟网卡的基本教程

在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能。
TAP 等同于一个以太网设备,它操作第二层数据包如以太网数据帧。TUN模拟了网络层设备,操作第三层数据包比如IP数据封包。
操作系统通过TUN/TAP设备向绑定该设备的用户空间的程序发送数据,反之,用户空间的程序也可以像操作硬件网络设备那样,通过TUN/TAP设备发送数据。在后种情况下,TUN/TAP设备向操作系统的网络栈投递(或“注入”)数据包,从而模拟从外部接受数据的过程。
服务器如果拥有TUN/TAP模块,就可以开启VPN代理功能。
虚拟网卡TUN/TAP 驱动程序设计原理:
技术分享

tun/tap 驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装。
利用tun/tap 驱动,可以将tcp/ip协议栈处理好的网络分包传给任何一个使用tun/tap驱动的进程,由进程重新处理后再发到物理链路中。
开源项目openvpn ( http://openvpn.sourceforge.net)和Vtun( http://vtun.sourceforge.net)都是利用tun/tap驱动实现的隧道封装。

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

[[email protected]_196_26_centos ~]# modinfo tun

filename:       /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/net/tun.ko

alias:          devname:net/tun

alias:          char-major-10-200

license:        GPL

author:         (C) 1999-2004 Max Krasnyansky <[email protected]>

description:    Universal TUN/TAP device driver

rhelversion:    7.2

srcversion:     B59BCB1255A36FBC7557FC3

depends:        

intree:         Y

vermagic:       3.10.0-327.el7.x86_64 SMP mod_unload modversions 

signer:         CentOS Linux kernel signing key

sig_key:        79:AD:88:6A:11:3C:A0:22:35:26:33:6C:0F:82:5B:8A:94:29:6A:B3

sig_hashalgo:   sha256

加载内核模块

[[email protected]_196_26_centos ~]# modprobe tun

[[email protected]_196_26_centos ~]# lsmod | grep tun

tun                    27141  0 

执行以上命令后,出现如上输出,说明模块加载成功

2. 创建和配置虚拟网卡
确认是否有tunctl命令,如果没有通过yum安装即可

centos6通过直接通过yum install tunctl -y安装

(以上参考的http://www.jb51.net/LINUXjishu/401735.html

centos7安装之前需要新增yum源(参考的https://pkgs.org/centos-7/nux-misc-x86_64/tunctl-1.5-12.el7.nux.x86_64.rpm.html

Install Howto

  1. Create the repository config file /etc/yum.repos.d/nux-misc.repo:

    [nux-misc]
    name=Nux Misc
    baseurl=http://li.nux.ro/download/nux/misc/el7/x86_64/
    enabled=0
    gpgcheck=1
    gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
  2. Install tunctl rpm package:

    # yum --enablerepo=nux-misc install tunctl

创建虚拟网卡设备


[[email protected]_196_26_centos ~]# tunctl -t tap0 -u root

Set ‘tap0‘ persistent and owned by uid 0

[[email protected]VM_196_26_centos ~]# ifconfig tap0 192.168.0.1 netmask 255.255.255.0 promisc

[[email protected]_196_26_centos ~]# ifconfig tap0                                          

tap0: flags=4355<UP,BROADCAST,PROMISC,MULTICAST>  mtu 1500

        inet 192.168.0.1  netmask 255.255.255.0  broadcast 192.168.0.255

        ether 5e:04:f6:78:9a:01  txqueuelen 500  (Ethernet)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 0  bytes 0 (0.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

经过如上操作后,虚拟网卡已经建立和配置好了。

下面再用另一个命令添加一个tap1(参考https://www.mylinuxplace.com/create-taptun-device-centos-7/)


[[email protected]_196_26_centos ~]# ip tuntap add tap1 mode tap

[[email protected]_196_26_centos ~]# ifconfig tap1 10.0.0.1/30

[[email protected]_196_26_centos ~]# ifconfig tap1

tap1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

        inet 10.0.0.1  netmask 255.255.255.252  broadcast 10.0.0.3

        ether 2e:69:ab:20:0d:a7  txqueuelen 500  (Ethernet)

        RX packets 0  bytes 0 (0.0 B)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 0  bytes 0 (0.0 B)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


3.最后怎么删除tap0、tap1呢?(参考的http://blog.csdn.net/zhaihaifei/article/details/23168621

[[email protected]_196_26_centos ~]# tunctl -d tap0

Set ‘tap0‘ nonpersistent

[[email protected]_196_26_centos ~]# tunctl -d tap1

Set ‘tap1‘ nonpersistent

技术分享



以上是关于centos怎么建立一个tap接口的主要内容,如果未能解决你的问题,请参考以下文章

CentOS下创建tap虚拟网卡与Veth的使用

[Linux用户空间编程-4]:Linux虚拟网络设备TUN/TAP的工作原理与代码示例

虚拟网络环境抓包

虚拟网络环境抓包

TUN/TAP设备浅析(一) -- 原理浅析

我用U盘安装centos到选择建立自定义分区这一步,里面sda没有free空间,我该怎么做,另外在自定义分区会