持续更新中。。。。。。 http://note.youdao.com/noteshare?id=2deefd695fca01ed8609ad55a3c1fb91
目录:(很遗憾,博客园不支持
- 路由协议
- RIP
- IGRP(已经退出历史的舞台)
- EIGRP(思科私有)
- OSPF(国际公有)
- BGP
- VPN路由传递过程
- BGP选路规则
- Cisco路由器BGP基本设置
- 关于自治系统号ASN或者BGP标识
- 关于BGP邻居源地址:
- 关于自动汇总:
- 关于同步
- 关于address-family 地址族
- IP VPN
- 隧道协议:
- PPP
- PPTP
- 控制链接和隧道维护
- PPTP数据封装
- L2TP
- L2TP控制链接
- L2TP数据连接
- IPSec
- GRE
- MPLS VPN
- 地址冲突的解决——BGP协议
- VRF技术:
- VPN路由传递过程:
- VPN数据传递过程:
- MPLS VPN组网配置:
- 配置文件阅读技巧
- 我们自己的组网实践:
- VPN实现技术:
- VPDN
- 隧道协议:
- 电信级路由器、VPN环境架设
- linux 使用串口连接cisco设备console
- 1、确定串口设备标识符
- 2、设置minicom:
- 3、连接cisco设备
- Windows使用串口连接Cisco设备console:
- 重置思科3825路由器密码:
- 使用路由器密码恢复技术:
- Cisco IOS常用命令:
- 思科路由器刷系统
- 恢复出厂设置:
- 1、在知道密码,能进入特许模式的情况下:
- 2、在不知道密码,无法进入特许模式的情况下:
- 用户密码设置:
- 查看路由器的一些状态:
- 允许远程telnet连接:
- 配置接口地址:
- 配置路由:
- 配置GRE Tunnel通道:
- Tunnel在MPLS VPN网络上的应用
- 什么是ACL规则?
- 回环接口
- 配置IPSec Tunnel
- 配置IPSec VPN
- 路由表如何设置?如何自动寻址?
- 路由表学习笔记
- 路由表的配置:
- Cisco交换机配置静态路由
- 交换机的端口镜像与抓包
- 合理配置Cisco权限
- 配置问题汇总
- 配置AAA认证
- 路由器上无法添加路由表
- Cisco交换机常见问题
- VLAN
- SPF
- NAT
- snmp-server
- solarwinds
- nagios
- 安装
- 监控网络设备
- TACACS+
- Cisco Secure ACS
- Syslog
- 发送端配置
- 思科设备配置
- 接收端配置
- 发送端配置
- 路由器操作系统
- MikroTik RouterOS
路由协议
创建路由表的方式包括静态路由、缺省路由和动态路由。
静态路由表由网络管理员在系统安装时根据网络的配置情况预先设定,网络结构发生变化后由网络管理员手工修改路由表,多用于小规模且结构不经常变化的网络。有的情况下必须使用静态路由,如DDR、使用NAT技术的网络环境。
动态路由协议允许路由器根据协议提供的算法计算网络中数据传输的最佳路径,随网络运行情况的变化动态生成路由表,适用于大规模或结构经常变化的网络。
动态路由协议主要包括: RIP, IGRP, EIGRP、IS-IS、OSPF、BGP。
根据应用范围,路由协议可以分为两类:内部网关协议(RIP-1, RIP-2, IGRP, EIGRP, IS-IS, OSPF)和外部网关协议(BGP,又称边界网关协议)。
外部网关协议(BGP)主要用于在不同的自治系统AS之间交换路由信息,而在一个AS内部,会根据网络规模选择静态配置路由表或选择合适的内部网关协议。
在互联网中,一个自治系统(AS)是一个有权自主地决定在本系统中应采用何种路由协议的小型单位。这个网络单位可以是一个简单的网络也可以是一个由一个或多个普通的网络管理员来控制的网络群体,它是一个单独的可管理的网络单元(例如一所大学,一个企业或者一个公司个体)。一个自治系统有时也被称为是一个路由选择域(routing domain)。一个自治系统将会分配一个全局的唯一的16位号码,有时我们把这个号码叫做自治系统号(ASN)。
根据路由算法,动态路由协议可以分为距离向量路由协议(Distance Vector Routing Protocol,基于Bellman-Ford算法,使用跳数或向量来确定从一个设备到另一个设备的距离,不考虑每跳链路的速率,包括RIP和IGRP、BGP)、链路状态路由协议(Link State Routing Protocol,基于Dijkstra算法,OSPF和IS-IS)和混合协议(如EIGRP,既有距离向量路由协议的特点,同时又继承了链路状态路由协议的优点)。
对于小型网络,采用基于距离向量算法的路由协议易于配置和管理,且应用较为广泛,但在面对大型网络时,不但其固有的环路问题变得更难解决,所占用的带宽也迅速增长,以至于网络无法承受。因此对于大型网络,采用链路状态算法的IS-IS和OSPF较为有效,并且得到了广泛的应用。IS-IS与OSPF在质量和性能上的差别并不大,但OSPF更适用于IP,较IS-IS更具有活力。IETF始终在致力于OSPF的改进工作,其修改节奏要比IS-IS快得多。这使得OSPF正在成为应用广泛的一种路由协议。不论是传统的路由器设计,还是即将成为标准的MPLS(多协议标记交换),均将OSPF视为必不可少的路由协议。
如果网络规模很小,只有15个或更少的路由器,手工配置路由器就可以了。否则可以考虑RIP或IGRP。对于中小规模的网络,RIP工作的很好。对于中等规模的网络,或者要关心网络的服务质量,使用IGRP会更好。最后对非常大型的网络,就要考虑OSPF。
RIP
RIP(路由信息协议,Routing Information Protocol)是路由器生产商之间使用的第一个开放标准,是最广泛的路由协议,在所有IP路由平台上都可以得到。当使用RIP时,一台 Cisco路由器可以与其他厂商的路由器连接。RIP有两个版本:RIPv1和RIPv2,它们均基于经典的距离向量路由算法,最大跳数为15跳。
RIPv1是有类路由(Classful Routing)协议,因路由上不包括掩码信息,所以网络上的所有设备必须使用相同的子网掩码,不支持VLSM。RIPv2可发送子网掩码信息,是无类路由(Classless Routing)协议,支持VLSM。
RIP使用UDP数据包更新路由信息。路由器每隔30s更新一次路由信息,如果在180s内没有收到相邻路由器的回应,则认为去往该路由器的路由不可用,该路由器不可到达。如果在240s后仍未收到该路由器的应答,则把有关该路由器的路由信息从路由表中删除。
RIP的算法简单,但在路径较多时收敛速度慢,广播路由信息时占用的带宽资源较多,它适用于网络拓扑结构相对简单且数据链路故障率极低的小型网络中,在大型网络中,一般不使用RIP。
IGRP(已经退出历史的舞台)
内部网关路由协议(Interior Gateway Routing Protocol,IGRP)是Cisco公司20世纪80年代开发的,是一 种动态的、长跨度(最大可支持255跳)的路由协议,使用度量(向量)来确定到达一个网络的最佳路由,由延时、带宽、可靠性和负载等来计算最优路由,它在 同个自治系统内具有高跨度,适合复杂的网络。Cisco IOS允许路由器管理员对IGRP的网络带宽、延时、可靠性和负载进行权重设置,以影响度量的计算。
像RIP一样,IGRP使用UDP发送路由表项。每个路由器每隔90s更新一次路由信息,如果270s内没有收到某路由器的回应,则认为该路由器不可到达;如果630s内仍未收到应答,则IGRP进程将从路由表中删除该路由。
与RIP相比,IGRP的收敛时间更长,但传输路由信息所需的带宽减少,此外,IGRP的分组格式中无空白字节,从而提高了IGRP的报文效率。但IGRP为Cisco公司专有,仅限于Cisco产品。
EIGRP(思科私有)
随着网络规模的扩大和用户需求的增长,原来的IGRP已显得力不从心,于是,Cisco公司又开发了增强的IGRP,即EIGRP。EIGRP使用与IGRP相同的路由算法,但它集成了链路状态路由协议和距离向量路由协议的长处,同时加入散播更新算法(DUAL)。
EIGRP具有如下特点:
- 快速收敛。快速收敛是因为使用了散播更新算法,通过在路由表中备份路由而实现,也就是到达目的网络的最小开销和次最小开销(也叫适宜后继, feasible successor)路由都被保存在路由表中,当最小开销的路由不可用时,快速切换到次最小开销路由上,从而达到快速收敛的目的。
- 减少了带宽的消耗。EIGRP不像RIP和IGRP那样,每隔一段时间就交换一次路由信息,它仅当某个目的网络的路由状态改变或路由的度量发生变 化时,才向邻接的EIGRP路由器发送路由更新,因此,其更新路由所需的带宽比RIP和EIGRP小得多——这种方式叫触发式(triggered)。
- 增大网络规模。对于RIP,其网络最大只能是15跳(hop),而EIGRP最大可支持255跳(hop)。
- 减少路由器CPU的利用。路由更新仅被发送到需要知道状态改变的邻接路由器,由于使用了增量更新,EIGRP比IGRP使用更少的CPU。
- 支持可变长子网掩码。
- IGRP和EIGRP可自动移植。IGRP路由可自动重新分发到EIGRP中,EIGRP也可将路由自动重新分发到IGRP中。如果愿意,也可以关掉路由的重分发。
- EIGRP为模块化设计,支持三种可路由的协议(IP、IPX、AppleTalk),更新版本支持IPv6。
- 支持非等值路径的负载均衡。
- 因EIGIP是Cisco公司开发的专用协议,因此,当Cisco设备和其他厂商的设备互联时,不能使用EIGRP
OSPF(国际公有)
OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS,也成为路由域,是指一组通过同意的路由政策或路由协议互相交换路由信息的网络)内决策路由,是对链路状态路由协议的一种实现。
OSPF协议由三个子协议组成:Hello协议、交换协议和扩散协议。其中Hello协议负责检查链路是否可用,并完成指定路由器及备份指 定路由器;交换协议完成“主”、“从”路由器的指定并交换各自的路由数据库信息;扩散协议完成各路由器中路由数据库的同步维护。
BGP
BGP用于连接Internet。BGPv4是一种外部的路由协议。可认为是一种高级的距离向量路由协议。
在BGP网络中,可以将一个网络分成多个自治系统。自治系统间使用eBGP广播路由,自治系统内使用iBGP在自己的网络内广播路由。
Internet由多个互相连接的商业网络组成。每个企业网络或ISP必须定义一个自治系统号(ASN)。这些自治系统号由IANA (Internet Assigned Numbers Authority)分配。共有65535个可用的自治系统号,其中65512~65535为私 用保留。当共享路由信息时,这个号码也允许以层的方式进行维护。
BGP使用可靠的会话管理,TCP中的179端口用于触发Update和Keepalive信息到它的邻居,以传播和更新BGP路由表。
在BGP网络中,自治系统有:
-
Stub AS:只有一个入口和一个出口的网络。
-
转接AS(Transit AS):当数据从一个AS到另一个AS时,必须经过Transit AS。如果企业网络有多个AS,则在企业网络中可设置Transit AS。
IGP和BGP最大的不同之处在于运行协议的设备之间通过的附加信息的总数不同。IGP使用的路由更新包比BGP使用的路由更新包更小(因此BGP承载更多的路由属性)。BGP可在给定的路由上附上很多属性。
当运行BGP的两个路由器开始通信以交换动态路由信息时,使用TCP端口179,他们依赖于面向连接的通信(会话)。
BGP必须依靠面向连接的TCP会话以提供连接状态。因为BGP不能使用Keepalive信息(但在普通头上存放有Keepalive信息,以允许 路由器校验会话是否Active)。标准的Keepalive是在电路上从一个路由器送往另一个路由器的信息,而不使用TCP会话。路由器使用电路上的这 些信号来校验电路没有错误或没有发现电路。 某些情况下,需要使用BGP:
- 当你需要从一个AS发送流量到另一个AS时;
- 当流出网络的数据流必须手工维护时;
- 当你连接两个或多个ISP、NAP(网络访问点)和交换点时。
以下三种情况不能使用BGP:
- 如果你的路由器不支持BGP所需的大型路由表时;
- 当Internet只有一个连接时,使用默认路由;
- 当你的网络没有足够的带宽来传送所需的数据时(包括BGP路由表)。
参考:无为长老的小内功——V5&V7平台版本VPN路由与VPNv4路由选路规则总结与案例分析
VPN路由传递过程
- CE路由表中的路由,经过PE-CE间的路由协议传递到PE相应的VPN路由表中;
- 在PE上,VPN的路由表被附加上相应的RD值和RT属性后被导入到VPNv4路由表中;
- PE通过MP-BGP协议将VPNv4路由传递给远端PE, 远端PE收到后,将VPNv4路由添加到自己的VPNv4路由表中;
- 在远端PE上,VPNv4路由表中的路由与VPN的RT(import)属性进行匹配,匹配上的VPNv4路由,被导入到相应的VPN路由表中;
- 远端PE VPN路由表中的路由,经过PE-CE间路由协议通告给远端CE,CE进行路由计算后,将这些路由加入到自己的路由表中。
综上所述,VPN路由表包括从CE学习到的路由,从VPNV4路由表中根据RT值导入的路由。VPNv4路由表包括所有通过MP-BGP学习到的私网路由表,以及本地导入的路由表,按照不同的RD值进行排列。
BGP选路规则
VPN路由虽然也是BGP路由,但是其选路原则不同于BGP的选路规则,BGP选路规则如下:
- 丢弃下一跳(NEXT_HOP)不可达的路由;
- 优选首选值(Preferred-value)最大的路由;
- 优选本地优先级(LOCAL_PREF)最高的路由;
- 依次选择network命令生成的路由、import-route命令引入的路由、聚合路由;
- 优选AS路径(AS_PATH)最短的路由;
- 依次选择ORIGIN类型为IGP、EGP、Incomplete的路由;
- 优选MED值最低的路由;
- 依次选择从EBGP、联盟EBGP、联盟IBGP、IBGP学来的路由;
- 优选下一跳Cost值最低的路由;
- 优选CLUSTER_LIST长度最短的路由;
- 优选ORIGINATOR_ID最小的路由;
- 优选Router ID最小的路由器发布的路由;
- 优选IP地址最小的对等体发布的路由。
Cisco路由器BGP基本设置
参考:思科路由器BGP基本配置
在一个路由器上配置BGP,有一下步骤
//配置路由器loopback接口
PE1(config)#interface loopback 0
PE1(config-if)#ip add 1.1.1.1 255.255.255.255 //这里掩码必须用255.255.255.255,因为loopback地址是唯一的
PE1(config-if)#no shutdown
PE1(config-if)#exit
//新建BGP,并指定邻居,关闭同步,关闭自动汇总
PE1(config)#router bgp 111
PE1(config-router)#neighbor 192.168.200.2 remote-as 222
PE1(config-router)#neighbor 192.168.200.2 update-source loopback 0
PE1(config-router)#no synchronization //关闭同步
PE1(config-router)#no auto-summary //关闭自动汇总
//启用address-family vpnv4的扩展团体属性
PE1(config-router)#address-family vpnv4
PE1(config-router-af)#neighbor 192.168.200.2 activate
PE1(config-router-af)#neighbor 192.168.200.2 send-community extended
PE1(config-router-af)#exit
//启用address-family ipv4 vrf vpna,并将静态路由重新分布
PE1(config-router)#address-family ipv4 vrf vpna
PE1(config-router-af)#no synchronization
PE1(config-router-af)#no auto-summary
PE1(config-router-af)#redistribute static
PE1(config-router-af)#exit
关于自治系统号ASN或者BGP标识
在设置一个路由器的BGP时,要弄清楚与之相连的路由器和它自己是不是在同一个AS中,如果在同一个AS中,则自治系统号ASN要设置成一样:
PE1(config)#router bgp 111
PE1(config-router)#neighbor 192.168.200.2 remote-as 111 //PE1和192.168.200.2同在BGP(AS) 111中
PE1(config-router)#neighbor 192.168.200.3 remote-as 222 //PE1和192.168.200.3不在同一个AS中,另一个ASN为222
关于BGP邻居源地址:
邻居指定(Neighbor命令)的地址是目的地址,是邻居地址。默认情况下从哪个端口发送出数据库哪个端口就是源地址。BGP里要求,源地址必须匹配,如果不匹配,数据包将会被丢弃。
一般情况下,在路由器A上制定邻居B,那么A与B相连的接口IP:10.1.1.1就是源地址,邻居指定中设置的目的地址就是B与A相连的接口IP:10.1.1.2.(设置命令同上)。当网络联通时,这样设置没有任何毛病,但在网络断路的情况下问题就会出现:当A和B之间的链路DOWN时,AB的源地址都会变化,比如A的源地址变成了A上另一个接口IP:10.3.3.1,B的源地址变成了B上另一个接口IP:10.2.2.2,也许AB不能直连,却可以通过A-C-D-B的方式联通,但此时AB之间的邻居关系就没法保持了。
解决办法:利用loopback接口。loopback接口是路由器上的一个虚拟接口,可以看做是router-ID,因此可以全局统一配置,使之唯一。通过把源地址配置成loopback ip,可以解决邻居关系不稳定的问题。
//默认路由器是不配置loopback接口的,需要我们自己配置
PE1(config)#interface loopback 0
PE1(config-if)#ip add 1.1.1.1 255.255.255.255 //这里掩码必须用255.255.255.255,因为loopback地址是唯一的
PE1(config-if)#no shutdown
//配置邻居指定的源地址为loopback 0接口
PE1(config)#router bgp 111
PE1(config-router)#neighbor 192.168.200.2 remote-as 222
PE1(config-router)#neighbor 192.168.200.2 update-source loopback 0
PE1(config-router)#no synchronization //关闭同步
PE1(config-router)#no auto-summary //关闭自动汇总
关于自动汇总:
“no auto-summary”命令的作用是关闭路由协议的自动汇总功能,主要是为了解决不连续子网互相访问的问题,在这种情况下都会关闭自动汇总,而采用手工汇总的方式通告路由,这个命令在RIPv2和EIGRP上面使用OSPF的自动汇总功能默认是关闭的
举一个最简单的例子,有两台路由器A和B,A连接着172.16.12.0,172.16.13.0,172.16.14.0,172.16.15.0的内网,A与B连接时使用192.168.12.0的网段,B连接互联网,这样看来,A是连接着两个不同类的网络的,那它就会将内网的网段自动汇总成一条172.16.0.0的路由给B这就是自动汇总
关于同步
使用同步的目的是避免出现黑洞(接收到数据包后不知道给谁,而只能丢弃)。同步默认是打开的,全互连时(用于IBGP)需要关闭同步,命令是:
Router(config-router)#no synchronization
同步主要是用于IBGP之间进行,EBGP不需要同步。
关于address-family 地址族
参考:BGP 地址族分析 - Address-family Ipv4和vpnv4地址族的分析
所谓地址族,就是把ipv4、ipv6和vpnv4分成不同的“块”,对每个“块”单独进行配置,如下所示:
PE1(config-router)#address-family ?
ipv4 Address family
ipv6 Address family
vpnv4 Address family
在BGP MPLS-VPN环境中,VPN路由使用VPNV4地址族和BGP扩展属性,通过MP-BGP协议进行传输,并以BGP路由的形式体现。
IP VPN
IP VPN可以理解为:通过隧道技术在公众IP/MPLS网络上仿真一条点到点的专线
按VPN的应用分类:
- Access VPN(远程接入VPN):客户端到网关
- Intranet VPN(内联网VPN):网关到网关,通过公司的网络架构连接来自同公司的资源。
- Extranet VPN(外联网VPN):也是网关到网关,与合作伙伴企业网构成Extranet,将一个公司与另一个公司的资源进行连接
其实分为两类:客户端到网关()、网关到网关(MPLS VPN)
按设备分类:
- 路由式VPN
- 交换机式VPN:主要用于连接用户较少的VPN网络
- 防火墙式VPN
更多内容参考:MPLS VPN原理,这是一个中国联通山东分公司的培训PPT,详细介绍了IP VPN的各种知识,尤其是MPLS VPN的相关知识。
隧道协议:
实现VPN的最关键部分是在公网上建立虚拟信道,建立虚拟信道是利用隧道技术实现的。
隧道是利用一种协议来传输另外的一种协议的技术,主要涉及三种协议:乘客协议、隧道协议和承载协议。例如IPSec协议,其中承载协议是IP协议,隧道协议是IPSec协议,乘客协议就是被封装的原始IP包,如下所示:
原始IP包
|
|经过IPSec封装后
|
(新增加的IP头)(IPSec头)(被封装的原始IP协议)
| | |
承载协议 隧道协议 乘客协议
隧道保证了VPN中分组的封装方式及使用的地址与承载网络的封装方式及使用地址无关:
Internet
隧道
(中心站点)边界路由------------------------------------边界路由(分支机构)
Internet根据这个地址路由 可以使用私网地址,感觉双方是用专用通道连接起来的
| 而不是Internet
公网地址 私网地址
(新增加的IP头)(IPSec头)(被封装的原始IP协议)
| | |
承载协议 隧道协议 乘客协议
IP隧道的建立可以是在链路层和网络层:
- 第二层隧道主要是PPP链接,如PPTP、L2TP,其特点是协议简单,易于加密,适合远程拨号用户,主要用于VPDN业务;
- 第三层隧道是IPinIP,如IPSec、GRE,其可靠性及扩展性优于第二层隧道,但没有前者简单直接,通常用于不同子网之间的连接,IPSec协议的安全功能可以为各种组网提供安全保护。
- 介于第二层和第三层之间的MPLS协议,可以提供QoS和一定的安全保护。
PPP
PPP(点到点协议)是为在同等单元之间传输数据包这样的简单链路设计的链路层协议(OSI 模式中的第二层)。这种链路提供全双工操作,并按照顺序传递数据包。
PPP的帧格式
7E | FF | 03 | Protocol | Information | FCS | 7E | |
---|---|---|---|---|---|---|---|
bytes | 1 | 1 | 1 | 2 | <=1500 | 2 | 1 |
PPP采用7EH作为一帧的开始和结束标志(F);其中地址域(A)和控制域(C)取固定值(A=FFH,C=03H) ;协议域(两个字节)取0021H表示IP分组,取8021H表示网络控制数据,取C021H表示链路控制数据;帧校验域(FCS)也为两个字节,它用于对信息域的校验。若信息域中出现7EH,则转换为(7DH,5EH)两个字符。当信息域出现7DH时,则转换为(7DH,5DH)。当信息流中出现ASCII码的控制字符(即小于20H),即在该字符前加入一个7DH字符。
PPTP
控制链接和隧道维护
PPTP控制连接建立在PPTP客户端机IP地址和PPTP服务器IP之间,PPTP客户端机使用动态分配的TCP端口号,而PPTP服务器则使用保留TCP端口号1723。PPTP控制连接携带PPTP呼叫控制和管理信息,用于维护PPTP隧道,其中包括周期性地的发送回送请求和回送应答消息,用于检测出客户端与服务器之间可能出现的连接中断。PPTP控制连接数包包括一个IP报头,一个TCP报头和PPTP控制消息。
PPTP控制链接数据包格式:
IP | TCP | PPTP Control Message | |
---|---|---|---|
bytes |
具体过程和数据格式参考上面的参考文献
PPTP数据封装
将原来Ethernet数据包先封装成PPP packet,再由GRE封装,通过Internet传送至接收端(注意:当身份认证协议选择MS-chap以及MS-chapv2的时候,ppp payload将被加密)
IP header | GRE header | PPP header | PPP payload | |
---|---|---|---|---|
bytes |
L2TP
L2TP是一种工业标准的Internet隧道协议,功能大致和PPTP协议类似,比如同样可以对网络数据流进行加密。不过也有不同之处,比如PPTP要求网络为IP网络,L2TP要求面向数据包的点对点连接;PPTP使用单一隧道,L2TP使用多隧道;L2TP提供包头压缩、隧道验证,而PPTP不支持。
L2TP 是一个数据链路层协议。其报文分为数据消息和控制消息两类。数据消息用投递 PPP 帧,该帧作为L2TP报文的数据区。L2TP不保证数据消息的可靠投递,若数据报文丢失,不予重传,不支持对数据消息的流量控制和拥塞控制。控制消息用以建立、维护和终止控制连接及会话,L2TP确保其可靠投递,并支持对控制消息的流量控制和拥塞控制。
L2TP封装的乘客协议是位于第二层的PPP协议:
(原始数据包)<---可以是IP、IPX和AppleTalk等
| PPP封装
(PPP头)(原始数据包)
| L2TP封装
(新增加的IP头)(L2TP头)(PPP头)(原始数据包)
|
可以是IP、ATM和帧中继
L2TP没有对数据进行加密。
L2TP的典型应用--VPDN参考 https://wenku.baidu.com/view/44d53d6e561252d380eb6e44.html?from=search 第9页
L2TP控制链接
L2TP控制连接建立在L2TP客户端机IP地址和L2TP服务器IP之间,PPTP客户端机使用动态分配的UDP端口号,而L2TP服务器则使用保留UDP端口号1701。L2TP控制连接用于隧道和会话连接的建立、维护以及传输控制。L2TP控制连接数包包括一个IP报头,一个UDP报头和L2TP控制消息。
IP header | UDP header | L2TP Control Message | |
---|---|---|---|
bytes |
控制连接建立会话建立参考上面的参考文献
L2TP数据连接
L2TP数据消息用于封装PPP帧,并在隧道上传输
IP header | UDP header | L2TP header | PPP header | IP header | 原始数据 | |
---|---|---|---|---|---|---|
bytes |
原始用户数据为IP报文,先经过PPP封装,然后链路层将PPP帧进行L2TP封装,将其封装成UDP,并继续封装成可以在internet上传输的IP报文,此时的结果就是IP报文中有PPP帧,PPP帧中还有IP报文,但两个IP地址不同,里面的IP头部是私有地址(原地址为L2TP服务器动态分配的地址,目的地址为公司内网服务器的地址),外层IP头部的原IP是客户端的原始地址,目的IP是L2TP服务器的地址,至此完成客户端数据封装,然后通过L2TP隧道将报文发送到L2TP服务器,L2TP服务器收到封装的IP报文,发现外层IP头部的目的地址是指定自己的,然后L2TP服务器解封装报文,得到里面的IP报文,然后根据IP头部的的目的IP地址将数据包发送到内网局域网服务器。
IPSec
参考:IPsec技术介绍(转)
IPsec协议工作在OSI 模型的第三层,使其在单独使用时适于保护基于TCP或UDP的协议(如 安全套接子层(SSL)就不能保护UDP层的通信流)。这就意味着,与传输层或更高层的协议相比,IPsec协议必须处理可靠性和分片的问题,这同时也增加了它的复杂性和处理开销。相对而言,SSL/TLS依靠更高层的TCP(OSI的第四层)来管理可靠性和分片。
IPSec只能工作在IP层,要求乘客协议和承载协议都是IP协议:
原始IP包
|
|经过IPSec封装后
|
(新增加的IP头)(IPSec头)(被封装的原始IP协议)
| | |
承载协议 隧道协议 乘客协议
必须是IP协议 必须是IP协议
IPSec可以对被封装的数据包进行加密和摘要等,以进一步提高数据传输的安全性。
安全协议:
-
AH(AuthenticationHeader) 协议:
-
-
ESP(EncapsulatedSecurityPayload) 协议:
-
安全联盟SA:
- 安全联盟 SA,记录每条 IP安全通路的策略和策略参数。安全联盟是 IPSec 的基础, 是通信双方建立的一种协定,决定了用来保护数据包的协议、转码方式、密钥以及密钥有效期等。AH和 ESP都要用到安全联盟,IKE的一个主要功能就是建立和维护安全联盟。
密钥管理协议:
- 密钥管理协议 ISAKMP, 提供共享安全信息。Internet密钥管理协议被定义在应用层,IETF规定了 Internet安全协议和 ISAKMP(Internet Security Association and Key Management Protocol) 来实现 IPSec 的密钥管理,为身份认证的 SA 设置以及密钥交换技术
封装模式:
- 隧道(tunnel)模式:用户的整个IP数据包被用来计算AH或ESP头,AH或ESP头以及ESP加密的用户数据被封装在一个新的IP数据包中。通常,隧道模式应用在两个安全网关之间的通讯。
- 传输(transport)模式:只是传输层数据被用来计算AH或ESP头,AH或ESP头以及ESP加密的用户数据被放置在原IP包头后面。通常,传输模式应用在两台主机之间的通讯,或一台主机和一个安全网关之间的通讯。定义了一个通用格式。
GRE
通用路由封装(GRE: Generic Routing Encapsulation)是通用路由封装协议,可以对某些网络层协议的数据报进行封装,使这些被封装的数据报能够在IPv4网络中传输[1] 。
报文格式:
Delivery Header | GRE Header | Payload packet |
---|---|---|
eg. ip-header | information |
- Delivery Header:封装的外部协议报文头(如IP报文头),即隧道所处网络的协议数据头,是实现一种协议报文穿越另一种协议网络的传输工具。
- GRE Header:对数据报文进行封装后加入的数据,包含GRE协议本身以及和负载协议有关的一些信息。
- Payload Packet:进入隧道之前的网络层数据报文,将作为隧道报文的有效负载,该报文的协议号将作为GRE头部字段中的ProtocolType字段。GRE头部信息具有如图所示的结构。
封装过程
- Router A 连接Group 1 的接口收到X 协议报文后,首先交由X 协议处理
- X 协议检查报文头中的目的地址域来确定如何路由此包
- 若报文的目的地址要经过Tunnel 才能到达,则设备将此报文发给相应的Tunnel 接口
- Tunnel 口收到此报文后进行GRE 封装,在封装IP 报文头后,设备根据此IP 包的目的地址及路由表对报文进行转发,从相应的网络接口发送出去。
解封装过程
解封装过程和加封装的过程相反。
- RouterB 从Tunnel 接口收到IP 报文,检查目的地址
- 如果发现目的地是本路由器,则RouterB 剥掉此报文的IP 报头,交给GRE 协议处理(进行检验密钥、检查校验和及报文的序列号等)
- GRE 协议完成相应的处理后,剥掉GRE 报头,再交由X 协议对此数据报进行后续的转发处理。
说明:GRE 收发双方的加封装、解封装处理,以及由于封装造成的数据量增加,会导致使用GRE 后设备的数据转发效率有一定程度的下降。
MPLS VPN
MPLS:多协议标签交换技术Multi-Protocol Label Swithing,一种VPN接入技术
注意,近年来的VPN技术主要分为以下三类:
- 传统VPN:FR和ATM
- CPE-based VPN:L2TP和IPSec等
- Provider Provisioned VPNs(PP-VPN):MPLS L2VPN和MPLS L3VPN
MPLS VPN是可管理的IP虚拟专用网络服务 (IP VPN),采用先进的多协议标签交换(MPLS)技术,将企业分布在不同地点的办事处及设备通过安全可靠、高效率的虚拟专用网络连接起来,实现数据、语音、视频传输或其他重要网络应用,兼具服务品质(QOS)保证。
MPLS VPN主要由CE、PE和P等3部分组成。
- CE(Customer Edge Router)用户网络边缘路由器设备,直接与服务提供商网络相连,它“感知”不到VPN的存在;
- PE(Provider Edge Router)服务提供商边缘路由器设备,与用户的CE直接相连,负责VPN业务接入,处理VPN-IPv4路由,是MPLS三层VPN的主要实现者;
- P(Provider Router)服务提供商核心路由器设备,负责快速转发数据,不与CE直接相连。
在整个MPLS VPN中,P、PE设备需要支持MPLS的基本功能,CE设备不必支持MPLS。
MPLS协议头位于第二层(Ethernet头)和第三层(IP头)之间,支持多种三层协议,如IP,IPv6,IPX等。
MPLS VPN的网络采用标签交换,标签label是一种短的、等长的、易于处理的、不包含拓扑信息、只有局部意义的信息内容。一个标签对应一个用户数据流,非常易于用户间数据的隔离。
MPLS报文交换和转发是基于标签的。针对IP业务,IP包在进入MPLS网络时,入口的路由器分析IP包的内容,并为这些IP包选择合适的标签,然后所有MPLS网络中节点都是依据这个简短标签来作为转发依据。当该IP包最终离开MPLS网络时,标签会被出口的边缘路由器分离。
一些基本概念:
- LSR(Label Switch Router):标签交换路由器,MPLS网络的核心交换机,提供标签交换和标签分发功能。一般部署在P节点上。
- LER(Label Edge Router):边界标记交换路由器,在MPLS的网络边缘,进入到MPLS网络的流量由LER分为不同的FEC,并为这些FEC请求相应的标签,提供流量分类和标签的映射、标签的移除功能。一般部署在PE节点上。
- LSR(Label Swith Path):标签交换通道。一个FEC的数据流,在不同的节点被赋予确定的标签,数据转发按照这些标签进行,数据流所走的路径就是LSP。
- FEC(Forwarding Equivalence Class):转发等价类,是在转发过程中以等价的方式处理的一组数据分组,例如目的地址前缀相同的数据分组就可以看做时一个FEC。通常对一个FEC分配相同的标签。
这是目前最新的VPN接入技术,介于第二层(Ethernet那一层)和第三层(IP层)之间(IP协议封装在MPLS协议之内),主要用于VPN网络的联通性组网,目的是在PE和P上将不同VPN网络中的CE节点的数据区分开,逻辑隔离不同网络的数据。MPLS VPN主要作用在骨干网络上,对于CE来说,MPLS VPN对于它们是透明的。
MPLS VPN仅是在骨干的宽带IP网络上实现了不同IP子网络的组网,构建了一个互相能够联通的私有IP专网,但是还需要配合其他VPN技术才能实现认证登录等功能。
在入口边缘路由器为每个包加上MPLS标签,核心路由器根据标签值进行转发,出口边缘路由器再去掉标签,恢复原来的IP包:
| MPLS网 |
| MPLS标签 10.1.1.1 |
CE1--------------PE1------------P1-------------P2-----------PE2------------CE2
(10.1.1.1) | VPN tunnel | (10.1.2.1)
| MPLS标签 10.1.2.1 |
CE3---------------- ---------------CE4
(10.1.3.1) (10.1.4.1)
MPLS标签位于二层和三层之间:
(二层包头)(三层包头)
| MPLS封装
(二层包头)(MPLS标签)(三层包头)
MPLS是根据标签对数据包进行转发,因此在三层数据包中可以使用私有地址,从而形成了一种天然的隧道。
MPLS标签的分发可以通过LDP等协议动态完成,所以MPLS能够提供动态的隧道。
MPLS包头结构:
0 20 23 24 32
( 标签 )( EXP )( S )( TTL ) 32bit
-----------------------------------
|
|
(二层头部)(MPLS头部)(IP头部)( 数据 )
MPLS包头通常有32Bit:
-
20Bit用作标签(Label)
-
3个Bit的EXP, 协议中没有明确,通常用作COS
-
1个Bit的S,用于标识是否是栈底,表明MPLS的标签可以嵌套。理论上,标记栈可以无限嵌套,从而提供无限的业务支持能力。
-
8个Bit的TTL
MPLS头部:|Label 20bit|Experimental 3bit|Stack Bottom 1bit|TTL 8bit|
|2层头部|MPLS头部|IP头部|数据|
|2层头部|MPLS头部|MPLS头部|IP头部|数据|
MPLS的标签转发相对于传统的IP转发,速度更快,因为不再需要逐条分析IP包,直接用标签进行快速转发。关于标签转发的更多原理,参考PPT的从第8页开始的内容
更多内容参考:MPLS VPN原理,这是一个中国联通山东分公司的培训PPT,详细介绍了IP VPN的各种知识,尤其是MPLS VPN的相关知识。
地址冲突的解决——BGP协议
- 本地路由冲突问题,即在同一台PE上如何区分不同VPN的相同路由(PE发时)
- 路由在网络中的传播问题,即在PE上接收到来自不同VPN的两条相同路由时,如何进行辨别(PE收时)
- 数据包的转发问题,即使成功解决了路由表的冲突,但在PE接收到一个IP数据包时,怎么知道该发给那个VPN?因为IP数据包头中唯一可用的信息就是目的地址,而很多VPN中都可能存在这个地址。
解决本地路由冲突的思路:
- 在PE上同时维护多张相互独立路由表
- 一张全局路由表(公网路由表)
- 为每个VPN建立一个路由表
- 由于每个VPN使用自己独立的路由表,因此可以有效地解决本地路由冲突。
VPN_A(10.1.0.0)
CE----------------| { VRF for VPN_A
|-----PE{ IGP &/or BGP
CE----------------| { VRF for VPN_B |
VPN_B(10.1.0.0) | |
| Global Routing Table
VPN Routing Table
VRF(VPN Routing & Forwarding Instance,VPN路由转发实例) 可以看作虚拟的路由器,该虚拟路由器包括以下元素:
- 一张独立的路由表,从而包括了独立的地址空间;
- 一组归属于这个VRF的路由器接口的集合;
- 一组只用于本VRF的路由协议。
问题:VRF实现了不同VPN之间路由的隔离,这并不够,如何实现VRF之间的路由发布和交互呢? 引入RT
RT(Route target)
red attribute
|----------------------VPN_A---------------------|
| |
vrf1:export red } {vrf3:export red
import red } |--------------------| { import red
}--PE1 PE2--{
vrf2:export yellow } |--------------------| {vrf4:export yellow
| import yellow } { | import yellow
| |
|----------------------VPN_B---------------------|
yellow attribute
RT的本质是每个VRF表达自己的路由取舍及喜好的方式 ,分为两部分:
- export target,表示发出路由的属性
- import target,表示愿意接收什么路由
每个VRF中都可以配置多个export target和import target属性,接收时采用“或”操作,从而实现灵活的VPN访问控制。
问题:如何在PE之间传递各VRF中的路由以及相应的RT? 引入BGP
- BGP是外部路由协议,用在自治系统AS之间传递路由信息,属于增强型的距离矢量路由协议。
- BGP邻居分为两类:IBGP(同一个AS内的邻居)和EBGP(不同AS间的邻居)
- BGP邻居之间通过TCP协议相连,因此可以在不直接相连的路由器间交换路由信息
用BGP传递VPN路由的好处:VPN路由信息可以直接在PE之间传递,所以P路由器中不会包含任何VPN路由信息。
BGP报文的种类:
- Open: 用于建立BGP邻居关系,是BGP路由器之间的初始握手信息
- Keepalive: 定期检测BGP邻居是否存活
- Update: 发送路由更新信息
- Notification: 检测到差错时发送该报文
Update报文的格式:
不可达路由长度 2byte
不可达路由withdrawn routes 变长
路由属性长度 2byte
路由属性 变长
可达路由信息NLRI 变长
- 不可达路由中不携带路由属性,可达路由同时携带路由属性
- 一个update报文中可以携带多条不可达路由信息,可携带多条具有相同路由属性的可达路由信息
常见的路由属性:
- Origin
- As-path
- Next-hop
- Community: 团体属性,可用来对入路由和出路由进行过滤。
R1(Community:20:101)------|
|-------R3(只接收Community为20:102的路由)
R2(Community:20:102)------|
RT的表示:
- 可以用扩展的community来表示RT,type字段为0x0002或者0x0102时是RT。
- 可见RT有两种表示方法:AS:nn和ipaddress:nn。通常建议使用AS:nn表示法
|Type 0x0002 |AS#(16bit) |Value(32bit) |
|Type 0x0102 |IP address(32bit) |Value(16bit) |
路由传播的冲突问题:
RT属于BGP的路由属性,而在BGP的不可达路由信息中不包含路由属性。所以在收到来自不同vpn、具有相同网段的不可达路由信息时,路由器将无法根据RT来分辨。
引入RD来解决以上问题:
- 每个VRF中分别配置一个标识,称为RD(Route Distinguisher)。在PE发布VRF中的路由信息时,会在地址前面加上RD,以便接收方PE区分来自不同VRF的路由信息。
- RD的长度为8个字节,格式与RT相似。
- 在IPv4地址前加上RD之后,就称为VPN-IPv4地址族。
8-Byte Route Distinguisher 4-Bypte IPv4 Address
|------------------------------------------||---------------------|
|Type |Administrator| Assigned Number || IPv4 Address |
|Field |Subfield | Subfield || Prefix |
|------|-----------------------------------||---------------------|
2-Bypt 6-Byte
Type Field Value Field
RD的本质:
- 通常建议为一个VPN中的VRF都配置相同的RD,不同的VPN配置不同的RD。事实上分配RD只需遵循以下原则: 保证存在相同地址的两个VRF的RD不同。
- RD并不会影响不同VRF之间的路由选择以及VPN的形成,这些事情由RT完成。
- PE与CE之间传递的是IPv4路由, PE与PE之间传递的是VPN-IPv4路由。
VRF技术:
百度文库VRF的技术原理和配置实例,摘要部分内容如下:
目的是为了解决本地路由冲突的问题:在一个路由器上的两个VPN中可能会使用相同的IP地址段,那么就会产生IP地址冲突的问题,造成路由识别、路由传播、报文转发的困难。
-
为了解决本地路由冲突问题,引入了VRF的概念:把每台PE路由在逻辑上划分为多台虚拟路由器,即多个VPN路由转发实例VRF,每个VRF对应一个VPN,有自己独立的路由表、转发表和相应的接口。这就相当于将一台各VPN共享的PE模拟成多台专用PE。这样PE于CE交互的路由信息只是该VPN的路由,从而实现了VPN路由的隔离。由于不同VPN的路由存放在不同的VRF中,所以VPN路由重叠的问题也解决了。
每一个VRF包括如下元素:
- 一张独立的路由表/转发表,当然也包括了独立的地址空间;
- 一组归属于这个VRF的接口集合;
- 一组只用于本VRF的路由协议。
对于每个PE,可以维护一个或多个VRF,同时维护一个公网的路由表(也叫全局路由表),多个VRF实例相互分离独立。实现VRF并不难,关键在于如何在PE上使用特定的策略规则来协调各VRF和全局路由表之间的关系。
-
VPN重叠路由在网络中的传播问题:将BGP4协议扩展成MP-BGP协议,在MP-IBGP邻居间传递VPN用户路由时打上RD标记等VPN信息,这样CE传来的VPN用户的IPv4路由被PE转换为VPN-IPv4路由,这样就能保证对端PE能够区分开属于不同VPN用户的地址重叠的路由。
-
PE向CE的报文转发问题:由于IP报文的格式不可更改,只能在IP头之外加上一些信息(RD标签),由始发的VPN打上标记,这样PE在接受报文时可以根据这个标记进行转发。
RT和RD:
在VRF中定义的和VPN业务有关的两个重要参数是RT和RD,长度都是64bit。
-
RT是Route Target的缩写,RT的本质是每个VRF表达自己的路由取舍及喜好的方式,主要用于控制VPN路由的发布和安装策略。分为import和export两种属性,前者表示了我对哪些路由感兴趣,后者表示了我发出的路由的属性。当PE发布路由时,将使用路由所属VRF的RT export规则,直接发送给其他PE设备。对端PE接收路由时,首先接收所有的路由,并根据每个VRF配置的RT import规则进行检查,如果接收的路由和某一个VRF中的RT import属性match,则将该路由添加到相应的VRF中。
-
RD是Route Distinguisher的缩写,是说明路由是属于哪个VPN的标志。可以理解为RD就是一个VPN的身份ID,虽然理论上可以为每个VRF配置一个RD,但是建议为每个VPN的VRF都配置相同的RD,并且要保证这个RD全球唯一。如果两个VRF中存在相同的地址,但是由于RD不同,这两个路由在PE间发布过程中也不会混淆,因为MP-BGP协议把RD和路由一起发送,对端PE可以根据RD确定路由所属的VPN,从而把路由安装到正确的VRF中。
-
RD和RT的关系:RT搞定的是VRF之间路由的选择和VPN的形成,RD只是一个身份证号码,用来标识一个VPN。在RT中是否要用到RD?
-
具体组网应用实例参考原文。(未看完。。。。。。)
VPN路由传递过程:
- PE从CE接受路由,放入相应的VRF;
- 发送方PE将VRF中的IPv4路由添加到VRF中配置的RT-Export,RD等参数变为VPNv4路由然后通过MP-iBGP邻居传递给远端PE;
- 远端PE接收到VPNv4路由后,比较本地VRF中的Import RT和接收到的Export RT,如果发现至少一个匹配项,则将VPNv4路由还原成IPv4路由导入到相应的VRF;
- 远端PE将VRF中的路由传递给CE;
VPN数据传递过程:
数据传输线路:CE1-PE1-PE2-CE2,具体的网络拓扑图详见下面的组网实践示意图。
- CE1的数据明传给PE1;
- PE1在数据的IP包前加上MPLS头,传递给PE2;
- PE2收到数据后,根据MPLS头确定CE1和CE2是否在同一个VPN中,如果在,就将去掉了MPLS头的数据递交给CE2。
MPLS VPN组网配置:
以一个简单的MPLS VPN网络为例,给出了具体的配置命令和说明,比较详细。
以一个MPLS VPN网络为例,给出了配置表,但是具体的配置命令还需要参考上面的文章。
配置文件阅读技巧
有哪些VPN应用到了哪些接口上;
每个接口上都应用了哪些VPN。
我们自己的组网实践:
网络由4个CE,两个PE构成,如下图所示:
|-(G0/1:192.168.200.1)PE1 vpna
| |(G0/2:192.168.101.2)-(F0/1:192.168.101.1)CE1(F0/0:192.168.51.1)-------|
| | | vpnb
| |(G0/3:192.168.104.2)-(E0/1:192.168.104.1)CE4(E0/0:192.168.54.1)-------)------|
| | |
|-(G0/1:192.168.200.2)PE2 | |
|(G0/2:192.168.102.2)-(G0/1:192.168.102.1)CE2(G0/0:192.168.52.1)-------| |
| |
|(G0/3:192.168.103.2)-(F0/1:192.168.103.1)CE3(F0/0:192.168.53.1)--------------|
配置过程如下:(重新对照参考文献整理下)
-
连线并设置各个接口IP
按照上述拓扑图设置各个接口IP和no shutdown,并将对应的设备hostname改名。
注意:
- 路由器之间直连使用并行网线就可以了。
- 不同速率的网口不能直连,需要用交换机连接。
- 路由器故障时需要检查CF卡是否插牢。
- 两个路由器连接到交换机上仍不能ping通,需要检查路由器的ARP缓存表是否建立,这需要时间,如果交换机和网线都没有故障的话,等一会就会生成ARP表项。
- 两个路由器之间不能ping通,需要检查路由器的路由表是否存在对应路由,注意,有些情况下默认路由很重要。
- 当PE建立了VRF后,没法再通过PE ping通CE,但是可以通过CE ping通PE,只要PE上的VRF路由表存在相应路由,可以联通CE即可。
-
给两台PE设置MPLS
PE1(config)#ip cef //开启快速转发
PE1(config)#interface g0/1
PE1(config-if)#mpls ip //在G0/1上启用MPLS
PE1(config-if)#exit
PE1(config)#PE2(config)#ip cef //开启快速转发
PE2(config)#interface g0/1
PE2(config-if)#mpls ip //在G0/1上启用MPLS
PE2(config-if)#exit
PE2(config)# -
在两台PE上创建VPN实例,注意两个VPN的RD标签要区别开
PE1(config)#ip vrf vpna //编辑名为vpna的VRF,如果没有则创建
PE1(config-vrf)#rd 100:1 //设置RD标签
PE1(config-vrf)#route-target both 100:1 //设置RT
PE1(config-vrf)#int g0/2
PE1(config-if)#ip vrf forwarding vpna //将G0/2绑定到vpna实例中
//执行了这个操作后,G0/2原有的配置会被删除,需要重新设置G0/2的IP和no shutdown
PE1(config-if)#ip add 192.168.101.2 255.255.255.0
PE1(config-if)#no shutdown
//同样的方法,创建vrf vpnb,并配置G0/3
PE1(config-if)#ip vrf vpnb
PE1(config-vrf)#rd 200:1
PE1(config-vrf)#route-target both 200:1
PE1(config-vrf)#int g0/3
PE1(config-if)#ip vrf forwarding vpnb
PE1(config-if)#ip add 192.168.104.2 255.255.255.0
PE1(config-if)#no shutdown//PE2的配置方法同上,需要创建vrf vpna和vrf vpnb,并分别绑定到G0/2和G0/3接口,并重新设置G0/2和G0/3的ip和no shutdown
-
配置四个CE的静态路由,使其与PE相连(也可以运行动态路由协议,如BGP)
CE1(config)#ip route 0.0.0.0 0.0.0.0 192.168.101.2 //设置默认路由,将所有全局的请求都交给与之相连的PE处理
CE2(config)#ip route 0.0.0.0 0.0.0.0 192.168.102.2
CE3(config)#ip route 0.0.0.0 0.0.0.0 192.168.103.2
CE4(config)#ip route 0.0.0.0 0.0.0.0 192.168.104.2 -
配置两个PE的VRF路由,(也可以运行动态路由协议,如BGP)
PE1(config)#ip route vrf vpna 192.168.102.0 255.255.255.0 192.168.200.2
PE1(config)#ip route vrf vpnb 192.168.103.0 255.255.255.0 192.168.200.2
PE2(config)#ip route vrf vpna 192.168.101.0 255.255.255.0 192.168.200.1
PE2(config)#ip route vrf vpnb 192.168.104.0 255.255.255.0 192.168.200.1 -
给两台PE设置BGP
PE1(config)#router bgp 111 //设置名为111的BGP,如果没有则创建
PE1(config-router)#neighbor 192.168.200.2 remote-as 222
PE1(config-router)#network 192.168.200.0 mask 255.255.255.252 //设置直连IP
PE1(config-router)#network 192.168.101.0 mask 255.255.255.0
PE1(config-router)#network 192.168.104.0 mask 255.255.255.0
PE1(config-router)#no synchronization
PE1(config-router)#no auto-summary
//启用address-family vpnv4的扩展团体属性
PE1(config-router)#address-family vpnv4
PE1(config-router-af)#neighbor 192.168.200.2 activate
PE1(config-router-af)#neighbor 192.168.200.2 send-community extended
PE1(config-router-af)#exit
//启用address-family ipv4 vrf vpna和vpnb,并将静态路由重新分布
PE1(config-router)#address-family ipv4 vrf vpna
PE1(config-router-af)#no synchronization
PE1(config-router-af)#no auto-summary
PE1(config-router-af)#redistribute static
PE1(config-router-af)#exit
PE1(config-router)#address-family ipv4 vrf vpnb
PE1(config-router-af)#no synchronization
PE1(config-router-af)#no auto-summary
PE1(config-router-af)#redistribute static
PE1(config-router-af)#exitPE2(config)#router bgp 222
PE2(config-router)#neighbor 192.168.200.1 remote-as 222
PE2(config-router)#network 192.168.200.0 mask 255.255.255.252
PE2(config-router)#network 192.168.102.0 mask 255.255.255.0
PE2(config-router)#network 192.168.103.0 mask 255.255.255.0
PE2(config-router)#no syncronization
PE2(config-router)#no auto-summary
//启用address-family vpnv4的扩展团体属性
PE2(config-router)#address-family vpnv4
PE2(config-router-af)#neighbor 192.168.200.1 active
PE2(config-router-af)#neighbor 192.168.200.1 send-community extended
PE2(config-router-af)#exit
//启用address-family ipv4 vrf vpna和vpnb,并将静态路由重新分布
PE2(config-router)#address-family ipv4 vrf vpna
PE2(config-router-af)#no synchronization
PE2(config-router-af)#no auto-summary
PE2(config-router-af)#redistribute static
PE2(config-router-af)#exit
PE2(config-router)#address-family ipv4 vrf vpnb
PE2(config-router-af)#no synchronization
PE2(config-router-af)#no auto-summary
PE2(config-router-af)#redistribute static
PE2(config-router-af)#exit
注意:当设置了BGP后,PE添加了新的VRF静态路由后,无法立刻配置到路由表,需要使用redistribute static将添加的静态路由重新分布到对应的address-family ipv4 vrf vpn-name中。
-
退到特许模式,保存配置到startup-config,并用CE ping PE和其他CE,正常情况下各个PE和CE的路由表都应该已经建立,同一个VPN里的CE是可以互相PING通的,注意PE无法直接PING通CE,因为已经配置了VRF,需要使用vrf ping:
PE1#ping vrf vpna 192.168.101.1
-
一般环境就搭建好之后,最好将各个路由器的配置保存到本地电脑上,方法是:
-
在特许模式下show running-config,将显示出来的结果粘贴到本机的新建文档中即可。
-
恢复配置时,可以重新键盘敲入配置,也可以用tftp上传到路由器,覆盖原有的startup-config
-
关于配置文件的格式:一般文件的开头有一句话说明了配置文件的大小,结尾有一个end字串,但是这不重要。重要的是从第二行开始的!之间的内容,不同的配置项用!隔开,一个项的子项用空格缩进,例如:
Current configuration: 1172 bytes ! version 12.3 service timestamps debug datetime msec service timestamps log datetime msec no service password-encryption ! hostname PE1 ! boot-start-marker boot-end-marker ! ! no aaa new-model ip subnet-zero ! ! ! ip vrf vpna rd 1:100 route-target export 200:1 route-target import 200:1 ! ..... ! router bgp 100 no bgp default ipv4-unicast .... neighbor 202.98.4.2 version 4 ! address-family vpnv4 neighbor 202.98.4.2 activate neighbor 202.98.4.2 send-community extended exit-address-family ! ! .... ! ! end
-
VPN实现技术:
在隧道协议的基础上,VPN按照不同应用产生的不同组网形态划分为四种类型:
- 虚拟租用线 Virtual Leased Line, VLL
- 虚拟专用路由网 Virtual Private Routed Network, VPRN
- 虚拟专用拨号网 Virtual Private Dial Network, VPDN
- 虚拟专用LAN网段 Virtual Private LAN Segments, VPLS
VPDN
VPDN是远程拨号访问企业内部资源的模拟,它通过L2TP、PPTP或L2F等协议使得分散在各地的主机,只要介入当地接入服务器就可以受控地介入企业内部网中。VPDN允许远端用户按需介入所需要接入的网络。
VPDN组网示意图:
ip-1-----| L2TP tunnel
|----LAC-----------------Internet----LNS----Intranets
ip-2-----|
参考:
这个和我们的配置比较像
电信级路由器、VPN环境架设
其中,现有的DPC模块型号为DPCE-R-20/2XGE,它的光纤接口是sfp光口,需要额外加装sfp光模块才能连接双头光纤(一根收RX,一根发TX)。
光纤-RJ45网线接口的转化器:光纤收发器或光纤交换机,区别在于一光一电和一光多电,其中光纤接口有两种,一种是TX和RX分开的两个口,一种是TX和RX在一起的SFP接口,第二种需要加装SFP光模块。
linux 使用串口连接cisco设备console
参考 http://blog.sina.com.cn/s/blog_659b48590100n2ru.html
1、确定串口设备标识符
可以使用命令dmesg 来查看安装驱动的信息,其中普通串口设备一般名称为:ttyS,USB设备一般为ttyUSB,所以我们可以用如下命令查看已经连接上的串口设备:
dmesg | grep ttyS
例如:
lll@lll-L:~$ dmesg | grep ttyS
[0.569891] 00:06: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
[0.590846] 0000:00:16.3: ttyS4 at I/O 0xf0a0 (irq = 19, base_baud = 115200) is a 16550A
lll@lll-L:~$
这说明有2个串口设备,一个为ttyS0,一个为ttyS4
确定了串口设备的标识符后,使用minicom进行连接。
2、设置minicom:
sudo minicom -s
会弹出minicom的命令行菜单:
x Filenames and paths x
x File transfer protocols x
x Serial port setup x
x Modem and dialing x
x Screen and keyboard x
x Save setup as dfl x
x Save setup as.. x
x Exit x
x Exit from Minicom x
选择Serial port setup一项进行设置,其中我们要正确选择好串口编号,再将波特率设置为9600,并关闭硬件流量控制和软件流量控制,如下图:
A - Serial Device : /dev/ttyS0 我的机器只有一个串口,所以为0
B - Lockfile Location : /var/lock lockfile路径默认
C - Callin Program :
D - Callout Program :
E - Bps/Par/Bits : 9600 8N1 设置波特率 9600
F - Hardware Flow Control : No 关闭硬件流量控制
G - Software Flow Control : No 关闭软件流量控制、
设置完成之后键入 enter
设置完成之后,选择:Save setup as dfl 保存设置
退出minicom设置:Exit from Minicom
3、连接cisco设备
在linux上执行:sudo minicom
开启cisco设备,就可以在linux看到信息了。
此外还有图形化的串口连接工具:cutecom
参考:Ubuntu安装配置串口通讯工具minicom&&cutecom
lsmod | grep usbserial
//如果有usbserial,说明系统支持USB转串口,例如:
yzj@yzj-laptop:~/minicom$ lsmod | grep usbserial
usbserial 36264 3 ark3116
Windows使用串口连接Cisco设备console:
使用XShell建立串口连接,其中波特率设为9600,这个比较简单,完全图形化操作。可以在设备管理器中查看自己的串口设备。
重置思科3825路由器密码:
使用路由器密码恢复技术:
路由器一般加载配置的途径都是路由器的配置寄存器的值决定的,其值为0x2102时表示路由器加载用户的配置文件(startup-config),其值为0x2142时表示启动时忽略用户配置文件,一般路由器的配置寄存器的值为0x2102。
要想重新设置密码,就需要将路由器的配置寄存器的值设置为0x2142,然后重启进入路由器,再修改原先的密码,设置新密码。
具体步骤:
-
启动路由器,并在路由器启动完成前按下键盘上的“Ctrl+Break”组合键,之后进入ROMmon模式。(注意我们在win7超级终端下成功进入了ROMmon模式,要在进入解压IOS前按Ctrl+Break组合键。在win7+XShell下无法将Ctrl+Break组合键传入路由器,在Ubuntu+minicom的环境下仍待试验)
-
修改配置寄存器的值为0x2142【rommon1>confreg 0x2142】
-
重启路由器【rommon2>reset】,会重新进入路由器系统,在这个过程中会提示:【 Would you like to enter the initial configuration dialog? [yes/no]】,这里我们选择【no】
-
把配置文件拷贝到内存【Router#copy startup-config running-config】
-
配置新密码并保存配置,这部分参考:cisco3825配置实例 https://wenku.baidu.com/view/9dac4179a26925c52cc5bf1d.html
-
最后一定要记得将当前配置保存到初始配置【write或wr或copy running-config startup-config】
Cisco IOS常用命令:
参考:
命令不区分大小写,命令前加no可以取消配置。
思科路由器刷系统
-
寻找一种TFTP服务器软件(有CISCO公司的TFTPServer或3COM公司的3Cserver等,在升级较大IOS映象文件时,建议用3Cserver),安装在一台计算机上,将要升级的IOS映象文件拷贝到相关的目录中(例:D:\),并运行TFTP服务器软件,通过菜单设置Root目录为拷贝IOS映象文件所在目录(如D:\)。假设该计算机的IP地址为10.32.10.1;
-
连接路由器的console口与PC机的COM1,使用PC的xshell或超级终端软件访问路由器,将路由器的地址设为10.32.10.32(与计算机的IP地址同网段即可)。建议在进行IOS升级前将原有IOS文件备份下来,防止待升级的IOS文件存在问题不可用;
Router# dir flash: (查看目前IOS映象文件名,也可用Router#Show version)
Directory of flash:/
1 -rw- 5998292 C2600-I-MZ.122-11.BIN
8388608 bytes total (2390252 bytes free)
Router#
copy flash tftp(备份IOS文件)
Source filename []?c2600-i-mz.122-11.bin
Address or name of remote host []?10.32.10.1 (TFTP服务器地址)
Destination filename [c2600-i-mz.122-11.bin]?
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
„
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
5998292 bytes copied in 324.071 secs (18509 bytes/sec)
Router# -
对路由器进行IOS升级;
Router# copy tftp flash
Address or name of remote host []?10.32.10.1 (TFTP服务器地址)
Source filename []?c2600-i-mz.122-11.bin (需升级的新IOS映象文件名)
Destination filename [c2600-i-mz.122-11.bin]?
Do you want to over write? [confirm]
Accessing tftp://10.32.10.1/c2600-i-mz.122-11.bin...
Erase flash: before copying? [confirm]
Erasing the flash filesystem will remove all files! Continue? [confirm]
Erasing device... eeeeeeeeeeeeeeeeeeeeee ...erasedee
Erase of flash: complete
Loading c2600-i-mz.122-11.bin from 10.32.10.1 (via
Ethernet0/0): !!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
„
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[OK - 5998292 bytes]
Verifying checksum... OK (0xA0C0)
5998292 bytes copied in 318.282 secs (18846 bytes/sec)
Router#
恢复出厂设置:
1、在知道密码,能进入特许模式的情况下:
Router#erase startup-config //清除初始配置
Router#reload //重启路由器,回到出厂配置
2、在不知道密码,无法进入特许模式的情况下:
开机进入超级终端按住 Ctrl+Break
rommon1>confreg 0x2142
rommon2>i 或 reset
Would you like to enter the initial configuration dialog?[yes/no]:no或n
用户密码设置:
router> //用户模式
router>? //查看当前支持的命令,在任何模式下都可以查看帮助,在不同的模式下,可用的命令可能不同
router>show ? //在一个命令行后接?,可以查看此命令支持的参数,在不同模式下,同一个命令可能支持不同的参数
router>enable或者en //进入特许模式
router#
router#configure terminal //进入全局配置模式,一般的配置操作都在这个模式下进行
router(config)#
router(config)#hostname RouterName //更改路由器名称
RouterName(config)#
RouterName(config)#username cisco privilege 15 password 0 111111 //登录路由的用户名和密码,这里privilege 15表示最高权限
RouterName(config)#enable password 123456 //定义特许模式密码,注意,设置密码时如果使用了password关键字,则密码是明存在config文件中的,如果使用了secret关键字,则密码是MD5加密后存在config文件中的
RouterName(config)#line console 0 //定义控制台
RouterName(config-line)#
RouterName(config-line)#password 7654321 //设置控制台密码
RouterName(config-line)#exit //退到配置模式(另外可通过Ctrl+Z直接退到特许模式)
RouterName(config)#exit //退到特许模式
RouterName#wr或write或copy running-config startup-config //将当前配置保存到初始配置
RouterName#reload //重启路由器,其实配置好后不需要重启,是立即生效的
查看路由器的一些状态:
router#show run 或 show running-config //查看当前配置,只能在特许模式下查看
router#show startup-config //查看初始配置,,只能在特许模式下查看
router#show ip interface brief //查看网卡接口状态,带brief是查看简要信息,不带brief是显示所有信息
router#show version //查看IOS版本信息
router#show ip route //查看路由器的路由表
router#show ip route vrf vpna //查看名为“vpna”的vrf路由表
router#show ip bgp summary //查看BGP配置信息
router#show arp //查看ARP缓存表
允许远程telnet连接:
router(config)#line vty 0 4 //定义线路连接数5条
router(config-line)#login local //允许使用本地账号登录
router(config-line)#transport input telnet //允许telnet连接
router(config-line)#^Z
router#write
配置接口地址:
我们这次配置的路由器默认的两个接口为g0/0和g0/1,对于其他路由器,其接口名称还可能为f0/0, f0/1, .... , f0/0/0, f0/0/1, ... 这由网络接口配置决定。
这里的g和f指的是接口配置,表示GE接口和FE接口。FE是FastEthernet 的缩写,即快速以太网,是目前主流100M网络的称呼。也是通常说的百兆网。GE是GigabitEthernet 的缩写,即1000M传输速率的以太网。此外,还有TE接口(表示万兆网口)和E接口(表示普通的Ethernet接口)。
可以用在普通模式下用show interface(思科中兴,或者为show inter,可以用TAB补齐来查看到底是哪个)来查看各个接口的信息(华为华三用display interface)。
router>enable //进入特许模式
router#configure terminal //进入全局配置模式
router(config)#interface g0/0 //配置g0/0口地址,g0/1口地址配置方法相同,interface可以简写为int,或者用tab补齐
router(config-if)#description some-description //添加接口描述
router(config-if)#ip address 192.168.1.1 255.255.255.0 //定义ip和掩码
router(config-if)#no shutdown // 永久开启端口
router(config-if)#exit //退出接口配置
router(config)#exit
router#write //记得保存到初始配置,不然一重启就没有了
配置路由:
router(config)#ip route ip-dest mask {ip-next | interface-name interface-number} //配置一个路由
router(config)#ip route 0.0.0.0 0.0.0.0 {ip-next | interface-name interface-number} //配置默认路
router(config)#ip route vrf vpna ip-dest mask {ip-next | interface-name interface-number} //配置一个vrf路由
router#ping ip-dest
router#traceroute ip-dest
router#ping vrf vpna ip-dest
配置GRE Tunnel通道:
参考:路由器配置Tunnel通道 全文摘录如下:
路由器借助Tunnel端口实现隧道功能,允许利用传输协议(如IP)来传送任意协议的网络数据包。同其他逻辑端口一样,Tunnel端口并不特别指定传输协议或者负载协议,它提供的是一个用来实现标准的点到点的传输模式。由于Tunnel实现的是点对点的传输链路,所以,对于每一个单独的链路都必须设置一个Tunnel端口。
Tunnel传输适用于以下情况:
- 允许运行非IP协议的本地网络之间通过一个单一网络(IP网络)通信,因为Tunnel支持多种不同的负载协议;
- 允许通过单一的网络(IP网络)连接间断子网;
- 允许在广域网上提供VPN(Virtual Private Network)功能。
Tunnel端口配置操作步骤如下:
-
创建Tunnel端口并接入该端口的配置模式。与其他逻辑端口一样,第一次进入指定的Tunnel端口时,就创建了一个Tunnel端口。
router(config)#interface tunnel tunnel-number
//或者删除已创建的Tunnel端口
router(config)#no interface tunnel tunnel-number -
设置Tunnel端口的源地址。一个Tunnel端口需要明确配置隧道的源地址和目的地址,为了保证隧道端口的稳定性,一般将Loopback地址作为隧道的原地址和目的地址。在Tunnel端口正常工作之前,需要确认原地址和目的地址的连通性。
router(config-if)#tunnel source {ip-address | interface-name interface-number}
//或者取消Tunnel端口源地址设置
router(config-if)#no tunnel source -
设置Tunnel端口目的地址。
router(config-if)#tunnel destination {ip-address | host-name}
//或者取消Tunnel端口目的地址设置
router(config-if)#no tunnel destination
注意:在一台路由器上,不能使用相同的源地址与目的地址,创建两个相同封装模式的Tunnel端口。
-
设置Tunnel封装格式。Tunnel的封装格式就是Tunnel的载体协议。Tunnel端口的默认封装格式是GRE。当然,用于也可以根据实际使用情况来决定Tunnel端口的封装格式。
router(config-if)#tunnel mode {dvmrp | gre | ipip | nos}
//或者取消Tunnel端口封装格式设置,回复默认值
router(config-if)#no tunnel mode -
设置Tunnel校验。有些情况下,需要使用Tunnel校验来提供数据完整性的保证。默认情况下,Tunnel端口不进行校验。
router(config-if)#tunnel checksum
//或者取消Tunnel校验
router(config-if)#no tunnel checksum -
设置Tunnel端口的Key。设置Tunnel端口的Key在一定程度上可以确保Tunnel两端的安全性,同时也可以防范来自外部的恶意探测与攻击。只有在Tunnel封装格式为GRE的情况下,Tunnel端口的Key设置才起作用,因为此时在每一个GRE数据包中都会包含设置的Tunnel端口Key。
router(config-if)#tunnel key key-value
//或者取消Tunnel端口的Key设置
router(config-if)#no tunnel key key-value
注意:Tunnel的两端必须使用相同的Key设置才能正常通信。虽然封装格式为GRE的时候,每一个GRE数据包都包含这个Key,但是,依赖这个Key来获得安全保证的企图是欠考虑的。如果设置了Tunnel端口Key,那么,必须在所在的Tunnel端口上设置no ip mroute-cache才能支持ip multicast。
-
设置Tunnel接受规则。如果负载协议在维护数据包有序方面的功能不足(比如基于LLC2的协议),路由器允许设置Tunnel接收规则来丢弃收到的无序数据包。这项设置将有助于实现数据包有序传输。
router(config-if)#tunnel sequence-datagrams
//或者,取消按序接收设置
router(config-if)#no tunnel sequence-datagrams
注意:只有在Tunnel的封装格式为GRE的情况下,该项设置才有效。
-
返回至特权配置模式
router(config-if)#end
-
监控Tunnel端口。
//显示Tunnel端口状态
router#show interfaces tunnel tunnel-number
//打开Tunnel调试开关
router#debug tunnel
//关闭Tunnel调试开关
router#no debug tunnel
Tunnel在MPLS VPN网络上的应用
目的:在PE1上建立一个Tunnel导向CE1,并把它加入vpnb中(具体拓扑图参考本文后面的MPLS-我们的配置实例一章),使得CE1即在vpna中,又在vpnb中。
|-(G0/1:192.168.200.1)PE1 vpna
| |(G0/2:192.168.101.2)-(F0/1:192.168.101.1)CE1(F0/0:192.168.51.1)-------|
| | | vpnb
| |(G0/3:192.168.104.2)-(E0/1:192.168.104.1)CE4(E0/0:192.168.54.1)-------)------|
| | |
|-(G0/1:192.168.200.2)PE2 | |
|(G0/2:192.168.102.2)-(G0/1:192.168.102.1)CE2(G0/0:192.168.52.1)-------| |
| |
|(G0/3:192.168.103.2)-(F0/1:192.168.103.1)CE3(F0/0:192.168.53.1)--------------|
参考实例:GRE Tunnel with VRF Configuration Example
- Tunnel的两端:PE1(Tunnel0)-CE1(Tunnel0)要配置相同IP段的地址;
配置流程:
- 在PE1上建立Tunnel 0,并将它加入vpna
PE1(config)#int tunnel 0
PE1(config-if)#ip add 10.10.10.1 255.255.255.0
PE1(config-if)#tunnel source g0/2
PE1(config-if)#tunnel destination 192.168.101.1 //可不可以给10.10.10.2?
PE1(config-if)#no ip directed-broadcast
PE1(config-if)#ip vrf forwarding vpnb
PE1(config-if)#tunnel vrf vpna
我们曾尝试使用loopback端口作为tunnel源地址,目的方的loopback IP作为目的地址,但是无法联通到vpna网络中,于是只能使用PE1与CE1相连通的那个接口g0/2作为源地址,CE1与g0/2相连的IP:192.168.101.1(貌似也可以用CE1上的其他IP,只要能与PE1连通即可)。
- 在CE1上建立Tunnel 0(并配置ACL允许GRE Tunnel的数据通过与PE1相连的F0/1端口,我们配置了ACL反而无法同时联通vpna和vpnb)
CE1(config)#int tunnel 0
CE1(config-if)#ip add 10.10.10.2 255.255.255.0
CE1(config-if)#tunnel source f0/1
CE1(config-if)#tunnel destination 192.168.101.2 //可不可以给10.10.10.1?
- 配置CE1的路由表,因为CE1和PE1/PE2之间没有BGP路由协议,所以要配置静态的路由表
CE1(config)#ip route 192.168.103.0 255.255.255.0 10.10.10.1
CE1(config)#ip route 192.168.104.0 255.255.255.0 10.10.10.1
- 检查PE1和PE2的路由表,如果PE2的vrf vpnb路由表没有建立10.10.10.0 255.255.255.0的路由项,在PE1用redistribute connect命令将路由表通过BGP协议传递给PE2
PE1(config)#route bgp 111
PE1(config-router)#address-family ipv4 vrf vpnb
PE1(config-router-af)#redistribute connect
- 测试CE1和CE2/CE3/CE4是否都联通。
什么是ACL规则?
acl规则是Cisco IOS所提供的一种访问控制技术。
初期仅在路由器上支持,近些年来已经扩展到三层交换机,部分最新的二层交换机如2950之类也开始提供ACL的支持。只不过支持的特性不是那么完善而已。在其它厂商的路由器或多层交换机上也提供类似的技术,不过名称和配置方式都可能有细微的差别。
需要详读:cisco路由器配置ACL详解
从原理到思科设备的配置命令
思科默认添加了deny any的语句在每个ACL中,所以当我们设置了某个permit规则(access-list 1 permit host ip1)并在G0/1端口上启用后,就会默认拒绝所有的包,仅允许ip1的包通过,这个一定要注意。
未读完的文章:访问控制列表(ACL)基本的配置以及详细讲解
未读完的文章:配置在全局和VRF路由表之间的路由泄漏,无需使用下一跳
配置ACL规则,并在某个端口上启用的方法:
router(config)#
回环接口
回环接口是逻辑的接口,即虚拟的软件接口,并不是真正的路由接口,类似于PC中的回环接口,主要用于本地进程间的通信。在ospf路由协议中配置使用回环接口是为了确保在ospf进程中总有一个激活的接口,回环接口可以用于ospf的配置和诊断。
一个在路由器上创建并分配IP地址的逻辑接口(或有时被称为软件接口)。该接口是稳定的,如果配置了,其IP地址常用来作为路由选择协议如BGP和OSPF的路由
如果你不配置回环接口,路由器上的最高IP地址将成为此路由器的路由器ID.而此路由器ID则用于通告路由以及选举指定路由器(DR)和备份指定路由器(BDR).
每一台路由器创建一个 loopback 接口,并在该接口上单独指定一个IP 地址作为管理地址。并常作为BGP建立TCP 连接的源地址。出于安全考虑,所有的路由器在访问服务器的时候使用这些IP地址作为源地址。
作用:
- 测试,因为它永远都不会出故障。
- ID,在路由协议里可以用作LO的IP来表示路由器,并且不会变化。
配置IPSec Tunnel
在两个路由器R1和R2之间配置IPSec隧道,参考Dynamic to Dynamic IPsec Tunnel Configuration Example
配置IPSec VPN
路由表如何设置?如何自动寻址?
路由表学习笔记
摘要内容归纳如下,具体实例参考原文:
路由表是一个由路由表项组成的数据库,为诸如IPv4等其他子系统提供了多种接口,其中最重要的接口就是路由查找。
路由和ip都有作用范围:Host(本机)、Link(本地)、Universe(全局)。
特殊路由:在路由子系统中有两个特殊的路由表:一张表用于本地地址,存储了全部的本地地址,假设在该表中能查到匹配表项,则表明数据报是发给本机的;一张表用于全部其它的路由,路由表项由用户手工静态配置或由路由协议动态配置。在路由查找时先扫描本地路由表,仅仅有当查找该表未果的情况下,才会去查找还有一路由表,以确定能否够转发。
路由缓存:路由器的路由表可能有几十万个路由项,因此需要维护一张更小的表来缓存路由查找结果,以提高查找效率,这就是路由缓存。路由缓存分为两部分:一部分是与协议(如IPv4等三层协议)相关的缓存,这就是缓存框架部分,每一个元素被定义为一个由详细协议字段组成的集合;还有一部分是与协议无关的缓存,通常被称为DST,嵌套在缓存框架中,仅仅存储与协议无关的信息。
路由表和路由缓存不仅仅是容量和结构的不同,对象粒度也不同,查找算法也不同。
路由表的配置:
路由表可以静态配置,也可以通过路由协议动态配置。
思科路由器的路由表配置命令为:
router(config)#ip route ip-dest mask ip-next
router(config)#ip route 0.0.0.0 0.0.0.0 ip-next
Cisco交换机配置静态路由
待学习,整理到思科路由器命令一章中。
交换机的端口镜像与抓包
以思科为例:
例如,我想在f0/24端口上抓f0/1-23端口的包
配置如下:
Switch#conf t //进入全局配置模式
Switch(config)#monitor session 1 destination interface fastEthernet 0/24 //指定连接抓包主机的端口
Switch(config)#monitor session 1 source interface f0/1 - 23 both //指定端口1-23,both是进出的包都抓
很简单的设置就可以了,但这里有个小问题,就是做了镜像端口,连接这个端口就变成单向接收模式了,那么主机将无法上网了。那,如果想要远程连接抓包怎么办呢?就在这台主机上再加一块网卡就可以上网,也可以远程了!
合理配置Cisco权限
参考:合理配置Cisco权限
思科用户的权限等级从0-15,其中15是特许权限,即root权限。
配置问题汇总
配置AAA认证
路由器上无法添加路由表
如果是在配置了BGP路由协议的PE上无法添加vrf的静态路由表,这是因为需要进入bgp设置,将我们配置的静态路由才重新分布到address-family ipv4 vrf vpn-name中,随后最好再调用redistribute connect命令,将配置的静态路由传递给其他相连PE:
PE(config)#router bgp bgp-name
PE(config)#address-family ipv4 vrf vpn-name
PE(config)#redistribute static
PE(config)#redistribute connect
如果不是BGP等路由协议设置的问题,则进行如下检查:
-
首先show running-config,查看有没有no ip routing一项,如果有,no ip routing
-
其次,show interfaces,检查各个接口状态是否都是up,排除接口关闭的问题
-
再次,show arp,检查arp表,看看各个IP的ARP表项都有没有,如果缺少与某个接口相连的IP的arp表项,则说明问题就在这条通路上,可能是交换机,也可能是网线,或者路由器的接口硬件等
在我们的配置实践中出现了这样一种无法添加vrf静态路由的情况:
我们在PE1中做了如下配置:
router bgp 111
no synchronization
bgp log-neighbor-changes
network 192.168.101.0
network 192.168.103.0
network 192.168.200.0 mask 255.255.255.252
neighbor 192.168.200.2 remote-as 222
neighbor 192.168.200.2 update-source loopback0
no summary
!
...
!
以上配置中“neighbor 192.168.200.2 update-source loopback0”和“eighbor 192.168.200.2 remote-as 222”冲突,如果要用回环接口配置bgp,应该如下配置:
PE1(config)#router bgp 111
PE1(config-router)#bgp router-id 1.1.1.1 //本路由器的回环地址
PE1(config-router)#neighbor 1.1.1.2 remote-as 222 //PE2的回环地址
PE1(config-router)#neighbor 1.1.1.2 update-source loopback0
PE1(config-router)#no synchronization
PE1(config-router)#no auto-summary
Cisco交换机常见问题
VLAN
SPF
NAT
NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。 这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。 另外,这种通过使用少量的公有IP地址代表较多的私有IP地址的方式,将有助于减缓可用的IP地址空间的枯竭。在RFC 1632中有对NAT的说明。
工作原理参考百度百科和NAT原理与NAT穿越(介绍更详细,包括NAT和NAPT的区别;NAPT的分类:Symmetric NAT and Cone NAT; Cone NAT include Full Cone NAT, Address Restricted Cone NAT, Port Restricted Cone NAT; 穿越NAT的实现; ALG/UpnP/STUN/TURN/ICE)
关于RouterOS上的srcnat和dstnat:
-
srcnat是源地址转换,经常用于把内部网络的私网地址转换成公网地址,以便实现对公网地址的共用。例如我们从公司内网访问公网某个网站,就需要做srcnat,路由器或交换机把我们的内网地址转换为公网地址。
-
dstnat是目的地址转换,常用与把访问的目标地址映射到内网的私网地址,以实现公网用户对内网资源的访问。例如公网用户需要访问公司内网的某个服务器,就需要做dstnat。
//假定内网有一台WEB服务器:192.168.2.100,需要对外提供WEB资源,其中路由器的公网地址是172.16.0.2
[admin@MikroTik] > ip
[admin@MikroTik] /ip> firewall nat
[admin@MikroTik] /ip firewall nat> add chain=dstnat dst-address=172.16.0.2 proto
col=tcp dst-port=80 action=dst-nat to-addresses=192.168.2.100 to-ports=80
[admin@MikroTik] /ip firewall nat> print
Flags: X - disabled, I - invalid, D - dynamic
0 chain=dstnat action=dst-nat to-addresses=192.168.2.100 to-ports=80
protocol=tcp dst-address=172.16.0.2 dst-port=80
1 chain=srcnat action=masquerade
关于srcnat配置中action的选项(srcnat的应用方式):
- masquerade方式会自动寻找路由设备的IP地址去替代IP数据包的原地址。
[admin@MikroTik] > ip firewall nat
[admin@MikroTik] /ip firewall nat> add chain=srcnat action=masquerade
[admin@MikroTik] /ip firewall nat> print
Flags: X - disabled, I - invalid, D - dynamic
0 chain=srcnat action=masquerade
- src-nat方式会采用参数“to-addresses”中的特定值去替代IP数据包的原地址
//路由器的公网地址是172.16.0.2,一般to-addresses要设置成路由器的公网地址,否则就收不到回复的数据包
[admin@MikroTik] /ip> firewall nat
[admin@MikroTik] /ip firewall nat> add chain=srcnat action=src-nat to-addresses=172.16.0.2
[admin@MikroTik] /ip firewall nat> print
Flags: X - disabled, I - invalid, D - dynamic
0 chain=srcnat action=src-nat to-addresses=172.16.0.2
参考:ROS Dst-Nat后内网不能通过公网IP访问内网服务器解决方法、试论nat转换方式下的src-nat、dst-nat和映射、回流的关系、ROS中NAT应用 (srcnat和dstnat的区别和设置方法,NAT实验举例,包括ROS构建VPN服务器,并利用VPN服务器的NAT功能对不同的VPN授
权用户进行不同的访问限制,同时VPN服务器只具备单个网卡接口)
snmp-server
SNMP协议是一种在IP网络中管理网络节点(如服务器、工作站、路由器、交换机等)的标准协议。SNMP能够使网络管理员提高网络管理效能,及时发现并解决网络问题以及规划网络的增长。网络管理员还可以通过SNMP接收网络节点的通知消息以及告警事件报告等来获知网络出现的问题。
SNMP管理的网络主要由三部分组成:
- 被管理的设备
- SNMP代理
- 网络管理系统(NMS)(监控中心)
它们之间的关系如上图所示。
- 网络中被管理的每一个设备都存在一个管理信息库(MIB)用于收集并储存管理信息。通过SNMP协议,NMS能获取这些信息。被管理设备,又称为网络单元或网络节点,可以是支持SNMP协议的路由器、交换机、服务器或者主机等等。
- SNMP代理是被管理设备上的一个网络管理软件模块,拥有本地设备的相关管理信息,并用于将它们转换成与SNMP兼容的格式,传递给NMS。
- NMS运行应用程序来实现监控被管理设备的功能。另外,NMS还为网络管理提供大量的处理程序及必须的储存资源。
一些名词解释:
- OID: OID(Object Identifier,对象标识符又称为物联网域名)是由ISO/IEC、ITU-T国际标准化组织上世纪80年代联合提出的标识机制,采用分层树形结构对任何类型的对象(包括实体对象、虚拟对象、复合对象等)进行全球无歧义、唯一命名。每一类东西有相同的OID。
- 关于设备OID和MIB的获取:思科华为交换机OID获取
- MIB: 管理信息库(MIB,Management Information Base)是TCP/IP网络管理协议标准框架的内容之一,MIB定义了受管设备必须保存的数据项、允许对每个数据项进行的操作及其含义,即管理系统可访问的受管设备的控制和状态信息等数据变量都保存在MIB中。每个受管设备都有一个MIB。
- SMI: Structure of Management Information:管理信息结构,用于定义通过网络管理协议可访问的对象的规则。SMI定义在MIB中使用的数据类型及网络资源在MIB中的名称或表示。
- snmp community: SNMP通信字符串,相当于snmp的密码。没有路由器配置权限是看不到团体字的。一般路由器和交换机厂商安装的SNMP的默认通信字符串常为public(只读)和private(读写)。通信字符串主要包含两类命令:GET命令,SET命令。GET命令从设备读取数据,这些数据通常是操作参数,例如连接状态、接口名称等。SET命令允许设置设备的某些参数,这类功能一般有限制,例如关闭某个网络接口、修改路由器参数等功能。但很显然,GET、SET命令都可能被用于拒绝服务攻击(DoS)和恶意修改网络参数。SNMP2.0和SNMP1.0通信不加密,SNMP3.0(2012年之后)使用DES(DataEncryptionStandard)算法加密数据通信;另外,SNMP3.0还能够用MD5和SHA技术验证节点的标识符,从而防止攻击者冒充管理节点的身份操作网络。
具体实现NMS的软件有很多,常用的有:
solarwinds
收费软件,一个专业的网络管理软件,可以监控,发现网络设备。
nagios
安装
Nagios[ˈnædʒiɔs]是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设备,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
Nagios Open source(在linux下手动编译安装,官网上有官方帮助文档):
- Nagios core: the core monitoring engine and a basic web interface.
- 安装帮助 包含了Linux各个版本下的详细安装说明,从NagiosCore到Nagios Plugins的详细安装配置。
- 我们在Ubuntu Server 1604上使用aliyun源安装时,发生了找不到php7.0包的情况,切换回官方源后成功。但是我们的Ubuntu 1604桌面版使用aliyun源却并没有这个问题。
- Nagios Core Plugins: the latest Nagios Core plugins package (50 plugins). 功能插件,官网上链接下载的缺少文件,从github上下:https://github.com/nagios-plugins/nagios-plugins
- Nagios Core Frontends: a variety of Open Source front-ends by community. 前端数据可视化。
- Nagios Core Addons Projects: additional projects that extend Nagios Core functionality,包括NCPA/DNX/NRPE/NRDP/NSCA/NSClient++/Nagiosgraph/NSTI/NConf/NDOUtils/BPI/NagVis项目。
Packaged Nagios Distributions (提供打包好的虚拟机镜像,开机即用,或者CentOS安装包手动安装,这个是收费版,只提供60天的试用):
-
Nagios XI: Monitoring of all mission-critical infrastructure components on any operating system. 这是Nagios Core的一个增强版,提供了web配置界面和更多的功能。提供了封装好的.ova(OVA是将VMDK和OVF打包后的文件格式,其中OVF仅仅是虚拟机的配置信息,VMDK是虚拟机的虚拟硬盘文件)或.vhd文件,直接用vmware/Hyper-V等虚拟软件打开就可以使用,也可以下载linux安装包在CentOS下手动安装。
- 安装帮助。将.ova用vmware打开后,启动虚拟机,默认的用户名口令在NagiosXI的图标右下角有:root:nagiosxi,查看虚拟机的IP地址,在其他与之联通的机器上打开浏览器输入这个IP,就可以进入到NagiosXI的配置管理页面。
- 使用指南:在路由器上开启snmp-server,配置上nagiosxi的IP地址,再从nagiosxi的配置管理页面将路由器添加进去就可以了。
-
Nagios Log Server: Make sense of your data. See security threats, audit any system, identify trends and more.安装帮助
-
Nagios Network Analyzer: Want to find bandwidth bottlenecks? We can tell you who, what, when and where.安装帮助
介绍了Nagios的主要功能、工作原理,以及一个CentOS系统下的实验配置实例。
监控网络设备
参考:
配置Nagios监控网络设备
以华三交换机为例
Cisco交换机端的配置方法、没有check_snmp模块的解决办法、没有MRTG日志错误的解决办法……
介绍了Cisco、华为、港湾Harbour交换机、路由器的SNMP配置方法
介绍了Nagios的结构说明、功能特性、监控原理和安装配置(目录和相关配置文件说明、配置文件间的关联、配置设定、默认模板配置文件、定义主机配置实例、定义服务配置、运行与维护、性能分析图标的作用、利用NRPE扩展Nagios功能、管理平台界面介绍、当前状态界面介绍、系统主机界面介绍、)
- How to monitor a router/switch
- How to monitor a Windows machine
- How to monitor a Linux/Unix machine
- How to monitor a publicly available service(HTTP, FTP, SSH, etc)
在安装好Nagios服务器后,配置交换机、路由器、服务器或者PC等设备的SNMP协议,将它们加入到Nagios的监控中。
交换机或路由器配置(以思科为例):
-
登录到核心设备CISCO上,进入命令管理模式。
-
输入snmp-server community lixinwei RO命令来设置一个SNMP团体名为lixinwei,并且团体权限为“只读”。
-
输入snmp-server trap-source FastEthernet0/1命令来指定以FA0/1端口为监控源接口,如果不输入此行也是可以的,将以设备自身的router ID作为监控源。
-
输入snmp-server contact lixinwei1973@163.com命令设置SNMP协议的联系人,这里输入网络管理员的电子邮件地址即可。
-
输入snmp-server host 10.91.30.45 lixinwei命令来设置管理机为10.91.30.45,同时容许该管理机以团体名lixinwei访问。
实际上设置完这个命令后我们通过PRTG依然可以在别的IP地址的计算机上读取出Cisco设备的SNMP信息,这是因为我们设置的团体名为RO只读权限,当然默认很多团体名权限设置为public读写权限,这是存在安全隐患的,容易造成设备被黑客入侵,所以提醒设置的读者一定要把自己的团体名community改成RO只读权限。
- 输入snmp-server enable traps命令启动监视控制功能。
我们在一个开启了MPLS VPN服务的路由器上启用这个命令,出现错误:“cannot enable both sham-link state-change interface traps. New sham link interface trap not enabled.”。解决方法,发送Trap时采用trapcomm作为字串,并将loop接口的IP地址作为SNMP Trap的发送源地址,事先别忘先设置lookback0 的ip:
PE1(config)#snmp-server host 192.168.53.11 traps trapcomm
PE1(config)#snmp-server trap-source loopback0
PE1(config)#snmp-server enable traps
- 保存设置并退出后即可完成在cisco设备上的所有配置。
Nagios服务器配置:
- 在/usr/local/nagios/etc/nagios.cfg配置文件中启用
注意,在我们安装好nagios后,点击Problems/services或hosts出现错误:Error: Could not read object configuration data!解决方法:
- 检查配置文件有没有错误:./usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
- 检查nagios的日志文件:/usr/local/nagios/var/nagios.log,发现有如下错误:"qh: Failed to init socket '/usr/local/nagios/var/rw/nagios.qh'. bind(0 failed: no such file or directory",我们在/usr/local/nagios/var/并未发现rw文件夹和nagios.qh文件。
TACACS+
Terminal Access Controller Access-Control System (TACACS), 终端访问控制器访问控制系统是一个比较老的认证协议,现在的替代品是TACACS+和RADIUS。TACACS+使用了传输控制协议(TCP),而RADIUS使用了用户数据报协议(UDP)。一些管理员推荐使用TACACS+协议,因为TCP更可靠些。RADIUS从用户角度结合了认证和授权,而TACACS+分离了这两个操作。
这只是个协议,各大公司有各自的商业实现。
Cisco Secure ACS
思科的TACACS+实现。
思科安全访问控制服务器(Cisco Secure Access Control Sever)是一个高度可扩展、高性能的访问控制服务器,提供了全面的身份识别网络解决方案,是思科基于身份的网络服务(IBNS)架构的重要组件。Cisco Secure ACS通过在一个集中身份识别联网框架中将身份验证、用户或管理员接入及策略控制相结合,强化了接入安全性。这使企业网络能具有更高灵活性和移动性,更为安全且提高用户生产率。Cisco Secure ACS 支持范围广泛的接入连接类型,包括有线和无线局域网、拨号、宽带、内容、存储、VoIP、防火墙和 VPN。Cisco Secure ACS 是思科网络准入控制的关键组件。
适用场合:
- 集中控制用户通过有线或者无线连接登录网络
- 设置每个网络用户的权限
- 记录记帐信息,包括安全审查或者用户记帐
- 设置每个配置管理员的访问权限和控制指令
- 用于 Aironet 密钥重设置的虚拟 VSA
- 安全的服务器权限和加密
- 通过动态端口分配简化防火墙接入和控制
- 统一的用户AAA服务
参考:
在VMware Workstations或vSphere下新建CentOS 64位虚拟机,然后加载安装此镜像即可,ACS已经安装好了,装好即用,可直接登录网页配置使用。已经下载到网盘了。
详细介绍了ACS如何使用,以及如何在网络设备中配置
介绍了ACS在安装过程中的主备设置问题
一个企业网络部署实例
Syslog
Syslog常被称为系统日志或系统记录,是一种用来在互联网协议(TCP/IP)的网络中传递记录档讯息的标准。这个词汇常用来指实际的syslog 协议,或者那些送出syslog讯息的应用程式或数据库。
syslog协议属于一种主从式协议:syslog发送端会传送出一个小的文字讯息(小于1024字节)到syslog接收端。接收端通常名为“syslogd”、“syslog daemon”或syslog服务器。系统日志讯息可以被以UDP协议及或TCP协议来传送。这些资料是以明码型态被传送。不过由于SSL加密外套(例如Stunnel、sslio或sslwrap等)并非syslog协议本身的一部分,因此可以被用来透过SSL/TLS方式提供一层加密。
Cisco设备会根据网络事件导致的结果,来生成系统日志消息。每个syslog消息中都包含一个严重级别和一个特性。很多网络设备都支持syslog其中包括路由器、交换机、应用服务器、防火墙和其他网络设备。
(思科的?)syslog消息格式:系统消息由一个百分号开始,其结构如下所示。
- %FACILITY-SUBFACILITY-SEVERITY-MNEMONIC:Message-text
- Facility(特性):由2个或2个以上大写字母组成的代码,用来表示硬件设备、协议或系统软件的型号。
- Severity(严重性):范围为0~7的数字编码,表示了事件的严重程度。
- Mnemonic(助记码):唯一标识出错误消息的代码。
- Message-text(消息文本):用于描述事件的文本串。消息中的这一部分有时会包含事件的细节信息,其中包括目的端口号、网络地址或系统内存地址空间中所对应的的地址。
http://blog.csdn.net/needle2/article/details/6826523
syslog是UNIX系统中提供的一种日志记录方法(RFC3164),syslog本身是一个服务器,程序中凡是使用syslog记录的信息都会发送到该服务器,服务器根据配置决定此信息是否记录,是记录到磁盘文件还是其他地方,这样使系统内所有应用程序都能以统一的方式记录日志,为系统日志的统一审计提供了方便。
linux系统中syslog记录的日志格式为:月 日 时:分:秒 主机名 标志 日志内容
在linux下提供了sysklogd的syslog服务器的实现,可以记录本机日志也可以接收(syslogd的-r选项)和转发(syslogd的-h选项)来自外部的日志。
syslog的发送端:路由器、交换机、服务器或主机(需要安装syslog客户端)
发送端配置
思科设备配置
device#conf t
device(config)#logging on
device(config)#logging a.b.c.d //日志服务器的IP地址
device(config)# logging facility local1
//facility标识, RFC3164 规定的本地设备标识为 local0 - local7
device(config)#logging trap errors //日志记录级别,可用"?"查看详细内容
device(config)#logging source-interface e0 //日志发出用的源IP地址
device(config)#service timestamps log datetime localtime
//日志记录的时间戳设置,可根据需要具体配置检验
device#sh logging
device(config)#logging count //Count every log message and timestamp last occurance
device(config)#logging snmp-authfail //
device(config)#logging buffered 262144 debugging //Set buffered logging parameters
device(config)#logging rate-limit all 10 expect warnings //set messages per second limit
device(config)#logging console critical //set console logging level
接收端配置
syslog的接收端:syslog服务器
配置rsyslog程序(即是服务器,可以接受Linux或Windows服务器,路由器,交换机以及其他主机发送来的syslog,也是客户端,可以向其他syslog服务器发送日志)、创建日志接收模板、发送windows日志到一个远程的rsyslog服务器
配置rsyslog程序:
路由器操作系统
通过路由操作系统,可以将PC变成一台路由器,或者可以在虚拟机上安装,将一台虚拟机变成路由器。
MikroTik RouterOS
MikroTik RouterOS是一种路由操作系统,是基于Linux核心开发,兼容x86 PC的路由软件,可以安装到PC上将标准的PC电脑变成专业路由器,也可以安装到虚拟机里。
RouterOS的管理方式有本地终端命令行管理,远程telnet,web页面管理以及winbox管理。
从浏览器登录RouterOS(IP地址),就可以进入到web页面管理,在登录页下方有winbox loader的下载链接。