多ISP接入之高级策略 原创:wildlee
我们现在面对的环境是这样的,路由器PolicyRouter分别接入ispA与ispB,并从不同的ISP获得相应的IP地址池,现在我们要对这个网络实现高可靠,高可用性,其技术细节我们要做到对链路智能判断与切换,ip 分组负载,策略NAT并设计相应的策略路由。难的不是单个技术实现,是组合技术,实现完美的方案。
ispA:1.1.1.6~1.1.1.10
ispB:2.2.2.6~2.2.2.10
第一部分实现方法
1. 链路智能判断
我们为什么要进行对外的链路判断,我想大家对这个很清楚。如果对外的连接在某处被中断,那么相应被发送到此链路上的IP分组就要被丢包,最终造成网络应用失败。在应用动态路由的网络中,由于路由协议的HELLO机制,它能动态的做出判断与决策,所以在应该动态路由协议的网络中,我们的IP分组不至于走上绝路。但在现实中让我们的网络与ISP用路由协议交流,保证我们的网络质量很难。
当我们的网络在没有使用路由协议的情况下在连接到ISP,于是它不在有智能性。上图中我们以串行链接到ISP,在串行连接中不管本地接口故障还是远端ISP故障,他们之间的链接问题将导致本地相应接口的UP与DOWN,为什么能感知链路呢?因为在串行中链接中,虽然没有运行路由协议,但设备之间还是有一种报文在交互着,它就是Keepalive,这时如果本地有多条默认路由,也就不至于使IP分组路由失败,但是如果串行之间如果有其它的节点中转设备,如光电转换器等,情况会怎么样就难说了。
在以太网连接中,它是最死板的连接,因为两个设备之间连接没有任何报文交互,就算对端相连接的接口挂掉,只要我本路由的接口OK,不此影响此路由做任何改变。
最后我在说两句在:路由器中如果接口有故障,那么与此接口相关的路由条目将消失,结果就是IP分组转发下一跳发生变化。图中如果PlicyRouter与ISP之间连接正常,但ISP内部出了问题,PolicyRouter就算是用串行连接也是无法得知的。对于内部的IP分组还是会发到此ISP。我们要做本质的认识:网络的可连接性判断体现在交互上-协议语言交流,我今天无故抽了你两巴掌,你决对会反击我,证明你还有拥有人的本性-肢体语言交流。没有反应的那是死人,连接断开。
2. IP分组负载
这个是要我们把分组按不同的类,发向不同的ISP,图中只有一个内部网络,有多个内部网络可以以网络号分类,把不同的内部网络流量转发到不同的ISP。当然你也可以使用扩展ACL,做基于源目,协议,端口,分组大小的转发。我交你ISP钱,不给你走流量,你以为我傻。
3. NAT策略
在做NAT策略的时候,我们要把用ispA地址做源地址转换的流量转发到ISPA走,用ispB地址池做源地址转换的流量转发到ISPB,如果转发出错,通信就变成了单向通信了,因为ISPA或ISPB没有对方目标网络返程路由。这里有一个知识很重要,为了实现网络可用,当判断出其中一个ISP不可达时,就要切换让流量从另外的一个ISP转发流量,同时NAT应能智能反应,将以另一个ISP的地址池转换源地址。
第二部分技术实现原理
上面讲到没有交互的连接中,让本地路由IP分组迷失了远航的方向,但是面对强大的Internet,我们怎么能束手就擒。在今天日互联网中,网络应用大部分都是基于C/S模型。其先者也是利用了此特性并开发了相应的工具-网络质量检测,工具是TRACK与Ip SLA技术,在华为中这个称TRACK与QNA吧!不管怎么说,我们要的是技术原理,他们爱怎么叫怎么叫吧。
这里如果系统的分下,就按我从网上看的那个文档来,分为三个模块。分别是应用模块、TRUNK模块、监测模块。
应用模块,这个不用我多说,网络中所有的设备都可以看成是应用模块,如果一个路由、主机、服务器等,因为他们可以对不同的请求做出不同的反应,如对一个设备进行ICMP,对一个HTTP主机进行80端口连接请求,基于网络的应用,这些目标设备肯定要返回结果,从这些结果中,都能反应网络的可达性,也就是经过哪个ISP可以到达目标。这个远远要比我们只做从本地路由到ISP路由这段距离可达性判断要强。
TRACK怎么说呢,我感觉它是判断策略的执行者也是探测结果的提供者。
SLA那就是监测策略,对网络进行各种探测的策略,如我是要对目标进行ICMP请求,来确定网络的可达性,还是用一个请求DNS报文,来确定呢?我要按一个什么规则来实现,比如多少秒发送一次此探测报文,什么时候进行探测等等。通过这些工具,我们可以实现一些很复杂的应用与策略。
最后我们我们还要说一个东西,那就是监测结果的使用者,一些网络应用根据此结果做出动作,如EEMVRRPROUTE-MAP等,一会我们将这个策略结果用到ROUTE-MAP中。在EEM中使用这些策略结果更好的了,这个技术刚了解到,理解为就是收集一些路由器性能反应、日志结果等,通过脚本编程,实现一个动态配置路由的功能。这里不在细论了,细节很多,建议大家看书。[ROUTE-MAP看TCP/IP路由技术路由映射一章][LSA-TRACK网友发的新版NP路由技术一书中讲的不错][EEM大家GOOGLE],IP分组负载与NAT策略直接在配置命令中解说。
第三部分PolicyRouter配置高级策略
===========================================
interface FastEthernet0/0
ip address 192.168.1.1 255.255.255.0
ip nat inside
ip policy route-map wildlee
interface Serial1/0
ip address 1.1.1.2 255.255.255.0
ip nat outside
interface Serial1/1
ip address 2.2.2.2 255.255.255.0
ip nat outside
access-list 1 permit 192.168.1.0 0.0.0.255
===============================================
上面应该没有什么好说的,除了配置了IP地址,进行NAT必须的INSIDE与OUTSIDE指定,在接口F0/0启用了策略路由,最后还定义了一个ACL语句,用来匹配网络中的特定流量。这里我要是强调一点路由策略是对路由协议的报文做修改,作用于控制层面;而策略路由是对IP分组动作,作用于数据层面。
===============================================
ip sla 1
icmp-echo 1.1.1.1 source-interface Serial1/0
timeout 250
frequency 30
启用SLA并给此探测策略命名其编号为1,后面的连续三条命令定义了整个SLA探测策略,由探测类型、探测目标ip、源ip、超时时间与频率构成。timeout值是ICMP分组往返时间最大值,如果在此时间内没有收到报文可认为是链路DOWN.这个值单位是MS。frequency是发送ICMP探测报文频率时间,这样如果链路正常,那目标定义的目标IP,将在每30S收到一个ICMP请求.单位是S。
ip sla schedule 1 life forever start-time now
怎样调度SLA监测策略1,life定义了这个这个监测策略的存活时间,forever代表永远活动,那么SLA策略对象1中的目标IP将永远会每隔30S收到一个ICMP请求,START-TIME定义探测策略1何时被执行,值为now立即开始对目标进行探测。
track 5 rtr 1 reachability
TRACK命令后面的5是对跟踪对象进行命名,rtr[Response Time Reporter (RTR) ]是对探测策略1的响应时间进行报告,后面再加一个参数reachability来确认网络的可达性.
ip sla 2
icmp-echo 2.2.2.1 source-interface Serial1/1
timeout 250
frequency 30
ip sla schedule 2 life forever start-time now
track 10 rtr 2 reachability
===================================
上面功能实现了一个非基于动态路由协议、非KEEPALIVE、非CDP协议的对链路的可达性的一个判断功能,具体的详细配置大家看看书,还有不少其它内容。
===================================
route-map wildlee permit 10
match ip address 1
set ip next-hop verify-availability 1.1.1.1 1 track 5
set ip next-hop verify-availability 2.2.2.1 2 track 10
PBR策略与此探测对象进行联动,根据探测对象结果执行PBR策略语句。
==================================
这里定义PBR策略路由,用来实现一个对链路的智能切换,将trank对象结果与PBR策略进行联动。如果对象结果是不可达,那么将拒绝执行此SET策略命令,匹配下一条SET语句。set语句中被标记为红色的1与2要注意,这个并非与SLA号有关系,这个是set语句执行顺序编号,号码越小将被优先执行{set ip next-hop verify-availability [next-hop-address sequence track object]}。如果有多个内部网络,可以在每个接口上执行这个策略,这个东西是非常灵活的,要看你怎么用。如果单单使用Set ip next-hop verify-availability ,它是基于CDP协议判断工作的。
===================================
ip nat pool A 1.1.1.6 1.1.1.10 netmask 255.255.255.0
ip nat pool B 2.2.2.6 2.2.2.10 netmask 255.255.255.0
ip nat inside source route-map isp1 pool A
ip nat inside source route-map isp12 pool B
route-map A permit 10
match ip address 1
match interface Serial1/0
route-map B permit 10
match ip address 1
match interface Serial1/1
===================================
这里就是NAT策略了,如果原本发送到ISPA的流量被转换成地址池A,现在ISPA不可达了,那么策略ROUTE-MAP WILDLEE 就会将流量发送到ISPB,如果NAT没有一个判断,这样造成一个NAT错误 源转换。为了实现其智能功能,我们将NAT的源变成ROUTE-MAP策略源。其中match interface 很难理解,一开始我朋友认为它是检测接口UP与DOWN的,悲剧!我在TCP/IP路由技术书上看到它是这么说的
“匹配被指定下一跳接口的路由”很让我蛋疼的一句话,上面还写着用于重分配,我一直以为是作用于路由分组,没有想到在NAT中对IP分组也有作用。我感觉它的意思就是匹配所以发送到那个接口的分组,不论任何分组。
这里我在把我朋友慕容兄的话引进来,大家怎么理解都行”老实说,路由分组和数据分组,其实,很少的地方有区分,除了ip包头的tos字节有,一般很少去区分这里 我认为就是指流量 。 我觉得 就可以理解为 出接口 从这个接口出的流量 ,因为, 咱们很少看到说 有故意为路由流量来做的策略,当然,可能bgp较多 ,路由流量的策略也是为数据流量服务 “.
网上一位朋友说的感觉比错:“match interface interface_name 在NAT中用来基于不同的输出接口选择不同的全局地址池。”
===================================
第四部分route-map的知识
1.set ip default next-hop与set default interface指在路由表中没有目标网络的路由条目时,路由无法转发此分组,这个时候set ip default next-hot或set default interface将被执行,分组将被发送到指定的接口。这里很重要的一点要知道默认路由不可以看成是未知网络路由条目的显式路由。set ip default next-hop如果指定了多个下一跳地址,将使用与本路由邻接的第一个下一跳地址,不可达时尝试下一个ip地址。而set default interface 指定了多个接口的时候,将依次匹配接口状态为up的接口进行分组转发。对于路由表来说优先级比较低,实际中,我们可以将这样的分组转发到一个null 0接口,用来减小路由器处理未知目标分组所花费的代价。
下图是我在PolicyRouter接口f0/0加了策略并DEBUG出的信息,可以看到因为PolicyRouter有目标网络的路由条目,所以策略被拒绝执行。
HOST:Ping 1.1.1.1 repeat 1
*Mar 1 00:36:02.991: IP: s=192.168.1.2 (FastEthernet0/0), d=1.1.1.1, len 100, FIB policy match
*Mar 1 00:36:02.995: IP: s=192.168.1.2 (FastEthernet0/0), d=1.1.1.1, len 100, FIB policy rejected(explicit route) – normal forwarding
2. set ip next-hop 可以说是不用查路由表就直接转发报文的策略,因为它的优先级高于查路由表,所以不管是路由表中有此目标网络路由条目,还是没有此目标网络路由条目,被匹配的IP分组都将被转发到特定接口,如果接口挂了,那将被执行正常转发。蛋疼的是TCP/IP一书中这么说”当存在指向目标网络的显示路由时,为匹配成功的报文设置一下跳路由器地址”,难道没有显式路由的时候,就不执行了吗?
下图是在PolicyRouter没有目标网络条目的情况下,我们用主机HOST对目标5.5.5.5执行ping.PolicyRoute策略执行的是set next-hop。
HOST:Ping 5.5.5.5 repeat 1
*Mar 1 00:53:46.867: IP: s=192.168.1.2 (FastEthernet0/0), d=5.5.5.5, len 100, FIB policy match
*Mar 1 00:53:46.867: IP: s=192.168.1.2 (FastEthernet0/0), d=5.5.5.5, g=1.1.1.1, len 100, FIB policy routed
而set interface 命令与set ip next-hop不同,此策略优先级同样比路由表要高。这个set语句与TCP/ip路由技术一书中说的情况相同,如果没有目标网络显式路由条目,将拒绝执行语句,此语句被忽略。其次对于默认路由我测试的时候,默认路由可以充当未知目标网络显式路由条目,对set interface命令有效,而书中说无效。 如果是直连路由的话,还要对目标IP进行MAC请求,如果获取不到目标IPMAC无法封装,策略失败。
3.在TCP/IP一书中说到如果设置了一下跳接口的时候,没有执行set ip next-hop verify-availability,被匹配的分组被发送到指定接口,如果接口DOWN掉,将不能在进行正常路由转发,除非配置了此命令,但在实验中我测试是可以正常转发的,这个有等大家验证。
4.不要将配置在接口中的策略里设置match interface.引慕容兄的话:”policy-map 是要设置出接口的 ,完你先匹配出接口,那不蛋疼么”.
5.对接口进行IP分组route-map策略时,如果有多个match语句,要同时匹配才会触发set动作。如果route-map 用的是deny语句,那么被匹配的IP分组将不被执行set动作;其次route-map不能策略出方向上的流量。
6.当目标IP分组地址是本路由器的接口地址,我们不能通过SET IP NEXT-HOP设置下一跳 策略。在路由器中,流量分穿越流量[ip分组的源或目标地址非本路由器接口地址]与自身流量[ip分组的源或目标地址,总有一个是路由接口的地址];如果在路由器中开启了ip local policy route-map wildlee,可以策略路由自身流量的出访问,但无法对入方向流量进行策略.
7.set ip next-hop verify-availability此命令不是对本地接口状态进行验证的,而是验证与对端相连接的接口,多用于以太连接,因为以太没有相关的链路状态验证机制。当用在策略路由中设置下一跳的时候,如果对端口接口不可达,则拒绝执行策略,进行正常的路由的转发,在不设置“set ip next-hop verify-availability”命令的情况下,如果与之连接的对端设备接口down后,策略将依然执行[目标接口是一个以太接口时,当ARP条目失效时,无法对报文进行封装],就算报文转发失败,也不会进行正常的路由转发。如果是路由器自身的接口[策略指定的出接口]down掉,路由器直接拒绝执行策略,进行正常的路由转发。
今天先到这了,上面案例很成功,没有使用其它的静态与默认路由,这个问题与我的朋友Mr.w弄了好几天,各位高人如果发现问题请指教!谢谢
转载请注明:爱开源 » 多ISP接入之高级策略