linux虚拟网络设备之vlan配置详解

简介

VLAN是网络栈的一个附加功能,且位于下两层。首先来学习Linux中网络栈下两层的实现,再去看如何把VLAN这个功能附加上去。下两层涉及到具体的硬件设备,日趋完善的Linux内核已经做到了很好的代码隔离,对网络设备驱动也是如此,如下图所示:

这里要注意的是,Linux下的网络设备net_dev并不一定都对应实际的硬件设备,只要注册一个struct net_device{}结构体(netdevice.h)到内核中,那么这个网络设备就存在了。该结构体很庞大,其中包含设备的协议地址(对于IP即IP地址),这样它就能被网络层识别,并参与路由系统,最有名的当数loopback设备。不同的设备(包括硬件和非硬件)的ops操作方法各不相同,由驱动自己实现。一些通用性的、与设备无关的操作流程(如设备锁定等)则被Linux提炼出来,我们称为驱动框架。

linux虚拟网络设备之vlan配置

我们通过一个网桥两个设备对,来连接两个网络名字空间,每个名字空间中创建两个vlan

借助vconfig来配置vlan:

#创建网桥
brctl addbr br-test-vlan
#创建veth对儿
ip link add veth01 type veth peer name veth10
ip link add veth02 type veth peer name veth20
#将veth对儿的一段添加到网桥
brctl addif br-test-vlan veth01
brctl addif br-test-vlan veth02
#启动设备
ip link set dev br-test-vlan up
ip link set dev veth01 up
ip link set dev veth02 up
ip link set dev veth10 up
ip link set dev veth20 up
#创建网络名字空间
ip netns add test-vlan-vm01
ip netns add test-vlan-vm02
#将设备对儿的另一端添加到另个名字空间(其实在一个名字空间也能玩,只是两个名字空间更加形象)
ip link set veth10 netns test-vlan-vm01
ip link set veth20 netns test-vlan-vm02
#分别进入两个名字空间创建vlan和配置ip
#配置名字空间test-vlan-vm01
ip netns exec test-vlan-vm01 bash
#配置vlan 3001 和 vlan 3002
vconfig add veth10 3001
vconfig add veth10 3002
#启动两个vlan的设备
ip link set veth10.3001 up
ip link set veth10.3002 up
#分别在两个vlan上配置ip (这里简单起见,使用了同一个网段了IP,缺点是,需要了解一点儿路由的知识)
ip a add 172.16.30.1/24 dev veth10.3001
ip a add 172.16.30.2/24 dev veth10.3002
#添加路由
route add 172.16.30.21 dev veth10.3001
route add 172.16.30.22 dev veth10.3002
#配置名字空间test-vlan-vm02
ip netns exec test-vlan-vm02 bash
#配置vlan 3001 和 vlan 3002
vconfig add veth20 3001
vconfig add veth20 3002
#启动两个vlan的设备
ip link set veth20.3001 up
ip link set veth20.3002 up
#分别在两个vlan上配置ip (这里简单起见,使用了同一个网段了IP,缺点是,需要了解一点儿路由的知识)
ip a add 172.16.30.21/24 dev veth20.3001
ip a add 172.16.30.22/24 dev veth20.3002
#添加路由
route add 172.16.30.1 dev veth20.3001
route add 172.16.30.2 dev veth20.3002

查看一下vlan配置:

# cat /proc/net/vlan/config
VLAN Dev name | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
veth10.3001 | 3001 | veth10
veth10.3002 | 3002 | veth10

现在,我们可以分别在两个名字空间来ping另外一个名字空间的两个IP,虽然两个IP都能ping通,但是使用的源IP是不同的,走的vlan也是不同的,我们可以在veth01/veth10/veth02/veth20/br-test-vlan 任意一个上抓包,会看到vlan信息:

# tcpdump -i veth10 -nn -e
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on veth10, link-type EN10MB (Ethernet), capture size 262144 bytes
15:38:18.381010 82:f7:0e:2d:3f:62 > 9e:58:72:fa:11:15, ethertype 802.1Q (0x8100), length 102: vlan <span style="color: #ff0000;">3001</span>, p 0, ethertype IPv4, <strong><span style="color: #ff0000;">172.16.30.1 > 172.16.30.21</span></strong>: ICMP echo request, id 19466, seq 1, length 64
15:38:18.381183 9e:58:72:fa:11:15 > 82:f7:0e:2d:3f:62, ethertype 802.1Q (0x8100), length 102: vlan <span style="color: #ff0000;"><strong>3001</strong></span>, p 0, ethertype IPv4, 172.16.30.21 > 172.16.30.1: ICMP echo reply, id 19466, seq 1, length 64
15:38:19.396796 82:f7:0e:2d:3f:62 > 9e:58:72:fa:11:15, ethertype 802.1Q (0x8100), length 102: vlan 3001, p 0, ethertype IPv4, 172.16.30.1 > 172.16.30.21: ICMP echo request, id 19466, seq 2, length 64
15:38:19.396859 9e:58:72:fa:11:15 > 82:f7:0e:2d:3f:62, ethertype 802.1Q (0x8100), length 102: vlan 3001, p 0, ethertype IPv4, 172.16.30.21 > 172.16.30.1: ICMP echo reply, id 19466, seq 2, length 64
15:38:23.162052 82:f7:0e:2d:3f:62 > 9e:58:72:fa:11:15, ethertype 802.1Q (0x8100), length 102: vlan 3002, p 0, ethertype IPv4, 172.16.30.2 > <strong><span style="color: #ff0000;">172.16.30.22</span></strong>: ICMP echo request, id 19473, seq 1, length 64
15:38:23.162107 9e:58:72:fa:11:15 > 82:f7:0e:2d:3f:62, ethertype 802.1Q (0x8100), length 102: vlan 3002, p 0, ethertype IPv4, <strong><span style="color: #ff0000;">172.16.30.22 > 172.16.30.2</span></strong>: ICMP echo reply, id 19473, seq 1, length 64

如果试图从veth10.3001 去ping 172.16.30.22 是不能通的,因为是不同的vlan呀:

# ping -I veth10.3001 172.16.30.22
PING 172.16.30.22 (172.16.30.22) from 172.16.30.1 veth10.3001: 56(84) bytes of data.
^C
--- 172.16.30.22 ping statistics ---
9 packets transmitted, 0 received, 100% packet loss, time 8231ms

不适用vconfig的解法:

ip link add link veth10 name veth10.3001 type vlan id 3001

另: vlan 一般以  设备名.vlanid 来命名,不过并非强制,如下命名为 vlan3003也是没问题的

# ip link add link veth10 name vlan3003 type vlan id 3003

注意:一个主设备上相同vlan好的子设备最多只能有一个

# ip link add link veth10 name vlan3001 type vlan id 3001
 RTNETLINK answers: File exists

所以,正常来讲,一般是这样的:

参考: http://network.51cto.com/art/201504/473419.htm

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • VLAN如何在内网上进行划分

    VLAN的划分 有四种方式: 1.根据端口来划分VLAN 许多VLAN厂商都利用交换机的端口来划分VLAN成员.被设定的端口都在同一个广播域中.例如,一个交换机的1,2,3,4,5端口被定义为虚拟网AAA,同一交换机的6,7,8端口组成虚拟网BBB.这样做允许各端口之间的通讯,并允许共享型网络的升级.但是,这种划分模式将虚拟网限制在了一台交换机上. 第二代端口VLAN技术允许跨越多个交换机的多个不同端口划分VLAN,不同交换机上的若干个端口可以组成同一个虚拟网. 以交换机端口来划分网络成员,其配

  • 三下五除二 轻易搞定VLAN!

    VLAN技术是交换技术的重要组成部分.它将物理上直接相连的网络从逻辑上划分为多个子网.每个VLAN有相对应的一个广播域,不同VLAN之间需要通过第三层交换技术才能通信. 三层交换技术通俗地讲,就是将路由与交换合二为一的技术.路由器在对第一个数据流进行路由后,将会产生一个MAC地址与IP地址的映射表,当同样的数据流再次通过时,将根据此映射表直接从二层进行交换而不是再次路由,从而消除了路由器进行路由选择而造成网络的延迟,提高了数据包转发的效率. VLAN的配置涉及到VTP,VLAN中继的配置. VL

  • 如何在交换机上配置VLAN

    我们知道,传统的局域网Ethernet 使用具有冲突检测的载波监听多路访问( CSMA / CD )方法.在CSMA / CD 网络中,节点可以在它们有数据需要发送的任何时候使用网络.在节点传输数据之前,它进行"监听"以了解网络是否很繁忙.如果不是,则节点开始传送数据.如果网络正在使用,则节点等待.如果两个节点进行监听,没有听到任何东西,而开始同时使用线路,则会出现冲突.在发送数据时,它如果使用广播地址,那么在此网段上的所有PC都将收到数据包,这样一来如果该网段PC众多,很容易引起广播

  • VLAN的资料,从入门到精通

    局域网实现VLAN实例 局域网实现VLAN实例计算机网络技术的发展犹如戏剧舞台,你方唱罢我登台.从传统的以太网(10Mb/s)发展到快速以太网(100Mb/s)和千兆以太网(1000Mb/s)也不过几年的时间,其迅猛的势头实在令人吃惊.而现在中大型规模网络建设中,以千兆三层交换机为核心的所谓"千兆主干跑.百兆到桌面"的主流网络模型已不胜枚举. 现在,网络业界对"三层交换"和VLAN这两词已经不感到陌生了. 一.什么是三层交换和VLAN要回答这个问题我们还是先看看以太

  • 网管必学之交换机VLAN的配置

    有关VLAN的技术标准IEEE 802.1Q早在1999年6月份就由IEEE委员正式颁布实施了,而且最早的VLNA技术早在1996年Cisco(思科)公司就提出了.随着几年来的发展,VLAN技术得到广泛的支持,在大大小小的企业网络中广泛应用,成为当前最为热门的一种以太局域网技术.本篇就要为大家介绍交换机的一个最常见技术应用--VLAN技术,并针对中.小局域网VLAN的网络配置以实例的方式向大家简单介绍其配置方法. 一.VLAN基础 VLAN(Virtual Local Area Network)

  • 关于VLAN中DHCP域的问题

    我的问题就是如何给每个VLAN 指定各自的DHCP 域.比如vlan 2 对应dhcp test2 vlan3 对应dhcp test3. 假如:   情况1: 现在有一个router 上做了多个DHCP 域.   然后在switch 上划VLAN .那么那个交换机上的ip help-address 的IP 是什么呢?是router 上哪个口的IP 呢? 如:在router 上的配制:  ip dhcp excluded-address 10.0.199.200 10.0.199.254 ! i

  • 如何进行客户VLAN组建配置划分

    客户的网络架构为一台cisco4006,7台cisco 2950,一台pix525做防火墙,欲配置vlan,192.168.0.0/24网段为 客户办公区电脑,192.168.1.0/24网段为客房部电脑,192.168.2.0/24网段为服务器. 1,到各楼层的2950上,用concole连接设置管理ip,分别为192.168.0.254-- 192.168.0.248,其中所有端口默认的均设为vlan1.     2,在核心交换机上面设置vtp domain 命令如下:    4006#co

  • 详解Docker中VLAN网络模式的配置

    前言 Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完善的地方,网络 方面就是Docker比较薄弱的部分.因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求. Docker网络模式选择 目前已有不少文章介绍了Docker的网络模型,但是在实际应用中还是有不少坑和需要注意的点 在Docker应用到生产环境的时候,网络模型的选择主要有以下几种 1.原生Bridge NAT模式 2.Linux Bridge

  • 多VLAN环境下DHCP服务的实现

    在对网络进行升级改造时,必须考虑到各个方面,而如何在多VLAN环境中实现DHCP服务就是其中之一. 原理 使用DHCP方式获取IP地址需要利用广播数据包,按正常情况,DHCP服务只能在同一广播域内实现.而VLAN的建立就是为了隔离广播包,为什么在三层交换机上可以实现DHCP的跨网段呢?这需要我们将DHCP请求的广播数据包转化为单播请求,才会通过三层路由把请求转发到DHCP服务器所在的VLAN,进而实现DHCP的跨VLAN服务. 实现方法 为了实现跨VLAN的DHCP服务,需要从两方面入手,一方面

  • vlan间dhcp配置

    网络环境:一台3550EMI交换机,划分三个vlan,vlan2 为服务器所在网络,命名为server,IP地址段为192.168.2.0,子网掩码:255.255.255.0,网关:192.168.2.1,域服务器为windows 2000 advance server,同时兼作DHCP服务器,DNS服务器,IP地址为192.168.2.10,vlan3为客户机1所在网络,IP地址段为192.168.3.0,子网掩码:255.255.255.0,网关:192.168.3.1命名为work01,

随机推荐