NAT技术


NAT技术背景

  • 私有IP地址的定义极大程度的缓解了IPv4地址紧缺的问题。
  • 私有IP地址可以在本地局域网、私有网络内部随意使用,但是这些地址在公网上是不可被路由的,因此私有IP地址无法直接访问公网。
  • NAT网络地址转换技术能够将数据包中的IP地址进行转换。

私有IPv4地址空间

10.0.0.0 -10.255.255.255

172.16.0.0 -172.31.255.255

192.168.0.0 -192.168.255.255

NAT优缺点

优点 缺点
节省IP地址空间 增加转发延迟
解决IP地址重叠问题 丧失端到端的寻址能力
增加网络的连入Internet的弹性 某些应用不支持NAT
网络变更的时候减少IP重编址带来的麻烦 需要一定的内存空间支持动态存储NAT表项
对外隐藏内部地址,增加网络安全性 需要耗费一定CPU内存资源进行NAT操作

NAT术语

术语 英文 解释
内部本地 inside local 转换之前源地址
外部本地 outside local 转换之前目的地址
内部全局 inside global 转换之后源地址
内部全局 outside global 转换之后目的地址

inside表示源地址,outside表示目的地址

local表示转换之前,global表示转换之后

静态NAT

一对一映射,为每个内部的地址指定一个公网IP地址。

这种方法主要用在内网中存在需要对公网提供服务的服务器的场景,类似的例子有WEB服务器、邮件服务器、FTP服务器等

配置命令

Router(config)# ip nat inside source static local-ip global-ip
Router(config-if)# ip nat inside
Router(config-if)# ip nat outside
Router# show ip nat translations

上图所示R1作为服务器内部网络的路由器,拥有公网IP地址100.12.12.2,如果想要发布内部的服务到公网那么需要进行如下配置。

int e0/0
ip nat outside
int e0/1
ip nat inside
ip nat inside source static 192.168.1.2 100.12.12.10

这样配置之后,当pc访问100.12.12.10就相当于访问服务器,完全忽视掉路由器的存在。

不过这样做比较浪费IP地址,因为一台服务器占用一整个IP地址,如果服务器数量比较多,这样就需要租用多个IP地址。

最好的做法是端口的一对一映射,这样的做法比较常见。

上图中,两台服务器其实只需要一个端口号对外提供服务即可,并不需要完整的使用一整个IP地址,所以可以在R1上进行如下配置。

int e0/0
ip nat outside
int e0/1
ip nat inside
ip nat inside source static tcp 192.168.1.2 80 interface e0/0 80
ip nat inside source static tcp 192.168.1.3 8888 interface e0/0 8888

基于地址池的源地址转换

定义一个IP地址池,里面放了多个公网IP地址,然后分配给内网需要上公网的主机用。

这样的做法个人认为比较土豪,而且并与下面提到的PAT比起来并没有任何优势,反而安全性有问题。容易暴露IP,造成短时间内的不安全。

配置

Router(config)# ip nat pool namestart-ip end-ip {netmasknetmask|prefix-lengthprefix-length}
Router(config-if)# access-list acl-numpermit source[source-wildcard]
Router(config-if)# ip nat inside source list acl-numpool name
Router(config-if)# ip nat inside
Router(config-if)# ip nat outside

上图中,内部网络的两台PC在访问服务器的时候会借用地址池里面的地址进行访问,不过当地址池的地址小于内部主机地址数量的时候,会出现后面发起访问的PC无法获取转换地址,导致无法上网。

R1上的核心配置如下

ip nat pool natpool 100.12.12.100 100.12.12.102 netmask 255.255.255.0
access-list 1 permit 192.168.1.0 0.0.0.255
ip nat inside source list 1 pool natpool
int e0/0
ip nat outside
int e0/1
ip nat inside

PAT

对数据包的源地址和端口均进行转换,通过这种转换,可以使多个内部本地地址同时共享同一个公网地址 。

这种NAT也是现在用的最多的,无论是企业还是家庭网络,因为成本的原因,都是一个公网IP地址需要承担内部网络众多主机的转换需求。

观察PC1去访问服务器的时候地址的转换情况,我们会发现源IP地址被路由器替换为出接口的IP地址,并且端口号也有可能会被替换,具体的看你需要的端口号是不是被占用。

当数据到达服务器之后,服务器就可以对数据包的源IP地址进行回复了,数据包回到路由器上之后,路由器再对照之前的NAT转换记录,将数据包发回192.168.1.2:1234,从而完成通信。

access-list 1 permit 192.168.1.0 0.0.0.255
ip nat inside source list 1 interface e0/0 overload
int e0/0
ip nat outside
int e0/1
ip nat inside

TCP负载均衡

通过静态NAT部分的介绍,我们知道路由器可以承担为路由器发布服务的功能,当我们访问路由器IP的时候,路由器可以帮助我们将请求转发到内部的服务器上。

我们可以将内部的服务相同用于冗余的服务器地址作为地址池,这样当我们从外部访问路由器IP地址的时候,路由器就可以将池中的服务器轮流作为回应的设备,从而实现负载均衡,减少单台服务器的压力。

如上图,PC第一次访问100.12.12.2地址的时候,是server1进行回应。当PC第二次访问100.12.12.2的时候,是server2回应。

R1的关键配置如下:

access-list 1 permit 100.12.12.2   # 用于匹配目的IP地址
ip nat pool natpool 192.168.1.2 192.168.1.3 netmask 255.255.255.0 type rotary
# 这边设置的池类型是rotary,意思是旋转的,为了更好的看到实验效果
# 默认的池类型是match-host,也就是同一个源IP地址,始终是同一台服务器响应
ip nat inside destination list 1 pool natpool

NAT维护命令

清除所有动态NAT表项

Router# clear ip nat translation *

清除特定的NAT表项

Router# clear ip nat translation ?

文章作者: AaronXu
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AaronXu !
评论
 上一篇
DNS介绍 DNS介绍
DNS的诞生DNS(Domain Name System) 是一套从域名到IP的映射系统。 在网络中要确定一台主机,可以通过IP地址来做到。但是IP地址不方便记忆, 于是人们发明了一种叫主机名的东西 。 最初时候人们把主机名和IP地址的对
下一篇 
数据结构:八大数据结构分类 数据结构:八大数据结构分类
数据结构分类数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示: 每一种数据结构都有着独特的数据存储方式,下面为大家介绍它们的
  目录