首页 > 技术文章 > 宿主NAT

meili333 2020-07-17 08:11 原文

啥是宿主NAT

我们人理解,就是部署了route-mappbr策略路由的NAT

可以实现具体数量走向控制的NAT,实现负载均衡的同时,又存在冗余备份

 

应用场景,当出现单网关双线接入/多线接入时。

 

原理:定义PBR指定数据流走向,NAT调用route-map,而不再是list,实现策略部署

我们通过一个实例来看的更加详细一些

 

 

 

 R2上做NAT共享上网,电信和联通上都配置有loopback接口,模拟外网

需求:

192.168.1.0网段,默认走左边,故障走右边

192.168.2.0网段,默认走右边,故障走左边

这里的故障,包括(本地接口,以及上行接口)

 

那要怎么做呢?

先分析后动手,

1 抛开NAT部份,只看PBR,数据分流,在R2F1/0接口中定义policyacl抓取两个不同的网段,定义route-map 指定set ip next-hopOK

2 nat部份,对于下面的那个网段,我如何去定义它和NAT的关联?又上它强制性的走一边呢?(NAT部份是本实例的重点)

3 对于本地接口我可以感知down,而对于远端(中间有中继设备,比如光电转换..)我又如何知道呢?所以这个时候需要 sla + track的使用,那又是如何和我的route-map 挂接的呢?

 

带着这三个问题,我们一起来看一下,咱们一点一点来,

IP地址部份,我就不用多说了,按照平时的惯例即可

 

 

1——定义pbr 

Standard IP access list 1

    10 permit 192.168.1.0, wildcard bits 0.0.0.255

Standard IP access list 2

    10 permit 192.168.2.0, wildcard bits 0.0.0.255     //两个标准的ACL抓取网段
 

route-map wfy permit 10

 match ip address 1

 set ip next-hop 12.0.0.1     //强制指定下一跳方向及地址

route-map wfy permit 20

 match ip address 2

 set ip next-hop 23.0.0.3

 

2——NAT部份

还是要使用route-map,为什么?方面我在后面调用(NAT调用route-map)

 我先定义4route-map,注意,是4条,不同的名字,

route-map a permit 10

 match ip address 1

 match interface FastEthernet0/0

route-map b permit 10

 match ip address 1

route-map c permit 10

 match ip address 2

 match interface FastEthernet0/1

route-map d permit 10

 match ip address 2

为什么要这么做?

这个要和前面的PBR关联起来,以及route-map 的原理相关

看张图,和route-map a,b对比一下就知道了

 

 

 

 

红色为route-map a

我们要求这个网段去访问外网时走左侧,并且PBR也是这样设置的,

那么走左侧都具备哪些因素呢?

网段肯定是要有的,匹配match ip add 1

还有其它的吗?如果没有,那如何区分两边的走向?

它还有一个和对另一侧有区别的地方,那就是接口,f0/0接口,想走左侧,也是必经之路,

并且PBR也是这样定义的,next-hop12.0.0.1,

 

那意思就明白了,

也就是说,当一个数据同时满足这两个条件时,我就让你走左侧的NAT

如果当你只能满足一个条件时,对不起,你只能走另一侧了。

 

话说回来,如何定义两个条件都满足呢?

那就要说回route-map了,

 

match语句的用法,还记得吗?

1 match x,y    , //逻辑的或关系

2 match x      //逻辑的且关系

  Match y

思路是这样的:可以定义且关系,当同时满足两个条件时,走左侧(后期调用nat时体现),而当接口down掉时,出接口也无法匹配了,

再定义一条只匹配源的route-map,让它走nat的另一个出口,也就是看到的绿色route-map b

因为下面有两个网段,每个网段要写两条,所以共4条。

 

PS:特别注意一点的是,由于是4条不同名字的route-map,请问它的执行顺序是什么样的呢?

经过本人实测,是按照字母以及数字顺序而定的。

这还要关乎最开始定义的wfy PBR,顺序上不要错乱,否则无法正常NAT

 

定义完route-map,就要到nat部份进行调用

首先定义nat的接口

Router#show ip nat sta

Total active translations: 0 (0 static, 0 dynamic; 0 extended)

Outside interfaces:

  FastEthernet0/0, FastEthernet0/1

Inside interfaces:

  FastEthernet1/0

定义出接口和入接口

 

调用route-map

ip nat inside source route-map a interface FastEthernet0/0 overload
ip nat inside source route-map b interface FastEthernet0/1 overload
ip nat inside source route-map c interface FastEthernet0/1 overload
ip nat inside source route-map d interface FastEthernet0/0 overload

决定route-map abcd,走哪一边的出口进行nat,是在这里决定的。

a

当满足route-map a 条件时,使用f0/0接口进行nat转换,

如果a不满足,则执行b,走f0/1口出去。

 

3——sla监测

此时,内网的两个网段就可以上网了,

但是问题也随之而来,如果是ISP方面出现问题,或者说由于中间的中继设备出现问题,是不是我本地R2就无法感知,这个之前咱们应该是讲过sla,(如果真没记录过,则敬请期待吧,后期一定要加上的)

 

这里需要提示一下,由于各IOS版本有所不同,有可能命令有些许不同,不要担心,意思大概就是这样意思了

 

先做左侧,

ip sla monitor 1        ///定义进程

 type echo protocol ipIcmpEcho 12.0.0.1 source-interface FastEthernet0/0   //使用什么协议进行检测,以及本地源使用的是谁

 frequency 5    //间隔时间

ip sla monitor schedule 1 life forever start-time now   //开始这个进程直到永远

track 1 rtr 1 reachability   //使用track进行关联它的连通性

route-map wfy permit 10

 match ip address 1

 set ip next-hop verify-availability 12.0.0.1 1 track 1  //第一个下一跳关联track,当trackdown,这个也down ,则转入第二个下一跳,

 set ip next-hop 23.0.0.3

 

再是右侧

ip sla monitor 2

 type echo protocol ipIcmpEcho 23.0.0.3 source-interface FastEthernet0/1

 frequency 5

ip sla monitor schedule 2 life forever start-time now

track 2 rtr 2 reachability

route-map wfy permit 20

 match ip address 2

 set ip next-hop verify-availability 23.0.0.3 1 track 2

 set ip next-hop 12.0.0.1

 

测试阶段

192.168.1.0测试到达100.1.1.1的路径

 

 

 此时将r2上的F0/0接口断掉,会走哪一边?

 

 

 可以正常的进行切换,没有问题,而且是很短的时间

R2接口恢复,现在将R1的接口断掉,看看效果

 

 

 随着ISP方的接口down掉,R2上的track有所感知,状态由up-down

 

 

 PC上进行测试也是一样的效果,顺利的进行了切换。

 

 

 

 ----------------------------------------------------------

CCIE成长之路 --- 梅利 

 

推荐阅读