Linux虚拟网络基础
原文链接 http://geekspeng.cn/2019/04/06/Linux%E8%99%9A%E6%8B%9F%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80.html
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
TAP/TUN
TAP/TUN 是 Linux 内核实现的一对虚拟网络设备,TAP 工作在二层虚拟以太设备,TUN 工作在三层
基于 TAP 驱动,即可实现虚拟机 vNIC 的功能,虚拟机的每个 vNIC 都与一个 TAP 设备相连,vNIC 之于 TAP 就如同 NIC 之于 eth
<!-- more -->
甚至连数据结构,tap与tun的定义都是同一个,两者仅仅是通过一个Flag来区分
当一个 TAP 设备被创建时,在 Linux 设备文件目录下会生成一个对应的字符设备文件,用户程序可以像打开一个普通文件一样对这个文件进行读写
Linux得有tun模块(Linux使用tun模块实现了tun/tap)
# modinfo tun
filename: /lib/modules/4.14.37-4.el7.x86_64/kernel/drivers/net/tun.ko.xz
alias: devname:net/tun
alias: char-major-10-200
license: GPL
author: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
description: Universal TUN/TAP device driver
srcversion: 768D398B7DC8B10F73D9182
depends:
intree: Y
name: tun
vermagic: 4.14.37-4.el7.x86_64 SMP mod_unload modversions
当Linux版本具有tun模块时,还得看看其是否已经加载
# lsmod | grep tun
tun 32768 21 vhost_net
如果没有加载,则使用如下命令进行加载:
# modprobe tun
创建 tap/tun 设备:
ip tuntap add dev tap0 mod tap # 创建 tap
ip tuntap add dev tun0 mod tun # 创建 tun
删除 tap/tun 设备:
ip tuntap del dev tap0 mod tap # 删除 tap
ip tuntap del dev tun0 mod tun # 删除 tun
VETH 设备总是成对出现,一端连着内核协议栈,另一端连着另一个设备,一个设备收到内核发送的数据后,会发送到另一个设备上去,这种设备通常用于容器中两个 namespace 之间的通信。