DHCP
采用UDP封装,Client(68端口)/Server(67端口)模式,客户端提出配置申请,服务端响应配置请求
报文类型
- 客户端发送报文
- DHCP Discover(广播):客户端广播来查找服务器
- DHCP Request(广播):客户端发送给服务器请求配置参数或者请求配置确认或者续借租期。使用场景如下:
- 正常的请求消息(华为是单播)
- 租约的期限到了50%(单播,进行续约)
- 租约的期限到了87.5%(广播,在50%的时候续约不成功,重新进行续约)
- PC重启之后需要重新续约
- DHCP Decline:客户端发现地址已经被使用时,用来通知服务器
- DHCP Inform:客户端已经有IP地址时用它来向服务器请求其他的配置参数
- DHCP Release:客户端要释放地址时用来通知服务器
- 服务器发送报文
- DHCP Offer(广播或单播依据flag):服务器响应客户端的DHCP DISCOVER报文,并指定相应的配置参数
- DHCP Ack(广播或单播依据flag):服务器到客户端,含有配置参数包括IP地址
- DHCP Nak:服务器发送给客户端来表明客户端的地址请求不正确或者租期已过期
报文格式
- op:报文的类型,取值为1或2,含义如下:
- 1:客户端请求报文
- 2:服务器响应报文
- htype:硬件类型,以太网的值为1
- hlen:硬件地址长度,以太网的值为6
- hops:当前的DHCP报文经过的DHCP中继的数目。该字段由客户端或服务器设置为0,每经过一个DHCP中继时,该字段加1。
服务器和客户端之间的DHCP中继数目不能超过16个,否则DHCP报文将被丢弃
- xid:DHCP客户端选取的随机数,使DHCP服务器的回复与DHCP客户端的报文相关联
- secs:客户端从开始获取地址或地址续租更新后所用的时间,单位是秒
- flag:标志字段,只有最高位才有意义,其余均被置为0,最高位是单播或广播响应标志位:
- 0:客户端请求服务器以单播形式发送响应报文
- 1:客户端请求服务器以广播形式发送响应报文
- ciaddr:客户端的IP地址
- yiaddr:服务器分配给客户端的IP地址
- siaddr:DHCP客户端获得启动配置信息的服务器的IP地址
- giaddr:表示第一个DHCP中继的IP地址
- chaddr:客户端的MAC地址
- sname:客户端获取配置信息的服务器名字
- file:客户端需要获取的启动配置文件名
- option:采用TLV方式构成
- type1:设置子网掩码
- type3:设置网关地址
- type6:设置DNS服务器地址
- type12:设置DHCP客户端的主机名
- type50:请求IP地址
type43
:DHCP的option 43选项是告诉AP 网络中AC的IP地址,让AP寻找AC进行注册type82
:option 82实现dhcp客户端和dhcp中继设备的地址信息记录在dhcp服务器上,实现dhcp分配的限制和计费功能
工作流程
首次接入网络
1. 无中继
没有中继时是2个广播+2个单播
- 客户端发送Discover广播报文即目的地址为255.255.255.255,查找服务器
- 收到Discover信息的服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给客户端,发送一个包含IP地址等信息的Offer
- 客户端收到Offer报文之后,因为有多个DHCP服务器,所以客户端以广播方式发送Request报文,除了向选定的服务器请求IP地址其他信息之外,还要通知所有的DHCP服务器,已经选择某台服务器所提供的IP地址
- 服务器收到请求之后,给客户端发送ACK响应报文,以后客户端每次重新登录网络时,只需要发送包含前一次所分配的IP地址的Request请求信息
2. 有中继
中继与服务器之间是4个单播报文,客户端会将中继当作服务器,所以客户端与中继之间的报文还是2个广播+2个单播
- 什么时候使用中继?需要跨网段分配IP地址时
- 使用中继之后,服务器如何确定给客户端分配哪个网段的地址?Discover报文中的gateway ip address是否被填充,如果被填充则只会分配gateway ip address所在网段的地址
重新使用之前使用的地址(例如开机)
- 客户端广播发送包含前一次分配的IP地址的Request报文,报文中的Option50(请求的IP地址选项)字段填入曾经使用过的IP地址
- 服务器根据Request报文中携带的MAC地址来查找有没有相应的租约记录,如果有则返回Ack报文,通知DHCP客户端可以继续使用这个IP地址。否则,保持沉默,等待客户端重新发送Discover报文请求新的IP地址
更新租期
1. 无中继
- 当租期达到50%(T1)时,客户端以单播的方式向服务器发送Request报文,请求更新IP地址租期
- 服务器回应Ack报文,则租期更新成功(即租期从0开始计算)
- 服务器回应Nak报文,则客户端重新发送Discover报文请求新的IP地址
- 当租期达到87.5%(T2)时,且仍未收到服务器的应答,则客户端会以广播的方式向服务器发送Request报文,请求更新IP地址租期
2. 有中继
DHCP Snooping
侦听客户端发送的DHCP-REQUEST和信任接口收到的DHCP-ACK报文
DHCP的一种安全特性,用于保证DHCP客户端从合法的DHCP服务器获取IP地址,通过截获DHCP Client和DHCP Relay之间的DHCP报文并进行分析处理,可以过滤不信任的DHCP报文并建立和维护一个DHCP Snooping绑定表绑定表包括MAC地址、IP地址、租约时间、VlanID、接口信息
,通过对这个绑定表的维护,建立一道在客户端和服务器之间的防火墙,Request报文中Option82记录报文入端口类型、端口号、VLAN信息以及桥MAC地址,是生成绑定表的重要部分。
DHCP Snooping信任功能将接口分为信任接口和非信任接口:
- 信任接口正常接收DHCP服务器响应的DHCP ACK、DHCP NAK和DHCP Offer报文
一般将与合法DHCP服务器直接或间接连接的接口设置为信任接口,其他接口设置为非信任接口
- 非信任接口在接收到DHCP服务器响应的DHCP ACK、DHCP NAK和DHCP Offer报文后,丢弃该报文
DHCP Snooping绑定表
- 静态绑定表:按照实际需求在报文入端口手工输入,没有租期限制
用途:一些重要设备(如服务器)和一些高端用户需采用静态方式,一是没有租期限制,二是安全性高且便于管理。 - 动态绑定表:客户端在申请IP地址过程中,根据DHCP报文内容在报文入端口自动生成,存在老化时间,有租期限制。
用途:生成方便,常用于非重要设备。不过绑定表存在老化时间,且不便于管理。
针对DHCP的攻击
1. DHCP仿冒者攻击
DHCP仿冒者攻击解决方法:一般把通向DHCP Server的接口(连接网络内部的网络侧接口)设成Trusted状态,其它接口(连接网络外部的用户侧接口)都设为Untrusted状态。
2. 中间人攻击(IP/MAC Spoofing攻击,ARP欺骗)
攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为与对方直接对话,但事实上整个会话都被攻击者完全控制,攻击者可以拦截通讯双方的通话并插入新的内容。
- 中间人同时向DHCP服务器和客户端单播发送ARP响应报文:
即需要欺骗服务器,有需要欺骗客户端
- 向服务器发送的报文中IP为客户端的IP 10.1.1.2,但MAC是中间人的mac 1-1-1
- 向客户端发送的报文中IP为服务器的IP 10.2.1.1,但MAC还是中间人的mac 1-1-1
- 服务器和客户端收到ARP响应报文之后修改ARP表项:
- 服务器将分配给客户端的地址10.1.1.2对应的mac修改为1-1-1
- 客户端将DHCP服务器的地址10.2.1.1对应的mac修改为1-1-1
- 之后客户端和服务器转发的数据都会到达中间人那里
中间人攻击解决方法:为了防止中间人攻击或IP/MAC Spoofing攻击,可以在交换机上配置DHCP Snooping功能,使能DHCP Snooping绑定表功能后,只有接收到的报文的信息和绑定表中的内容一致才会被转发,否则报文将被丢弃。
DAI(动态ARP检测)是用来检测arp报文的,是用来防止中间人攻击;IPSG(IP源防攻击)是用来检测IP报文的,用来防止盗用IP的
开启DAI或者IPSG之前必须开启DHCP Snooping
DAI原理:当设备收到ARP报文时,将此ARP报文对应的源IP、源MAC、VLAN以及接口信息和绑定表的信息进行比较,如果信息匹配,说明发送该ARP报文的用户是合法用户,允许此用户的ARP报文通过,否则就认为是攻击,丢弃该ARP报文。用户防止中间人攻击
IPSG原理:IPSG功能是基于绑定表(DHCP动态和静态绑定表)对IP报文进行匹配检查。当设备在转发IP报文时,将此IP报文中的源IP、源MAC、接口、VLAN信息和绑定表的信息进行比较,如果信息匹配,表明是合法用户,则允许此报文正常转发,否则认为是攻击报文,并丢弃该IP报文。用来防止对源IP进行攻击的行为
中间人攻击发送的报文中修改的是MAC地址,给服务器发的报文的IP是客户端的,给客户端发的IP是服务器的,从而达到双向欺骗的目的,影响终端和服务器的ARP表项,导致被攻击者和服务器之间的交互数据被转发到中间人;IP源攻击同时修改报文中的mac和IP为被攻击者的,影响的是交换机的出接口,导致报文不能转发给被攻击者
3. 饿死攻击
- 攻击原理:在饿死攻击方式中,攻击者不断变换物理地址,尝试申请地址池中所有的IP 地址,直到耗尽DHCP Server地址池中的地址,导致其他正常用户无法获得地址。
- 解决方案:通过MAC地址限制功能可以防止饿死攻击。通过限制交换机接口上允许学习到的最多MAC 地址数目,防止用户通过变换MAC地址,大量发送DHCP请求,同时也限制了一个接口上的用户数目。
4. 改变CHADDR值(客户端物理地址)的饿死攻击
- 攻击原理:在这种攻击方式中,如果攻击者改变的不是数据帧头部的源MAC,而是改变DHCP报文中的CHADDR(Client Hardware Address)值来不断申请IP地址,而交换机仅根据数据帧头部的源MAC来判断该报文是否合法,那么MAC地址限制方案不能起作用。
- 解决方案:可以使用DHCP Snooping检查REQUEST报文中CHADDR字段的功能。如果该字段跟数据帧头部的源MAC相匹配,便转发报文;否则,丢弃报文。
5. ARP攻击原理
- ARP攻击方式:有针对主机的,也有针对网关的;有地址欺骗型的, 也有野蛮攻击型的;有来自病毒的攻击,也有来自使用非法软件的人为攻击
- ARP攻击根源:ARP协议本身过于简单和开放,没有任何的安全手段
- ARP攻击危害:ARP地址欺骗攻击一般针对个别或一定范围内的主机进行,危害相对较小。但针对网关设备的大流量ARP DDOS攻击,由于其网络位置的特殊性,将造成大面积用户“掉线”
- ARP攻击解决方法:在应用DHCP服务器的组网环境下, 建立可信端口(trust Port),通过监控可信端口的DHCP报文获得IP/MAC地址绑定表,过滤掉所有不匹配的IP/ARP报文
FTP
仅基于TCP的服务,不支持UDP,端口21(控制)和20(主动模式下服务端数据传输)
工作方式
主动和被动是针对服务器来说的,但是设置是在客户端设置,两者的区别在于数据连接是由服务器发起还是由客户端发起
- 主动模式:PORT方式,Standard(默认模式)
首先客户端(任意一个非特殊端口>1024,例如N)主动与服务器的21端口建立连接,然后服务器使用任意端口主动连接客户端的20端口即由服务器主动发起数据连接
- 被动模式:PASV方式,Passive
首先客户端主动与服务器的21端口建立连接,然后服务器随机开放一个端口(>1024),通知客户端来连接本端口,最后客户端去连接那个端口进行数据传输即服务端的数据连接是被动的,由客户端主动发起数据连接,服务端通过控制连接告诉客户端用来传输数据的端口
如果客户端与服务器中间有防火墙,建议服务器使用被动模式
。
FTP连接的建立
FTP采用2个TCP连接来传输文件:
- 控制连接:连接控制端口,传输控制命令
- 数据连接:连接数据端口,在控制连接建立后,数据连接通过控制端口的命令建立起连接,进行数据的传输
1. 主动模式
- 服务器监听21端口
- 客户端向服务器的21端口发起控制连接的建立请求客户端端口为X(>1024),然后监听X端口
SYN
- 服务器21端口响应连接服务器连接的是客户端的X端口
SYN+ACK
- 客户端响应使用X端口服务器21端口,控制连接建立每60秒发送keeplive报文保持控制层面连接
ACK,控制层面3次握手,连接建立成功。如果有认证则进行认证
- 客户端通过控制连接发送PORT命令使用X端口,将客户端数据连接的临时端口号X+1告诉服务器。
- 服务器的20号端口与客户端建立起数据连接
也需要3次握手
传输完数据之后,数据连接会断开,但是控制层面的连接不会断开。如果再次进行数据传输,则重新通过PORT命令发送临时端口号X+2,即每次数据传输都需要控制层面发送数据端口号,且端口号递增
2. 被动模式
- 服务器监听21端口
- 客户端发起控制连接的建立请求使用端口X,服务器响应连接,控制连接建立
3次握手建立连接
- 客户端通过控制连接发送命令字PASV,告知服务器处于被动模式
- 服务器回应,将服务器数据连接的临时端口号Y告诉客户端
- 客户端主动客户端使用端口X+1连接服务器的临时数据端口Y进行数据传输
数据连接也是3次握手
主动模式下,服务器的数据端口号为20,客户端的端口号递增;被动模式下,服务器的数据端口号随机,客户端的端口号递增
主动模式和被动模式控制连接和数据连接均是3次握手,没有区别,主要区别在于控制连接建立之后协商服务器使用数据端口号为多少时有区别,主动模式固定20,被动模式随机
关于防火墙
主动模式对服务器的管理有利,但对客户端的管理不利。因为服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉,因此主动模式下要设置客户端的防火墙。
被动模式对客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉,因此被动模式下要设置服务端的防火墙。服务端可以指定端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞,虽然没有消除所有针对服务器的危险,但它大大减少了危险
ALG:应用层网关,也叫应用层防火墙或应用层代理防火墙
假设客户端在私网,服务器在公网,会有什么情况?
- 控制连接建立
客户端之后有防火墙,默认是有NAT的功能,NAT最多工作在4层, TCP以上的都不能识别了,防火墙可以把私网的源地址跟端口号转变成公网的,然后跟公网的服务器建立连接,所以控制连接建立没有问题。- 数据连接建立
2.1 主动模式:
通过Port消息发送给服务器的是私网的IP和端口,这个IP和端口没有做NAT映射,所以服务器无法连接内网客户端。但是在防火墙上开启NAT的ALG后nat alg ftp enable
,就可以识别Port消息的源地址和源端口号,会将该端口号添加到NAT映射表中,服务端主动连接客户端就可以成功建立数据连接
2. 2 被动模式:
被动模式不需要开启ALG,因为服务器是通过控制连接发送的服务器地址和数据端口,然后是客户端主动发起连接
如果FTP服务器在内网,客户端在公网,那么控制连接建立正常,主动模式数据连接也不会有问题(因为在服务器在防火墙之内主动发起连接)
但是被动模式数据连接会出现问题,因为客户端主动连接服务器的高位端口,这个端口没有在NAT映射表中(服务端没有通过此端口主动发起过连接,所以不再NAT映射表中),或者会被防火墙过滤掉
SNMP
- SNMP版本包括SNMPv1、SNMPv2c、SNMPv3
- SNMPv1和SNMPv2c
- 都是使用基于共同体名的认证,并且SNMP消息未采用加密传输
- SNMPv2c在SNMPv1的基础上增强的功能包括:支持更多的操作、支持更多的数据类型、提供更丰富的错误处理码和多种传输协议的支持
- SNMPv3
- 包含SNMPv1、SNMPv2所有功能在内的体系框架
- 增加包含验证服务和加密服务在内的全新安全机制,SNMPv3的安全性主要体现在数据安全和访问控制上。
SNMP管理模型
SNMP系统包括4部分:
- 网络管理系统NMS(华为网管软件Esight作为NMS对设备进行管理)
- 是一个采用SNMP协议对网络设备进行管理/监视的系统,运行在NMS服务器上
- 可向设备上的Agent发出请求,查询或修改一个或多个具体的参数值
- 也可以接收Agent主动发送的Trap信息,以获知被管理设备当前的状态
- 代理进程Agent
- 是被管理设备中的一个代理进程,用于维护被管理设备的信息数据并响应来自NMS的请求
- 接收到NMS的请求信息后,通过MIB表完成相应指令后,并把操作结果响应给NMS
- 当设备发生故障或者其它事件时,设备会通过Agent主动发送trap信息给NMS,向NMS报告设备当前的状态变化
- 管理信息库MIB
- 指明了被管理设备所维护的变量(即能够被Agent查询和设置的信息)的数据库。MIB在数据库中定义了被管理设备的一系列属性:对象的名称、对象的状态、对象的访问权限和对象的数据类型等
- 通过MIB,可以完成以下功能:
- Agent通过get消息查询MIB,可以获知设备当前的状态信息
- Agent通过set消息修改MIB,可以设置设备的状态参数
- 被管对象Management object
- 每一个设备可能包含多个被管理对象,被管理对象可以是设备中的某个硬件(如一块接口板),也可以是某些硬件、软件(如路由选择协议)及其的配置参数的集合
报文
Agent监听UDP端口161,NMS监听UDP端口162
- 版本:表示SNMP的版本,v1报文则对应字段值为0,v2c则为1
- 团体名:用于在Agent与NMS之间完成认证
团体名包括“可读”和“可写”两种,执行GetRequest、GetNextRequest操作时,采用“可读团体名”进行认证;执行Set操作时,则采用“可写团体名”认证
- SNMPv1/SNMPv2c PDU:包含PDU类型、请求标识符、变量绑定列表等信息
SNMPv1/SNMPv2c规定了7种操作类型,用来完成NMS和Agent之间的信息交换:
SNMPv1版本不支持GetBulk和Inform操作
- Get:用于查询一个或多个参数值
- GetNext:按照字典顺序提取下一个参数值
- Set:设置Agent的一个或多个参数值
- Response:GetRequest、GetNextRequest、SetRequest和GetBulkRequest四种操作的响应操作。Agent接收到来自NMS的Get/Set指令后,通过MIB完成相应的查询/修改操作,然后利用Response操作将信息回应给NMS
- Trap:当被管理设备达到告警的触发条件时,会通过Agent主动向NMS发送Trap消息,告知设备出现的异常情况
默认值,Trap报文的消息队列长度为100,Trap报文的生存时间为120秒
- GetBulk:NMS对被管理设备的信息群查询
- Inform:被管理设备主动向NMS主动发送告警,与Trap告警不同的是,被管理设备发送Inform告警后,需要NMS回复InformResponse来进行确认
工作原理
- NMS:向Agent发送Get、GetNext或Set请求报文时,报文中各字段的设置如下:
- 版本号为所使用的SNMP版本
- 团体名
- 当请求报文为Get和GetNext时为public
- 当请求报文为set时为private
- PDU:PDU类型为Get、GetNext或Set类型,绑定变量填入MIB节点名sysContact
- Agent:首先对报文中携带版本号和团体名进行认证,认证成功后
- 如果是get或getnext操作,Agent根据请求查询MIB中的sysContact节点,得到sysContact的值并将其封装到Response报文中的PDU,向NMS发送响应
- 如果是set操作,Agent根据请求设置管理变量在管理信息库MIB中对应的节点,设置成功后向
NMS发送响应
SNMPv2c新增的操作:
- GetBulk操作
基于GetNext实现,相当于连续执行多次GetNext操作,在NMS上可以设置被管理设备在一次GetBulk报文交互时,执行GetNext操作的次数 - Inform操作
Inform操作也是被管理设备向NMS主动发送告警,与trap告警不同的是,被管理设备发送Inform告警后,需要NMS进行接收确认原因1。如果被管设备没有收到确认信息则将告警暂时保存在Inform缓存中,然后重复发送原因2,直到NMS确认收到该告警或重传达到最大次数,并且被管设备上会生成相应的告警日志, 因此,使用Inform告警可能会占用较多的系统资源所以,现网中常用trap,很少用Inform
SNMPv3
报文
- 版本:SNMPv3对应字段值为2
- 报头数据:主要包含消息发送者所能支持的最大消息尺寸、消息采用的安全模式等描述内容
- 安全参数:包含SNMP实体引擎的相关信息、用户名、认证参数、加密参数等安全信息
v3的实现原理和v1/v2c基本一致,唯一的区别是v3增加了身份验证和加密处理
- 身份验证:身份验证是指Agent或NMS接到信息时首先必须确认信息是否来自有权限的NMS或Agent并且信息在传输过程中未被改变
- 加密:需要管理端和代理共享同一密钥来实现信息的加密和解密
SNMP各版本比较
SNMP主机无法与网管连接排错
- 检查主机和网管发送请求报文用的SNMP版本是否相同
display snmp-agent sys-info
- 检查主机配置的团体名
display snmp-agent commnity
- 对snmpv3来说,还要检查snmp用户组和用户信息配置
display snmp-agent group
VRRP(虚拟路由冗余协议)
基本概述
- 能够在不改变组网的情况下,将多台路由器虚拟成一个虚拟路由备份(热备),通过配置虚拟路由的IP地址为默认网关,实现网关的备份
- VRRPv2仅适应IPv4网络,VRRPv3适应IPv4和IPv6网络
- 只有一种报文,Advertisement报文将Master设备的优先级和状态通告给同一备份组的所有Backup设备,其源地址为发送报文接口的主IP地址(不是虚拟IP地址),目的IP地址时224.0.0.18,目的MAC地址是00-00-5e-00-01/02-xx,协议号为112,TTL是255,属于3层协议
- 术语:
- VRRP路由器:运行VRRP协议的设备,它可能属于一个或多个虚拟路由器,如RouterA和RouterB
- 虚拟路由器:即VRRP备份组,由一个Master设备和多个Backup设备组成,被当作一个共享局域网内主机的缺省网关。如RouterA和RouterB共同组成了一个虚拟路由器
- VRID:虚拟路由器的标识。如RouterA和RouterB组成的虚拟路由器的VRID为1
- 虚拟IP地址:虚拟路由器的IP地址,一个虚拟路由器可以有一个或多个IP地址,由用户配置。如RouterA和RouterB组成的虚拟路由器的虚拟IP地址为10.1.1.10/24
- IP地址拥有者:如果一个VRRP设备将虚拟路由器IP地址作为真实的接口地址,则该设备被称为IP地址拥有者。如果IP地址拥有者是可用的,通常它将成为Master。如RouterA,其接口的IP地址与虚拟路由器的IP地址相同,均为10.1.1.10/24,因此它是这个VRRP备份组的IP地址拥有者。
- 虚拟MAC地址:虚拟路由器根据虚拟路由器ID生成的MAC地址。一个虚拟路由器拥有一个虚拟MAC地址,格式为:00-00-5E-00-01-{VRID}(VRRP for IPv4);00-00-5E-00-02-{VRID}(VRRP for IPv6),
Master路由器和Backup设备的组ID必须相同,原因为主设备用虚拟MAC响应ARP请求【STP的根设备==VRRP的Master,即确保VRRP的主和MSTP的主桥为一个设备,否则会造成2层的次优转发】
,而不是接口的真实MAC地址。如RouterA和RouterB组成的虚拟路由器的VRID为1,因此这个VRRP备份组的MAC地址为00-00-5E-00-01-01 - 主IP地址:从接口的真实IP地址中选出来的一个主用IP地址,通常选择配置的第一个IP地址
- Master路由器承担转发报文;Backup设备只有在Master设备故障之后才变成Mater,承担转发任务
- 主设备(Master路由器)选取原则:优先级越大越优;优先级相同的情况下,先配置的设备会成为Master
协议报文
v2报文结构:
v3报文结构:
- Version:v2为2,v3为3
- Type:均为1,表示Advertisement报文
- VRID:虚拟路由器ID,取值范围是1~255
- Priority:Master设备在备份组中的优先级,取值范围是0~255
0表示设备停止参与VRRP备份组,用来使备份设备尽快成为Master设备,而不必等到计时器超时;255则保留给IP地址拥有者。缺省值是100
- Count IP Addrs/Count IPvX Addr:备份组中虚拟IPv4或虚拟IPv6地址的个数
- Auth Type:VRRP报文的认证类型
v2独有字段,是为了兼容早期版本,VRRP认证并不能提高安全性
- 0无认证
- 1明文认证
- 2MD5认证
- Adver Int/Max Adver Int:VRRP通告报文的发送时间间隔,v2的单位是秒默认值为1,v3的单位厘秒默认值为100
但是默认值都是1秒时间
- Checksum:校验和
- IP Address/IPvX Address(es):VRRP备份组的虚拟IPv4地址或者虚拟IPv6地址,所包含的地址数定义在Count IPvX Addrs字段
- Authentication Data:VRRP报文的认证字。
只有明文认证和MD5认证才用到该部分,对于其它认证方式,一律填0
- rsvd:保留字段,必须设置为0
VRRPv2和VRRPv3的主要区别
- 支持的网络类型不同:VRRPv3适用于IPv4和IPv6两种网络,而VRRPv2仅适用于IPv4网络
- 认证功能不同:VRRPv3不支持认证功能,而VRRPv2支持认证功能
- 发送通告报文的时间间隔的单位不同:VRRPv3支持的是厘秒级,而VRRPv2支持的是秒级,但默认间隔都是1秒
工作原理
状态机
- Initialize:
- 该状态为VRRP不可用状态,在此状态时设备不会对VRRP报文做任何处理
- 通常刚配置VRRP时或设备检测到故障时会进入Initialize状态
- 收到接口Up的消息后
- 如果设备的优先级为255,则直接成为Master设备
- 如果设备的优先级小于255,则会先切换至Backup状态
- Backup:
- 接收Master设备发送的VRRP通告报文,判断Master设备的状态是否正常
- 不响应对虚拟IP地址的ARP请求;不转发目的mac为虚拟mac的报文;丢弃目的IP地址为虚拟IP地址的IP报文
备份状态的唯一工作就是时刻监控者Master的状态是否正常,一旦不正常立马切换
- 收到Advertisement报文:
- 如果收到优先级和自己相同或者比自己大的报文,则重置Master_Down_Interval定时器,不进一步比较IP地址。
Master_Down_Interval定时器,Backup设备在该定时器超时后仍未收到通告报文,则会转换为Master状态,计算公式为Master_Down_Interval=(3* Advertisement_Interval) + Skew_time,其中偏移时间(也叫切换时间,是主备切换的时间,优先级越高,切换时间越小)Skew_Time=(256–Priority)/256
- 如果收到比自己优先级小的报文时,
本质是切换
该报文优先级是0,则定时器时间设置为Skew_time(偏移时间)本质是抢占或者选举
该报文优先级不是0,丢弃报文,立刻成为Master
- 如果收到优先级和自己相同或者比自己大的报文,则重置Master_Down_Interval定时器,不进一步比较IP地址。
- Master:
- 定时发送VRRP通告报文
用来维护自身Master的地位
- 周期性(120秒)发送免费ARP报文, 刷新下游设备的MAC地址表
使网络内各主机知道虚拟IP地址所对应的虚拟MAC地址
- 用虚拟mac来响应对虚拟IP的ARP请求;转发目的MAC为虚拟MAC的IP报文;如果它是这个虚拟IP地址的拥有者,则接收目的IP地址为虚拟IP地址的IP报文,否则,丢弃这个IP报文
即只有优先级为255时才会接收目的IP为虚拟IP的IP报文
- 收到Advertisement报文:
本质是抢占
如果收到比自己优先级大的报文,立即成为Backup本质是选举,此时会比较IP大小
如果收到与自己优先级相等的VRRP报文且对端接口IP大于本地接口IP地址,立即成为Backup
- 定时发送VRRP通告报文
工作过程
【重要声明】:优先级0和255是不可以手动设置的,只有虚拟IP和接口IP为同一个IP地址时,该设备的优先级会自动调为255。Master设备要退出该VRRP时,会发送优先级为0的VRRP通告报文
工作过程的两个重点:1.Master设备的选举;2. Master设备状态的通告
- VRRP备份组中的设备根据优先级选举出Master,
- Master设备通过发送免费ARP报文,将虚拟MAC地址通知给与它连接的设备或者主机,从而承担报文转发任务
- Master设备周期性向备份组内所有Backup设备发送VRRP通告报文,以公布其配置信息(优先级等)和工作状况
- 如果Master设备出现故障,VRRP备份组中的Backup设备将根据优先级重新选举新的Master
- VRRP备份组状态切换时,Master设备由一台设备切换为另外一台设备,新的Master设备会立即发送携带虚拟路由器的虚拟MAC地址和虚拟IP地址信息的免费ARP报文,刷新与它连接的主机或设备中的MAC表项,从而把用户流量引到新的Master设备上来,整个过程对用户完全透明
- 原Master设备故障恢复时
- 若该设备为IP地址拥有者(即优先级为255),将直接切换至Master状态
- 若该设备优先级小于255,将首先切换至Backup状态,且其优先级恢复为故障前配置的优先级
- Backup设备的优先级高于Master设备时,由Backup设备的工作方式(抢占方式和非抢占方式)决定是否重新选举Master
- 抢占模式(默认模式):Backup设备主动切换成Master
- 非抢占模式:Backup设备不做任何改变
重要功能1:Master设备的选举
优先级越高,则越有可能成为Master设备
- 刚创建的VRRP设备为Initialize状态,收到接口Up的消息后
- 如果优先级为255,则直接成为Master设备
- 如果设备的优先级小于255,则会先切换至Backup状态,待Master_Down_Interval定时器超时后再切换至Master状态
- 切换至Master状态的后通过VRRP通告报文的获取其他设备的优先级,进行Master的选举:
- 其他设备的优先级高于或等于自己的优先级,则切换回Backup状态
- 其他设备的优先级低于自己的优先级
- 抢占方式:保持Master状态
- 非抢占方式:切换回Backup状态
- 如果多个VRRP设备同时切换到Master状态
- 优先级最高的VRRP设备成为的Master设备,其他的切换成Backup状态
- 优先级相同时,VRRP设备上VRRP备份组所在接口主IP地址较大的成为Master设备
- 如果创建的VRRP设备为IP地址拥有者
即虚拟IP和接口IP为同一个IP
,收到接口Up的消息后,直接切换至Master状态
重要功能2:Master设备状态的通告
Master设备周期性地发送VRRP通告报文公布其配置信息(优先级等)和工作状况,Backup设备通过接收到VRRP报文的情况来判断Master设备是否工作正常
- 当Master设备主动放弃Master地位(如Master设备退出备份组)时,会发送优先级为0的通告报文,用来使Backup设备快速切换成Master设备,而不用等到Master_Down_Interval定时器超时
- 当Master设备发生网络故障而不能发送通告报文的时候,Backup设备并不能立即知道其工作状况,等到Master_Down_Interval定时器超时后,才会认为Master设备无法正常工作,从而将状态切换为Master
多网关负载分担
多个VRRP备份组同时承担业务,负载分担需要建立多个VRRP备份组,各备份组的Master设备不同;同一台VRRP设备可以加入多个备份组,在不同的备份组中具有不同的优先级
VRRP备份组1:RouterA为Master设备,RouterB为Backup设备
VRRP备份组2:RouterB为Master设备,RouterA为Backup设备
一部分用户将VRRP备份组1作为网关,另一部分用户将VRRP备份组2作为网关,这样既可实现对业务流量的负载分担,同时,也起到了相互备份的作用
监控上行链路的方法
【本质】:检测到故障后降低Master优先级,通知备份组重新选举Master;故障恢复后,回复原Master设备的优先级,如果支持抢占则重新选举Master
1. VRRP与接口状态联动实现VRRP主备切换
直接用track命令联动上行链路,上行链路出现问题时优先级降低,恢复时优先级增高
2. VRRP与路由联动监视上行链路(快慢依赖于路由协议)
使用VRRP监控设备上行转发路径路由条目,当上行转发路由条目撤销或是变为非活跃状态,通知VRRP备份组降低Master设备优先级,触发主备切换。
上行链路故障恢复时,原Master设备在备份组中的优先级将恢复原来的值,重新抢占成为Master,继续承担流量转发的业务。
联动路由时的链路切换时间依赖于VRRP所联动路由协议的收敛速度
3. VRRP与BFD联动监视上行链路(最快)
首先在链路上创建一个BFD会话,然后用track与BFD会话绑定即可
通过在Master设备上配置VRRP与BFD联动,使用BFD会话检测Master设备上行链路状态,当BFD检测到上行链路故障时,及时通知VRRP备份组降低Master设备优先级,触发主备切换。
上行链路故障恢复时,原Master设备在备份组中的优先级将恢复原来的值,重新抢占成为Master,继续承担流量转发的业务。
BFD可以实现毫秒级的故障检测,联动BFD可以快速地检测故障,从而使主备切换速度更快。
4. VRRP与NQA联动监视上行链路(依赖与ping的速度)
首先在链路上创建一个类型为ICMP的NQA,然后用track与该NQA绑定即可,其作用相当于去ping对端地址,ping不通时通知VRRP
通过在Master设备上配置VRRP联动NQA,使用NQA测试例检测设备上行链路状态,当NQA检测到上行链路故障时,通知VRRP备份组降低Master设备优先级,触发主备切换。
上行链路故障恢复时,原Master设备在备份组中的优先级将恢复原来的值,重新抢占成为Master,继续承担流量转发的业务。
心跳线
- 当使用三层交换机做VRRP时,为防止链路VRRP协议报文所经过的链路不通或不稳定和来回路径不一致,可以在SwitchA和SwitchB之间部署一条心跳线,该心跳线属于二层链路,且允许相关VlanIF接口报文通过
- 为防止环路还需部署STP这样的二层破环协议,且保证Master设备为STP协议中的根桥
VRRP和Eth-trunk的区别
vrrp主要是备份;eth-trunk主要是负载
- vrrp利用率低。两条上联线路正常的话只用一条,而eth-trunk两条都跑流量
- vrrp需要配合STP,所以需要一定的收敛时间
- 做eth-trunk一般核心交换机都采用集群方式,相当于一台设备,所以配置管理方便,并且两台核心交换机之间的互联带宽更高,主备交换机切换时间很短
- 使用场景区分:有二台核心,要和接入做双机热备,但不支持堆叠或集群,这时候只能用VRRP+STP了,不是用Eth-Trunk。如果核心支持堆叠或集群的话,这时候核心和接入就做Eth-Trunk了,而不用VRRP了,因为核心堆叠后就成一台设备了,二台设备之间的双链路,肯定用Eth-Trunk更好。
BFD(双向转发检测)
作用
用于快速检测设备之间的通信故障,并在出现故障时通知上层应用
现有检测机制:
- 通过硬件检测信号,如SDH告警,检测链路硬件故障,优点是快速检测故障
- 如果无法通过硬件信号检测故障,通常采用路由协议的Hello报文机制
以上检测机制存在的问题:
- 并不是所有的介质都能够提供硬件检测
- 路由协议的Hello报文机制检测到故障所需时间比较长,超过1秒钟,当数据达到吉比特速率级时,会造成大量数据丢失
- 在三层网络中,Hello报文检测机制无法针对所有路由协议来检测故障,如:静态路由
BFD用于检测设备之间的通信故障,BFD对系统间的、同一路径上的一种数据协议的连通性进行检测,这条路径可以是物理链路或逻辑链路,包括隧道,可以把BFD看作是系统提供的一种服务:
- 上层应用向BFD提供检测地址、检测时间等参数
- BFD根据这些信息创建、删除或修改BFD会话,并把会话状态通告给上层应用
BFD提供如下功能:
- 对相邻设备之间的通道提供轻负荷、快速故障检测,这些故障包括接口故障、数据链路故障、设备本身故障等
- 提供一个单一的机制,能够用来对任何媒介、任何协议层进行实时地检测
原理
BFD本身并没有邻居发现机制,而是靠被服务的上层应用通知其邻居信息以建立会话。会话建立后会周期性地快速发送BFD报文,如果在检测时间内没有收到BFD报文则认为该双向转发路径发生了故障,通知被服务的上层应用进行相应的处理
检测机制
异步模式:BFD的主要操作模式为异步模式,系统之间相互周期性地发送BFD控制报文,如果某个系统连续几个报文都没有接收到,就认为此BFD会话的状态是Down
检测的链路类型
报文
- vers:版本,值为1
- Diag:诊断字,标明本地BFD系统最近一次会话状态发生变化的原因
- 0无诊断信息
- 1检测时间超时
- 2Echo功能失效
- 4转发面复位
- 3、5、6、7、8表示邻居会话、路径、级联路径、Admin、反向级联路径Down
- 9-31预留
- Sta:本地状态
- 0管理状态Down
- 1运行状态Down
- 2初始状态
- 3正常UP状态
- P\F\C\A\D\M:参数改变后是否需要邻居确认/是否发送响应P标志置位的回应报文/转发和控制分离标志/认证标识/查询请求/为BFD将来支持点对多点扩展而设的预留位
- Detect Mult:检测超时倍数,用于检测方计算检测超时时间
会话建立方式
静态和动态创建BFD会话的主要区别在于本地标识符和远端标识符的配置方式不同,静态的需要手动指定,而动态则自己产生
- 静态建立BFD会话
- 静态手工指定标识符:通过命令行手工配置BFD会话参数,包括配置本地标识符和远端标识符等,然后手工下发BFD会话建立请求,配置步骤:
- 启用BFD
- 建立BFD会话的名称及源目IP
- 创建本地标识符和远端标识符
- 静态自协商标识符:手工创建BFD会话,但不需要配置本地标识符和远端标识符,本地标识符和远端标识符通过会话协商获得
- 静态手工指定标识符:通过命令行手工配置BFD会话参数,包括配置本地标识符和远端标识符等,然后手工下发BFD会话建立请求,配置步骤:
- 动态建立BFD会话
动态BFD具有较高的灵活性,适用于全网都对可靠性要求较高的网络
动态BFD会话是指由路由协议动态触发BFD会话建立。动态BFD中,本地标识符是动态分配的,远端标识符从对端的BFD报文中获取- 动态分配本地标识符:当应用程序触发动态创建BFD会话时,系统分配属于动态会话标识符区域的值作为BFD会话的本地标识符
- 自学习远端标识符:当BFD会话的一端收到远端标识符为0的BFD控制报文时,根据四元组(源地址、目的地址、出接口、VPN索引)判断该报文是否与本地BFD会话匹配,如果匹配,则学习接收到的BFD报文中本地标识符的值,即获取远端标识符,配置步骤:
- 启用BFD
- 建立BFD会话的名称及源目IP即可,不用创建标识符
会话管理
BFD会话有四种状态:会话状态变化通过BFD报文的State字段传递
- AdminDown:会话处于管理性Down状态
0
- Down:会话处于Down状态或刚刚创建
1
- Init:已经能够与对端系统通信,本端希望使会话进入Up状态
2
- Up:会话已经建立成功
3
BFD状态机的建立和拆除都采用三次握手机制,以确保两端系统都能知道状态的变化
- DeviceA和DeviceB各自启动BFD状态机,初始状态为Down,发送状态为Down的BFD报文。对于静态配置BFD会话,报文中的远端标识符是用户指定的;对于动态创建BFD会话,远端标识符的值是0
- DeviceB收到状态为Down的BFD报文后,状态切换至Init,并发送状态为Init的BFD报文
DeviceB本地BFD状态为Init后,不再处理接收到的状态为Down的报文
;DeviceA的BFD状态变化同DeviceB,并且向DeviceB发送状态为Init的报文 - DeviceB收到状态为Init的BFD报文后,本地状态切换至Up;DeviceA的BFD状态变化同DeviceB。
联动功能
联动功能由检测模块、Track和应用模块三部分组成:
- 监测模块:负责对链路状态、网络性能等进行监测,并将探测结果通知给Track模块
- Track模块:收到监测模块的探测结果后,及时改变Track项的状态,并通知应用模块
- 应用模块:根据Track项的状态,进行相应的处理
1. 与静态路由的联动
先创建BFD会话,然后在写静态路由时与创建的BFD会话名称绑定即可,如果会话出现问题,静态路由则不再加IP路由表
在静态路由与BFD联动应用中,如果对端设备不支持静态BFD会话,而采用动态BFD会话,此时本端设备既要与之互通,又要能够实现静态路由与BFD联动时,必须使用静态自协商标识符的BFD会话建立方式
2. 与IGP(ospf、isis、rip)的联动
使用动态建立BFD会话
直接在IGP进程下启用BFD会话即可,邻居出现问题立马收敛
3. 与BGP的联动
使用动态建立BFD会话
在BGP进程下指定peer时绑定BFD会话,邻居出现问题立马收敛
4. 与VRRP的联动
先创建BFD会话,然后在创建VRRP时与创建的BFD会话名称绑定即可,如果会话出现问题,则会更改优先级
5. BFD的单臂回声功能(BFD Echo)
一台设备支持BFD功能,另一台设备不支持BFD功能,只支持基本的网络层转发的情况下使用
在支持BFD功能的设备上创建单臂回声功能的BFD会话,发送特殊报文,不支持BFD功能的设备接收到该报文后直接将其环回到支持BFD的设备上,从而实现转发链路的连通性检测功能特殊报文:IP头中的源、目IP都是本端设备的IP地址,BFD协议报文中的本地和远端标识符相同
BFD Echo包括被动Echo和单臂Echo,两种功能检测机制一样且只适用于单跳IP链路,但是适用的场景不同
- 被动Echo功能:两台设备直连,且已经建立了异步模式的BFD会话,其中一台设备上使能主动Echo功能,另一台设备上使能被动Echo功能后,两台设备会进入异步Echo模式,分别向对端发送BFD报文
- 单臂Echo功能:两台设备直连,其中一台设备支持BFD功能,另一台设备不支持BFD功能,在支持BFD功能的设备上创建单臂Echo功能的BFD会话,当不支持BFD功能的设备接收到该BFD报文后,直接将该报文环回,从而达到快速检测链路的目的
NQA(网络质量分析)
概述
通过发送测试报文,对网络性能、网络提供的服务及服务质量进行分析,并为用户提供网络性能和服务质量的
参数,如时延抖动、TCP连接时延、FTP连接时延和文件传输速率等。利用NQA的测试结果,用户可以:
- 及时了解网络的性能状况,针对不同的网络性能,进行相应处理
- 对网络故障进行诊断和定位
特点
- 获取丰富的网络质量或性能数据
可获取端到端连通性和路径信息、链路性能(包括时延、抖动、丢包率)和网络服务响应时间等 - 支持多种测试类型
- Ping:检测网络的连通性,例如ICMP测试
- Tracert:获取网络的路径信息,例如Trace测试
- Jitter:测量网络的性能,例如ICMP Jitter测试、UDP Jitter测试
- 网络服务性能:检测网络中各类服务的性能,例如TCP测试、DNS测试
- 支持灵活的调度机制
- 启动方式:立即启动、指定时间启动、延时启动、每日定时启动
- 结束方式:指定结束时间、延时结束、指定运行时间
- 支持联动功能
- 联动功能是指通过建立联动项,对当前所在测试组中的探测进行监测,当连续探测失败次数达到一定数目时,就触发其他模块联动
- 由应用模块、Track模块和监测功能模块三部分组成,Track模块位于应用模块和监测功能模块之间,主要功能是屏蔽不同监测功能模块的差异,为应用模块提供统一的接口
- 当监测项的状态发生变化时,监测功能模块通知Track模块,再由Track模块通知应用模块进行相应的处理
基本概念
NQA客户端是发起NQA测试的设备,NQA测试组在客户端创建。
NQA的基本测试方式为客户端向对端发送不同类型的测试报文,根据对端是否回应报文以及报文的往返时间等参数,来判断协议的可用性和网络的性能
在大多数的测试中,只需要配置NQA客户端对于TCP、UDP Jitter测试,还需要在对端设备上配置NQA服务器
,启动NQA测试后,每隔一段时间启动一次测试,测试的时间间隔可以由用户来设定。一次NQA测试由一次或多次连续的探测组成,探测的次数可以由用户来设定
测试原理
- 客户端发送请求报文时,将当前系统时间t1作为测试报文的发送时间,向请求报文中打入时间戳,然后再发送给服务器端
- 服务器端接收请求报文后,向客户端发送对应地响应报文
- 客户端在接收到响应报文后,会再次读取系统的时间t2,向响应报文中打入时间戳
- 根据请求报文发送时间t1与响应报文接收时间t2的时间差,就可以得出报文的往返时间,也即时延
对于Jitter类测试,不仅NQA客户端需要在发送和接收报文时打时间戳,NQA服务器端在接收和发送报文时,也要读取自己的本地系统时间,打上时间戳。通过每次往返时间的差别,就能够计算出抖动时间
测试操作
在NQA客户端上进行如下操作:
- 使能NQA客户端功能
- 创建测试组,根据测试类型进行相应测试参数的配置
- 通过启动测试命令执行NQA测试
- 通过显示命令或调试命令查看测试结果
测试类型
1. ICMP测试
用于检测源端到目的端的路由是否可达,与Ping操作类似,但输出信息更为丰富,默认情况下能够保存最近5次的测试结果,结果能够显示IP网络的连通性、丢包率、平均时延、最后一个报文正确接收的时间等
ICMP测试的过程如下:
- 源端向目的端发送构造的ICMP Echo Request报文
- 目的端收到报文后,直接回应ICMP Echo Reply报文给源端
2. Trace测试
与Tracert操作类似,通过检测网络路径上的每一跳,检测网络的连通性和报文的转发路径
3. TCP测试
通过模拟TCP请求与目的端建立TCP连接,检测源端与目的端建立TCP连接的速度
4. DNS测试
DNS测试以UDP报文为承载,通过模拟DNS Client向指定的DNS服务器发送域名解析请求,根据域名解析是否成功及域名解析需要的时间,来判断DNS服务器是否可用以及域名解析速度
5. ICMP/UDP Jitter测试
通过发送一系列ICMP/UDP报文,统计端到端时延的差值,得出网络传输数据的稳定性
6. FTP测试
FTP测试以TCP报文为承载,用于检测是否可以与指定的FTP服务器建立连接,可以检测FTP服务器下载指定文件或向FTP服务器上载指定文件的速度,以及FTP控制链接和数据链接两个阶段的响应速度
7. HTTP测试
HTTP测试主要是测试客户端是否可以与指定的HTTP服务器建立连接,从而判断该设备是否提供了HTTP服务以及建立连接的时间
HTTP测试提供三个阶段的响应速度:
- DNS解析时间:客户端发送DNS报文给DNS服务器,DNS服务器将HTTP服务器域名解析为IP地址,DNS 解析报文返回到客户端所花费的总时间
- TCP建立连接时间:客户端与HTTP服务器通过TCP三次握手建立连接所用的时间
- 交易时间:客户端发送Get或Post报文给HTTP服务器,响应报文到达客户端的时间
8. DHCP测试
DHCP测试用于检测DHCP客户端与DHCP服务器之间建立连接的时间以及DHCP客户端获得地址的时间
9. SNMP测试
SNMP测试用于检测主机与SNMP Agent之间通信的速度,以UDP报文为承载。
SNMP测试的过程如下:
- 源端向SNMP Agent发送要求获取系统时间的请求报文
- SNMP Agent收到报文,查询系统时间并构造回应报文,然后再把这个数据包发回到源端
- 源端收到数据包后通过计算源端接收报文的时间和源端发送报文的时间的差,计算出源端与SNMP Agent之间通信的时间,从而清晰的反映出网络SNMP协议的性能状况
BFD与NQA的区别
BFD用于检查链路的故障,可与各协议进行联合使用,从而达到网络的快速收敛。
NQA主要用于检查上层协议的服务是否可用,可与各种协议联动,当然它也可以通过与ICMP协议的联动,从而检测链路是否可用,这个方式比BFD慢
URPF(单播逆向路径转发)
主要功能是防止基于源IP地址欺骗的网络攻击行为
原理
拒绝服务DoS攻击是一种阻止连接服务的网络攻击,就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。
URPF在FIB表中查找数据包的IP源地址是否与数据包的源接口相匹配,如果没有匹配表项将丢弃该数据包,从而预防IP欺骗,特别是针对伪造IP源地址的DoS攻击非常有效。
在DeviceA上伪造源地址为2.1.1.1的报文向DeviceB发起请求,DeviceB响应请求时将向真正的2.1.1.1,即DeviceC发送报文。这种非法报文对DeviceB和DeviceC都造成了攻击,如果在DeviceB上启用URPF严格检查,则DeviceB在收到源地址为2.1.1.1的报文时,URPF检查到以此报文源地址对应的接口与收到该报文的接口不匹配,报文会被丢弃
工作模式
出现两种工作模式的原因:路由不对称的情况下,即对端设备记录的路由路径不一样,此时使能URPF的设备可能丢弃合法报文
- 严格模式
设备不仅要求报文源地址在FIB表中存在相应表项,还要求接口匹配才能通过URPF检查,适合用在路由对称的环境下 - 松散模式
设备不检查接口是否匹配,只要FIB表中存在该报文源地址的路由,报文就可以通过,适合用在不能保证路由对称的环境下
应用场景
1. 严格模式下的URPF应用
- AS1、AS2与AS3之间为单连接。在RouterC的Interface1接口和Interface2接口上配置URPF,可以保护AS3免受来自AS1和AS2的源地址欺骗攻击。
- 如果AS1中的主机PCA伪造了一个源地址为2.2.2.2的报文,向AS3中的Server发送请求。RouterC在接收到这个报文后,检查其入接口是否匹配,发现源地址为2.2.2.2的报文应该从Interface2进入,则RouterC认为该报文源地址是伪造的,直接丢弃该报文。
- 从AS2发向Server的正常报文,检查通过后,被正常的转发
2. 松散模式下的URPF应用
- 单宿主单ISP客户
为了保证可靠性,某公司网络和某个ISP之间有两条连接,这时就不能够保证公司和ISP之间路由的对称性,必须使用URPF松散模式 - 多宿主多ISP客户
公司与多个ISP连接,很难保证公司和两个ISP之间路由的对称性,必须使用URPF松散模式
客户与多个ISP连接下的URPF可以具有以下应用:- 如果用户希望某些特殊报文任何情况都可以通过URPF的检查,可以在利用ACL指定这些特殊的源地址允许通过
- 许多用户连接的设备可能只有一条缺省路由指向ISP,需要配置允许匹配缺省路由选项
NAT(网络地址转换)
NAT是将IP数据报文头中的IP地址转换为另一个IP地址的过程,主要用于实现内部网络(私有IP地址)访问外部网络(公有IP地址)的功能。Basic NAT是实现一对一的IP地址转换,而NAPT可以实现多个私有IP地址映射到同一个公有IP地址上。
NAT技术可以解决以下问题:
- IP地址短缺
Basic NAT不能解决此问题,只有NAPT才能解决此问题,因此Basic NAT不常用
- 避免来自外网的攻击
- 控制内网主机访问外网,同时也可以控制外网主机访问内网,解决了内网和外网不能互通的问题
分类
1. Basic NAT(不常用)
一对一的地址转换,只转换IP地址,而不处理TCP/UDP协议的端口号,一个公网IP地址不能同时被多个私网用户使用
- Router收到Host发送的访问Server的报文,其源IP地址为10.1.1.100
- Router从地址池中选取一个空闲的公网IP地址,建立与内网侧报文源IP地址间的NAT转换表项(正反向),并依据查找正向NAT表项的结果将报文转换后向公网侧发送,其源IP地址是1.1.1.1,目的IP地址是2.2.2.2
- Router收到公网侧的回应报文后,根据其目的IP地址查找反向NAT表项,并依据查表结果将报文转换后向私网侧发送,其源IP地址是2.2.2.2,目的IP地址是10.1.1.100
2. NAPT
并发的地址转换,多个内部地址映射到同一个公有地址上,通过使用“IP地址+端口号”的形式进行转换,使多个私网用户可共用一个公网IP地址访问外网
- Router收到内网侧Host发送的访问公网侧Server的报文。比如收到HostA报文的源地址是10.1.1.100,端口号1025
- Router从地址池中选取一对空闲的“公网IP地址+端口号”,建立与内网侧报文“源IP地址+源端口号”间的NAPT转换表项(正反向),并依据查找正向NAPT表项的结果将报文转换后向公网侧发送。比如HostA的报文经Router转换后的报文源地址为1.1.1.1,端口号16384
- Router收到公网侧的回应报文后,根据其“目的IP地址+目的端口号”查找反向NAPT表项,并依据查表结果将报文转换后向私网侧发送。比如Server回应Host A的报文经Router转换后,目的地址为10.1.1.100,端口号1025
3. NAT-PT
- 静态映射的NAT-PT机制
- 动态映射的NAT-PT机制:需要建立地址池
- NAT-PT机制:不同的IPv6地址转换时,可以对应同一个IPv4地址,通过端口号来区分不同的IPv6主机,从而使多个IPv6主机能够共享一个IPv4地址完成转换
实现方式
NAT实现主要包括:Easy IP、地址池NAT和EasyIP类似,只介绍EasyIP、NAT Server 和静态 NAT/NAPT
1. Easy IP
内网访问外网,原理跟NAPT相同
Easy IP可以利用访问控制列表来控制哪些内部地址可以进行地址转换,适合小型局域网访问Internet的情况,即内部主机较少、出接口通过拨号方式获得临时公网IP地址以供内部主机访问Internet
2. NAT Server
外网访问内网,提前配置地址和端口的映射
NAT具有“屏蔽”内部主机的作用,但有时内网需要向外网提供服务,比如提供WWW服务或者FTP服务。这种情况下需要内网的服务器不被“屏蔽”,外网用户可以随时访问内网服务器。
当外网用户访问内网服务器时,它通过事先配置好的“公网IP地址+端口号”与“私网IP地址+端口号”间的映射关系,将服务器的“公网IP地址+端口号”根据映射关系替换成对应的“私网IP地址+端口号”
3. 静态NAT/NAPT
- 静态NAT是指在进行NAT转换时,私网IP同公网IP是一对一静态绑定的,静态NAT中的公网IP只会给唯一且固定的内网主机转换使用
- 静态NAPT是指“私网IP+协议号+端口号”同“公网IP+协议号+端口号”是一对一静态绑定的,静态NAPT中的公网IP可以为多个私网IP使用
- 静态NAT/NAPT还支持将指定私网范围内的主机IP转换为指定的公网范围内的主机IP,实现私网和公网的双向访问
NAT ALG
NAT和NAPT只能对IP报文的头部地址和TCP/UDP头部的端口信息进行转换
对于一些特殊协议,例如FTP,报文的数据部分可能包含IP地址信息或者端口信息,这些内容不能被NAT转换,解决这些特殊协议的NAT转换的方法就是在NAT实现中使用应用层网关ALG功能
ALG是对特定的应用层协议进行转换,在对这些特定的应用层协议进行NAT转换过程中,通过NAT的状态信息来改变封装在IP报文数据部分中的特定数据,最终使应用层协议可以跨越不同范围运行
目前支持ALG功能的协议包括:DNS、FTP、SIP、PPTP和RTSP
其他内容
1. DNS Mapping
私网用户希望通过域名访问位于同一私网的内部服务器,而DNS服务器却位于公网。由于通常DNS响应报文中携带的是内部服务器的公网IP地址,因此若NAT设备未将DNS Server解析的公网IP替换成内部服务器对应的私网IP,私网用户将无法通过域名访问到内部服务器。
这个问题可以使用DNS Mapping方式来解决,通过配置域名—公网IP地址—公网端口—协议类型
映射表,建立内部服务器的域名与其公网信息间的对应关系。
2. NAT关联VPN
NAT允许内部网络中分属于不同VPN的用户通过同一个出口访问外部网络,解决内部网络中IP地址重叠的VPN同时访问外网主机的问题;NAT还支持VPN关联的NAT Server,允许外部网络中的主机访问内网中分属不同VPN的服务器,同时支持内网多个VPN地址重叠的场景
- VPN关联的源NAT
内网访问外网
- VPN关联的NAT Server
外网访问内网
3. 两次NAT
指源IP和目的IP同时转换,该技术应用于内部网络主机地址与外部网络上主机地址重叠的情况
- A要访问B,A向位于外部网络的DNS服务器发送访问B的DNS请求,DNS服务器应答B的IP地址为1.1.1.1,DNS应答报文在经过Router时,进行DNS ALG,Router将DNS应答报文中的重叠地址1.1.1.1转换为唯一的临时地址3.3.3.1,然后再转发给A
- A访问B,目的IP为临时地址3.3.3.1,报文在经过Router时Router检查到源IP是重叠地址,进行目的地址转换,将目的地址3.3.3.1转换成B的真实地址1.1.1.1,同时进行正常的NAT Outbound转换,将源地址1.1.1.1转换为源NAT地址池中地址3.3.3.2,然后Router将报文转发到B
- B回应A,目的IP为A的NAT Outbound地址池地址3.3.3.2,源IP为B的地址1.1.1.1,报文在经过Router时,Router检查到源IP是重叠地址,将报文的源地址1.1.1.1转换为对应的临时地址3.3.3.1,同时进行正常的目的地址转换,将报文的目的地址3.3.3.2转换为A的内网地址1.1.1.1,Router将报文转发到A
NTP
NTP的实现基于IP和UDP,NTP报文通过UDP传输,端口号是123。
NTP主要应用于网络中所有设备时钟需要保持一致的场合,比如网络管理(日志采集等)、计费系统、多个系统协同处理同一个复杂事件、备份服务器和客户机之间进行增量备份、用户登录时间记录等
演进
- v1首次提出完整的NTP规则和算法,但不支持认证和控制消息
- v2加入认证和控制消息
- v3引入校正原则,改进了时钟选择和时钟过滤算法
目前使用最广泛的版本
- v4同时支持IPv4和IPv6网络,提供了一套完整的加密认证体系
基本原理
- RouterA发送一个NTP报文给RouterB,该报文中带有它离开RouterA时的时间戳10:00:00a.m.(T1)
- 此NTP报文到达RouterB时,RouterB加上到达时间戳11:00:01a.m.(T2)
- 此NTP报文离开RouterB时,RouterB再加上离开时间戳11:00:02a.m.(T3)
- RouterA接收到该响应报文时,加上新的时间戳10:00:03a.m.(T4)。至此,RouterA获得了足够信息来计算以下两个重要参数:
- NTP报文来回一个周期的时延:Delay=(T4-T1)-(T3–T2)=2秒
- RouterA相对RouterB的时间差:Offset=((T2-T1)+(T3–T4))/2=1小时
- RouterA根据计算得到Delay为2秒,Offset为1小时。RouterA根据这些信息来设定自己的时钟,实现与RouterB的时钟同步
网络架构
- 同步子网:由主时间服务器、二级时间服务器、PC客户端和它们之间互连的传输路径组成同步子网
- 主时间服务器:通过线缆或无线电直接同步到标准参考时钟,标准参考时钟通常是Radio Clock或卫星定位系统等
- 二级时间服务器:通过网络中的主时间服务器或者其他二级服务器取得同步。二级时间服务器通过NTP将时间信息传送到局域网内部的其它主机
- 层数(stratum):层数是对时钟同步情况的一个分级标准,代表了一个时钟的精确度,取值范围1~15,数值越小,精确度越高。1表示时钟精确度最高,15表示未同步
这样设计网络架构的目的:
- 当一台或多台主/二级时间服务器或它们之间的网络路径发生故障时,同步子网的主从分层结构将自动发生重构以获得最精确和最可靠的时间
- 当同步子网中正常使用的主时间服务器都失效,备用的主时间服务器将继续运行
- 当子网中所有的主时间服务器都失效时,其它二级时间服务器将在它们内部达到同步。此时,这些二级时间服务器将脱离同步子网,自动运行在它们最后一次确定的时间和频率。
NTP的工作模式
工作模式选择:
- 在不能确定服务器或者对等体IP地址、网络中需要同步的设备数量很多的情况下,可以通过广播或组播的方式实现时钟同步
- 单播和对等体模式中,设备从指定的服务器或者对等体获得时间同步,增加了时钟的可靠性
- 多播模式和组播模式的区别:客户端发现服务端的方式不同,组播模式是NTP服务器通过组播默认组224.0.0.1发现客户端
即服务器发现客户端
;多播模式是客户端通过组播默认组224.0.1.1发现NTP服务器即客户端发现服务器
- 广播和组播模式下,会通过一次单播模式来确定网络延时
NTP报文中Mode字段,即工作模式,不同值表示的含义如下:
- 0:保留
- 1:主动对等体模式
仅在对等体模式中使用
- 2:被动对等体模式
仅在对等体模式中使用
- 3:客户端模式
- 4:服务器模式
- 5:广播模式(或组播模式)
- 6:NTP控制报文
- 7:内部使用预留
1. 单播服务器/客户端模式
客户端同步服务器时钟
运行在同步子网中层数较高层上,需要预先知道服务器的IP地址
- 客户端定期向服务器端发送Mode3报文
客户端不管服务器端是否可达及服务器端的层数
- 服务器端接收并回应Mode4报文
- 当客户端接收到应答报文时,客户端会进行时钟过滤和选择,并同步到时钟优选的服务器
2. 对等体模式
主动对等体和被动对等体可以互相同步,等级低(层数大)的对等体向等级高(层数小)的对等体同步
运行在同步子网中层数较低处
- 主动对等体发起Mode3报文,由被动对等体响应Mode4报文
这一步的目的是选择主动和被动对等体
- 主动对等体定期向被动对等体发送Mode=1报文
不考虑对端的对等体是否可达以及对等体的层数
- 被动对等体接收并回应Mode=2报文
被动对等体不需配置,只有当本机收到NTP报文时才建立连接及相关的状态变量
- 对等体模式建立后,主动对等体和被动对等体可以互相同步,等级低(层数大)的对等体向等级高(层数小)的对等体同步
3. 广播模式
服务器周期性向广播地址发送时钟同步报文
应用在有多台工作站、不需要很高准确度的高速网络,典型的情况是网络中的一台或多台时间服务器定期向工作站发送广播报文,广播报文在毫秒级的延迟基础上确定时间
- 广播服务器周期性向广播地址255.255.255.255发送Mode5的时钟同步报文
不管客户端是否可达或层数为多少
- 客户端侦听来自服务器的广播消息包。当接收到第一个广播消息包后,为估计网络延迟,客户端先启用一个短暂的服务器/客户端模式与远程服务器交换消息(Mode3和Mode4消息)
- 客户端进入广播模式,继续侦听广播消息包的到来,根据到来的广播消息包同步本地时钟
4. 组播模式工作方式和广播模式相同
服务器端周期性向组播地址发送时钟同步报文
适用于有大量客户端分布在网络中的情况,通过在网络中使用NTP组播模式,NTP服务器发送的组播消息包可以到达网络中所有的客户端,从而降低由于NTP报文过多而给网络造成的压力
- 组播服务器周期性向IPv4/IPv6组播地址发送Mode5时钟同步报文
- 客户端侦听来自服务器的组播消息包。当接收到第一个组播消息包后,为估计网络延迟,客户端先启用一个短暂的服务器/客户端模式与远程服务器交换消息
- 客户端进入组播模式,继续侦听组播消息包的到来,根据到来的组播消息包同步本地时钟
5. 多播模式
多播服务器持续侦听报文,多播客户端周期性地向组播地址发送请求报文,寻找最小连接最小数的服务器
适用于服务器分布分散的网络中,客户端可以发现与之最近的多播服务器,并进行同步,多播模式适用于服务器不稳定的组网环境中,少量服务器的失效不会导致整网中的客户端重新配置。
- 多播客户端周期性向IPv4/IPv6组播地址发送Mode3请求报文,寻找TTL最小的多播服务器
- 客户端发送报文的TTL初始值为1,每次发送时累加1,直到客户端收到应答报文或TTL达到上限
- 如果客户端收到应答报文,表明已找到距离最短的多播服务器,则每过一个超时周期,客户端都会发送一个报文给服务器以保持连接
- 如果TTL达到上限时仍未收到应答报文,则客户端将停止一个超时周期的数据传输以清除所有连接,然后重复上述过程
- 多播服务器持续侦听报文,如果某个服务器可以被同步,则服务器将使用客户端的单播地址返回Mode4报文
- 当客户端接收到应答报文时,客户端会进行时钟过滤和选择,并同步到时钟优选的服务器
Netstream
系统组成
- 网络流数据输出器NDE
负责对网络流进行分析处理,提取符合条件的流进行统计,并将统计信息输出给NSC - 网络流数据收集器NSC
运行于Unix或者Windows上的一个应用程序,负责解析来自NDE的报文,把统计数据收集到数据库中,可供NDA进行解析,NSC可以采集多个NDE设备输出的数据,对数据进行进一步的过滤和聚合 - 网络流数据分析器NDA
在实际的应用中,NSC和NDA一般集成在一台NetStream服务器上
一个网络流量分析工具,它从NSC中提取统计数据,进行进一步的加工处理后生成报表,为各种业务提供依据(比如流量计费、网络规划、攻击监测)。通常,NDA具有图形化用户界面,使用户可以方便地获取、显示和分析收集到的数据
工作机制
NDE把采集到的关于流的详细信息定期发送给NSC,由NSC初步处理后发送给NDA,NDA对数据进行分析,以用于计费、网络规划等应用
配置了NetStream功能的设备(即 NDE)业务流量正常转发,但是设备的NetStream模块按一定的采样方式进行NetStream采样,接下来对采样数据建立NetStream流,接着按一定的老化方式对流进行NetStream流老化处理,最后按一定的输出方式以及相应的版本进行NetStream流输出。至此,NDE设备把采集到的关于流的详细信息发送给NSC
1. NetStream采样
- 随机报文间隔采样
适用于有规律的流量
:报文在配置数目间隔内被随机采样。例如配置间隔数为100,则每100个报文随机采样1个报文 - 固定报文间隔采样
适用于网络流量统计计费
:报文在配置数目间隔内被周期采样。例如配置间隔为100,第5个报文被采样,那么第一次采样是第5个报文,第二次采样是第105个报文 - 随机时间间隔采样
适用于有规律的流量
:报文在配置时间间隔内被随机采样。例如配置时间间隔为100,则每隔100毫秒采集1个报文 - 固定时间间隔采样
适用于网络流量较大的情况
:报文在配置时间间隔内被周期采样。例如配置时间间隔为100,第5毫秒进行采样,那么第一次采样是在5毫秒的时候,第二次采样是105毫秒的时候
2. NetStream流
NetStream流就是IP报文(UDP、TCP、ICMP报文)和MPLS报文的统计:
- IPv4报文:根据IPv4报文的目的IP地址、源IP地址、目的端口号、源端口号、协议号、ToS、输入接口或输出接口来定义流,相同的七元组标识为同一条流
- IPv6报文:根据IPv6报文的目的IP地址、源IP地址、目的端口号、源端口号、协议号、流量分类、流标签、输入接口或输出接口来定义流,相同的八元组标识为同一条流
- MPLS报文:可以统计MPLS报文内的IPv4/IPv6信息,如果统计IP信息,此时会根据MPLS标签栈和IP信息共同确定一条流
3. NetStream流老化
流统计信息首先会被存储在设备的NetStream缓存区中,当存储在设备上的NetStream流信息老化后,设备会把缓存区中的流统计信息通过指定版本的NetStream输出报文发送给NSC
- 按时老化
- 活跃流的老化:从第一个报文开始,一条流在指定的时间内一直能被采集到。该种老化方式主要用于持续时间较长的流量,定期输出统计信息。
- 非活跃流的老化:从最后一个报文开始,一条流在指定的时间内没有被采集到。该种老化方式主用于短时流量,流量停止则立即输出统计信息,节省内存空间。
- 由TCP连接的FIN和RST报文触发老化:当一条已经存在的TCP协议NetStream流中流过一条标志为FIN或RST表示一次会话结束的报文时,立即把相应的NetStream流老化掉
- 统计字节超过限制时老化:NetStream缓存区中的流需要记录流过的报文字节数,当字节数量超过定义的变量上限时,该流就会溢出
- 强制老化:用户可以通过执行命令强制将NetStream缓存区中所有流老化,该功能主要用于老化条件尚未满足,但又需要最新的统计信息,或者NetStream业务发生异常,导致流缓存区中某些流始终不老化
4. NetStream流输出
NetStream流输出是指储存缓存区里面的流老化后把流统计信息输出到指定的NSC,NetStream流输出具有原始流、聚合流和灵活流的三种流输出方式,以及三种输出报文的版本格式,分别是V5、V8、V9、V10,所有版本的报文都是通过UDP协议传递统计信息的
流输出方式
- 原始流输出方式:所有流的统计信息都要被统计,在流老化后,每条流的统计信息都要输出到NetStream服务器
- 聚合流输出方式:设备对与聚合关键项完全相同的流统计信息进行汇总,得到对应的聚合流统计信息,将该聚合统计信息发送到NetStream服务器
- 灵活流输出方式:流的建立条件是按照自定义的条件设置,可以对报文按照协议类型、源IP地址、目的IP地址、源端口号、目的端口号、流标签等进行分类统计,将分类统计信息发送给NetStream服务器
输出报文的版本格式
- v5:根据七元组产生原始的数据流,但报文格式固定,不易扩展
- v8:支持聚合输出格式,但报文格式固定,不易扩展
- v9:基于模板方式,使统计信息的输出更为灵活,可以灵活输出各种组合格式的数据。版本9支持对BGP下一跳、MPLS等统计输出
- v10:基于模板方式,根据数据流特征输出统计信息。具有很强的可扩展性,对于不同的需求输出不同格式的数据。