Vlan与trunk
交换机的工作原理
- 交换机的主要作用是将多个节点连接至同一个广播域中
- 广播域中的设备可以直接通信,同一个广播域建议IP地址网络号一样
如图,R1和R2属于同一个广播域,只需要有二层的数据封装就可以通信,不看三层的数据封装
R1和R2故意配置不是同一个网段的地址,看下是否可以通信
1 | R1(config)#int e0/0 |
1 | R2(config)#int e0/0 |
测试是否可以互相访问
1 | R1#ping 192.168.1.1 |
这就说明二层的通信和三层的通信在一定程度上是隔离的,因为中间转发数据的设备不一样。
如果某个数据只有二层数据封装,那么只能在本广播域传递,交换机在处理的时候是不看IP地址相关信息,也就是不去查看三层数据。
路由器只处理IP报头中的内容,不去转发只有二层的数据,甚至如果这个数据包中二层的目的MAC地址不是路由器,路由器会直接丢弃。
- 交换机收到一个数据之后,首先会将数据的源MAC地址和收到的这个接口对应关系记录到MAC地址表中
1 | Switch#sh mac address-table |
- 查看目的MAC地址是否存在MAC地址表中,如果不存在,就会将这个数据复制多份,每个接口都发一份(泛洪)。比如下图,就收到了交换机泛洪过来的,不应该发送的数据包,不过只收到了一个。
- 交换机收到了正确的设备回应,并且学习到了MAC地址和接口对应关系,所以后续的数据都不会再泛洪。
1 | Switch#sh mac address-table |
MAC泛洪攻击
现有市面上的交换机学习到的MAC地址都是保存在内存中的,MAC地址学习数量有限,正常一个企业级入门交换机,能学习到的MAC地址数量只有几千个。
比如cisco C3560交换机可以学习到的地址只有6056个,正常情况下动态学习的MAC地址,需要等待300s都没有再次通信,就会删除。
1 | Eagle#show mac address-table count |
如果有用户恶意的让交换机疯狂的学习MAC地址,直到塞满MAC地址表,那么所有的数据都会泛洪,从而导致内网信息泄漏。
macof是dsniff套装工具集的成员,macof会发送随机mac地址的数据,让交换机瞬间塞满mac地址表,这样交换机就不得不泛洪每个数据,然后再通过dsniff分析敏感信息,比如密码。
没运行几秒钟,交换机的MAC地址表就学习到了一万多条
1 | Switch#show mac address-table count |
路由器的工作原理
- 收到一个数据包之后,首先查看目的MAC地址是否是接收端口,如果不是,就丢弃,如果是广播那就处理,但是不转发。
- 目的MAC地址如果通过检查,就回判断目的IP地址时候可路由(也就是路由表中是否存在匹配条目),存在就转发。
- 要注意,不管是接收还是发送,都会进行ACL检查。
VLAN
LAN(Local Area Network )
- 本地区域网络,一般指的是一个广播域,里面的节点可以直接使用数据链路层封装信息通信
- 不同的LAN往往是隔离的,如果有通信的需要,必须要经过一台三层设备,比如防火墙、路由器、上网行为管理等等
- 在企业中,不同的LAN之间通信需要进行安全策略,比如研发部门的内网和销售部门的内网,就应该中间隔离
一台交换机默认情况下,所有接口都属于一个LAN,但是有时候因为成本和部署的需要,我们想让一台交换机可以有多个LAN,这些LAN之间是逻辑上隔离的,我们称为VLAN。
如果SW的e0/0和e0/1没有配置不同的VLAN,那么R1和R2即使网段不一样,依旧可以通信。
将R1分配到vlan10,将R2分配到vlan20,这样就彻底隔离了。
1 | SW(config)#vlan 10,20 |
- 默认情况下,交换机所有的接口都属于vlan1,所以交换机插电开机就可使用,并且所有接口默认都是一个LAN
- VLAN号范围是0-4095,其中有部分是保留的,0是不可以使用的
- 在cisco设备上,vlan信息是保存在vlan数据库中的,在NVRAM的vlan.dat文件中,并不在startup-config和running-config中,所以show run是看不到对vlan操作的命令的
Trunk
如果在交换机级联的情况下(下面有介绍),各自VLAN的数据在交换机之间也需要传递。
可以多台交换机之间将不同的VLAN拿线连起来,这样就可以实现不同交换机相同VLAN可以通信,但是不同VLAN又是隔离的。
不过这么做,在VLAN多了之后,比如一些大型公司,VLAN就有几十个上百个之多,这样的话接口都不够,就需要有新的解决方案。
Trunk接口是被定义了用来区分不同VLAN流量的。
Trunk接口不能属于任何VLAN
Trunk接口会将流量按照802.1Q标准重新封装数据链路层,在类型字段后插入VLAN标签相关信息,标识这个流量
Trunk发出去的时候会加上VLAN信息,接收的时候会去除信息,并且把流量放到对应的VLAN中
如果多台交换机trunk级联,要注意,所有的交换机都必须要创建相同的VLAN号,即使某台交换机没有任何接口属于这个VLAN,也必须创建,不然这个VLAN的流量经过这台交换机的时候,就无法识别。
首先不去配置交换机,只是配置PC的IP地址,发现其实是会有跨网段访问的风险的。
我们开始配置VLAN
1 | Sw1(config)#vlan 10 |
1 | Sw2(config)#vlan 10 |
配置接口支持trunk
1 | interface Ethernet0/2 |
查看trunk是否启动
1 | Sw2#show interfaces trunk |
本帧VLAN
- 修改数据链路层封装,需要破坏原始数据报头,加入新的报头,并且还需要重新计算帧尾校验序列(FCS),比较消耗性能
- 可以交换机约定好,特定的VLAN大家都不打标签,这个就是本帧,默认本帧VLAN是vlan1
- Trunk接口如果收到一个没打802.1Q标记的流量,就认为这个是本帧VLAN的流量
- PC接口如果收到一个打上802.1Q标记的流量,会认为数据出错,然后丢包
- 本帧VLAN如果配置错误,可能导致流量在错误VLAN出现,最新的Cisco交换机固件会发现这个问题,然后将接口切断,防止发生串错VLAN情况,会将接口设置为
Inconsistent
状态
1 | interface Ethernet0/2 |
抓包发现没有802.1Q的信息了
交换机级联
当交换机接口不够,或者是部署位置的需要,比如两栋楼不可能都接在同一台交换机上,这个时候就需要将多台交换机连接起来,一台接一台的做法称之为级联。
默认情况下
- win_3发出了一个数据,Sw1记录下Win_3的MAC地址和e0/1接口的关系,然后泛洪,从e0/2发出。
- Sw2收到了之后,记录下Win_3的MAC地址和e0/2接口的对应关系,然后泛洪,从e0/1发出。
- Win_4收到了Win_3发来的数据,开始回复,发送给Sw2
- Sw2收到了之后,记录下来Win_4和e0/1的对应关系,然后查找MAC表,准确的从e0/2转发给Win_3。
- Sw1收到了之后,记录下Win_4和e0/1的对应关系,然后查找MAC表,准确的从e0/1转发给Win_3。
下面是MAC地址表
1 | SW1#show mac address-table |
级联可能会带来带宽瓶颈的问题,后续介绍怎么缓解。
VTP
- 思科私有的同步VLAN的功能
- 可以同步VLAN号等信息
- 有三种模式,Server、Client、Transparent
- Server:可以配置VLAN信息,并且以5分钟一次的周期在Trunk接口同步
- Clinet:不可以自行配置VLAN信息,只能接收Server发来的信息
- Transparent:可以配置VLAN信息,不去学习Server发来的信息,但是帮助传递
首先配置trunk
1 | Sw1(config)#int range e0/1 -2 |
1 | Sw2(config)#int e0/1 |
1 | Sw3(config)#int range e0/1 -2 |
1 | Sw4(config)#int e0/1 |
配置vtp
1 | Sw1(config)#vtp domain cisco |
1 | Sw2(config)#vtp do cisco |
1 | Sw3(config)#vtp do cisco |
1 | Sw4(config)#vtp do cisco |
在server上创建VLAN,查看同步情况,除了Sw3以外都学习到vlan了
1 | Sw1(config)#vlan 1-100 |
- 本文标题:Vlan与trunk
- 本文作者:Aaron
- 本文链接:https://iproute.cn/2020/04/12/vlan与trunk/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!