linux虚拟网络设备之vlan配置详解
作者:daisy 发布时间:2023-08-07 04:38:22
简介
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
来源:https://phpor.net/blog/post/7109


猜你喜欢
- 要说网站推广,大家的第一反应可能就是上论坛发软文和利用QQ群发软件疯狂的加人广发网址。尤其是群发,是搞SF和SE站长最喜欢用的就是一招。但是
- 在驱动的模块中声明一下你要传递的参数名称,类型和权限module_param(变量的名称,类型,权限);#include <linux
- 1 概述企业知名度增加,网站访问量逐渐上升,是每一个网管所盼望的。但同时应用服务器的数据流量和访问量将成倍增加,服务器将不堪重负。这时,可采
- 一、定位1、网站的前景。网站的定位直接影响到日后的盈利模式,因此网站的发展方向、受众群体、受众的多少起了决定性的作用。2、自身的优势。看看自
- 前言系统cpu飙高,尤其对于后端人员来说,其实应该学会排查,这样也算是综合能力的体现;那么当出现了cpu严重飙高的时候怎么排查呢?一、第一步
- 在生产环境中,集群节点磁盘大小不同,其使用率也会不同,HDFS虽有均衡策略,但也会有数据不平衡的情况,有些节点磁盘就会被打满,然后这个节点就
- 今天我们公司开始上班了,又投入到了紧张的工作状态中,接下来的每天都是密切的关注这搜索引擎的动静以及公司那些网站的最近情况。其实说实话,企业网
- 10月23日消息,据国外媒体报道,苹果周四宣布,将于年底前升级Boot Camp,从而支持微软刚刚发布的Windows 7。2006年,苹果
- 我们知道做好负载均衡对网站的正常运行,用户体验相当重要。在负载均衡中有一个必须要做的事情就是给服务器开启GZIP压缩功能,对用户请求的页面进
- 目录Windows10下hyperledger fabric1.4环境搭建PrerequisitesWindows10专业版Git bash
- 在这个系统上#号代表的是root用户,$符号代表的普通用户。那么如何让它们迅速的进行切换的呢?1、先把电脑系统打开了,然后点击启动器。2、在
- 由于前几天老师要检查大作业,而我们的数据库是放在虚拟机里的(不想在本机里放太多东西,保持轻便快速...),平时是用的桥接模式,但是考虑到可能
- 很多公司或企业将其Web服务器放在内网,并在防火墙上做映射,将来自80端口的请求转向一台内网Web服务器的Web端口。这样做安全性是提高了不
- 背景给VirtualBox虚拟机(装载了Ubuntu16.04系统)配置了两张网卡,网络模式分别为“网络地址转换(NAT)”和“仅主机(Ho
- 专门盯住知名企业、名人等域名进行抢注的人,被称为“域名虫”,这个称呼演化为“米虫
- 如何从运行 Windows Server 2003 的独立服务器开始运行 Windows Server 2003 的独立服务器成为网络的 D
- 3、安装步骤:笔者假设你的Linux系统中已经安装了Apache+PHP+MySQL+IMAP,而且twig也已经下载至你的家目录中。现在就
- (一) 图链网站登陆对于一个流量不大, 知名度不高的网站来说, 图链网站能给你带来的流量远远超过搜索引擎以及其他方法.(二) 友情连接友情连
- 地方网站竞争激烈,各个网站都习惯将注意力放在了竞争对手上。殊不知对于地方网站,尤其是发展初期的地方网站来说,当地的百度贴吧也是不容忽视的一点
- 我的Godaddy主机的主域名已经过期一年多了,因为这个并不影响空间的正常使用,也就没有续费。昨晚想看看最近网站蜘蛛爬行情况,却发现Goda