0
点赞
收藏
分享

微信扫一扫

NAT网络地址转换

zibianqu 2022-04-21 阅读 56
网络

NAT

(仅作为个人笔记,如有雷同,请联系删除。。)

https://baike.baidu.com/item/nat/320024?fr=aladdin

NAT(Network Address Translation),是指网络地址转换

  当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。

  这种方法需要在专用网(私网IP)连接到因特网(公网IP)的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址(公网IP地址)。这样,所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。

  另外,这种通过使用少量的全球IP地址(公网IP地址)代表较多的私有IP地址的方式,将有助于减缓可用的IP地址空间的枯竭

1. 功能:NAT不仅能解决IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。

  1. 宽带分享:这是 NAT 主机的最大功能。
  2. 安全防护:NAT 之内的 PC 联机到 Internet 上面时,他所显示的 IP 是 NAT 主机的公共 IP,所以 Client 端的 PC 当然就具有一定程度的安全了,外界在进行 portscan(端口扫描) 的时候,就侦测不到源Client 端的 PC 。

2. 实现方式:

  1. 静态转换[Static Nat]:将内部网络的私有IP地址转换为公有IP地址,IP地址对是一对一的,是一成不变的,某个私有IP地址只转换为某个公有IP地址。借助于静态转换,可以实现外部网络对内部网络中某些特定设备(如服务器)的访问。
  2. 动态转换[Dynamic Nat]:将内部网络的私有IP地址转换为公用IP地址时,IP地址是不确定的,是随机的,所有被授权访问上Internet的私有IP地址可随机转换为任何指定的合法IP地址。也就是说,只要指定哪些内部地址可以进行转换,以及用哪些合法地址作为外部地址时,就可以进行动态转换。动态转换可以使用多个合法外部地址集。当ISP提供的合法IP地址略少于网络内部的计算机数量时。可以采用动态转换的方式。
  3. 端口多路复用[OverLoad]:改变外出数据包的源端口并进行端口转换,即端口地址转换(PAT,Port Address Translation)/ NAPT(Network Address Port Translation).采用端口多路复用方式,“多对一”的NAT。内部网络的所有主机均可共享一个合法外部IP地址实现对Internet的访问,从而可以最大限度地节约IP地址资源。同时,又可隐藏网络内部的所有主机,有效避免来自internet的攻击。因此,网络中应用最多的就是端口多路复用方式。
    主要优势在于,能够使用一个全球有效IP地址获得通用性。主要缺点在于其通信仅限于TCP或UDP。

3. 工作原理:

  借助于NAT,私有(保留)地址的"内部"网络通过路由器发送数据包时,私有地址被转换成合法的IP地址,一个局域网只需使用少量IP地址(甚至是1个)即可实现私有地址网络内所有计算机与Internet的通信需求。

  NAT将自动修改IP报文的源IP地址和目的IP地址,Ip地址校验则在NAT处理过程中自动完成。有些应用程序将源IP地址嵌入到IP报文的数据部分中,所以还需要同时对报文的数据部分进行修改,以匹配IP头中已经修改过的源IP地址。否则,在报文数据部分嵌入IP地址的应用程序就不能正常工作。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3LzYeotp-1650546926502)(images/D0Oa9y8ne02LzwQRJWdug2MDc4BIetZyUKXnnvyJKIw.jpeg)]

  1. 如右图1这个 client(终端) 的 gateway (网关)设定为 NAT 主机,所以当要连上 Internet 的时候,该封包就会被送到 NAT 主机,这个时候的封包 Header 之 source IP(源IP) 为 192.168.1.100
  2. 而透过这个 NAT 主机,它会将 client 的对外联机封包的 source IP ( 192.168.1.100 ) 伪装成 ppp0 ( 假设为拨接情况 )这个接口所具有的公共 IP ,因为是公共 IP 了,所以这个封包就可以连上 Internet 了,同时 NAT 主机并且会记忆这个联机的封包是由哪一个 ( 192.168.1.100 ) client 端传送来的
  3. 由 Internet 传送回来的封包,当然由 NAT主机来接收了,这个时候, NAT 主机会去查询原本记录的路由信息,并将目标 IP 由 ppp0 上面的公共 IP 改回原来的 192.168.1.100
  4. 最后则由 NAT 主机将该封包传送给原先发送封包的 Client。

4. 配置方式:

  在配置NAT(网络地址转换)之前,首先需要了解内部本地地址和内部全局地址的分配情况。根据不同的需求,执行以下不同的配置任务:

  1. 内部源地址静态NAT配置

    命令作用
    # ip nat inside source static 内部本地地址 外部合法地址 [permit-inside] [vrf vrf__name_]定义内部源地址静态转换关系
    # interface interface-type interface-number进入接口配置模式
    # ip nat inside定义该接口连接内部网络
    # interface interface-type interface-number进入接口配置模式
    # ip nat outside定义该接口连接外部网络
    interface serial 0
    ip address 61.159.62.129 255.255.255.248
    ip nat outside  // 设置外部端口
    interface ethernet 0
    ip address 192.168.0.1 255.255.255.0
    ip nat inside   // 设置内部端口
    ip nat inside source static 192.168.0.2 61.159.62.130 //将内部网络地址192.168.0.2转换为合法地址61.159.62.130
    ip nat inside source static 192.168.0.3 61.159.62.131 //将内部网络地址192.168.0.3转换为合法地址61.159.62.131
    
  2. 内部源地址动态NAT配置:建立内部本地地址和内部全局地址池的临时映射关系,过一段时间没有用就会删除映射关系。
      需要注意的是:访问列表的定义,使得只在列表中许可的源地址才可以被转换,必须注意访问列表最后一个规则是否定全部。访问列表不能定义太宽,要尽量准确,否则将出现不可预知的结果。

    命令作用
    # ip nat pool address-pool start-address end-address{netmask mask / prefix-length prefix-length}定义全局IP地址池
    # access-list access-list-number permit ip-address wildcard定义访问列表,只有匹配该列表的地址才转换
    # ip nat inside source list access-list-number pool address-pool [vrf vrf_name]定义内部源地址动态转换关系
    # interface interface-type interface-number进入接口配置模式
    # ip nat inside定义接口连接内部网络
    # interface interface-type interface-number进入接口配置模式
    # ip nat outside定义接口连接外部网络
    interface serial 0  // 进入串行端口serial 0
    ip address 61.159.62.129 255.255.255.192  // 将其IP地址指定为61.159.62.129,子网掩码为255.255.255.192
    ip nat outside  // 将串行口serial 0设置为外网端口--->【注意,可以定义多个外部端口】
    interface ethernet 0  // 进入以太网端口Ethernet 0
    ip address 172.16.100.1 255.255.255.0  // 将其IP地址指定为172.16.100.1,子网掩码为255.255.255.0
    ip nat inside  // 将Ethernet 0 设置为内网端口--->【注意,可以定义多个内部端口。】
    ip nat pool chinanet 61.159.62.130 61.159.62.190 netmask 255.255.255.192 // 定义合法IP地址池:指明地址缓冲池的名称为chinanet,IP地址范围为61.159.62.130~61.159.62.190,子网掩码为255.255.255.192。需要注意的是,即使掩码为255.255.255.0,也会由起始IP地址和终止IP地址对IP地址池进行限制。
    # ip nat pool test 61.159.62.130 61.159.62.190 prefix-length 26  // 定义合法IP地址池
    access-list 1 permit 172.16.100.0 0.0.0.255 //允许访问Internet的网段为172.16.100.0~172.16.100.255,反掩码为0.0.0.255。需要注意的是,在这里采用的是反掩码,而非子网掩码。
    ip nat inside source list 1 pool chinanet // 实现网络地址转换
    
  3. 内部源地址NAPT配置:可以将多个内部本地地址映射到一个内部全局地址

    1. 静态NAPT:将内部网指定主机的指定端口映射到全局地址的指定端口上
    命令作用
    # ip nat inside source static {UDP / TCP} local-address port global-address port [permit-inside] [vrf vrf_name]定义内部源地址静态转换关系
    # interface interface-type interface-number进入接口配置模式
    # ip nat inside定义该接口连接内部网络
    # interface interface-type interface-number进入接口配置模式
    # ip nat outside定义接口连接外部网络
    1. 动态NAPT:NAPT可以使用地址池中的IP地址,也可以直接使用接口的IP地址。一般来说一个地址就可以满足一个网络的地址转换需要,一个地址最多可以提供64512个NAT地址转换。如果地址不够,地址池可以多定义几个地址。
    命令作用
    # ip nat pool address-pool start-address end-address{netmask mask / prefix-length prefix-length}定义全局IP地址池,对于NAPT,一般就定义一个IP地址
    # access-list access-list-number permit ip-address wildcard定义访问列表,只有匹配该列表的地址才转换
    # ip nat inside source list access-list-number*{[pool address-pool] / [interface interface-type interface-number]} overload [vrf vrf_name]定义源地址动态转换关系,overload有和没有是一样的效果,仅是兼容主流厂商的配置。
    # interface interface-type interface-number进入接口配置模式
    # ip nat inside定义接口连接内部网络
    # interface interface-type interface-number进入接口配置模式
    # ip nat outside定义接口连接外部网络
    interface serial 0
    ip address 202.99.160.1 255.255.255.252
    ip nat outside // 设置外部端口
    interface ethernet 0
    ip address 10.100.100.1 255.255.255.0
    ip nat inside // 设置内部端口
    ip nat pool onlyone 202.99.160.2 202.99.160.2 netmask 255.255.255.252 // 定义合法IP地址池:指明地址缓冲池的名称为onlyone,IP地址范围为202.99.160.2,子网掩码为255.255.255.252。由于本例只有一个IP地址可用,所以,起始IP地址与终止IP地址均为202.99.160.2。如果有多个IP地址,则应当分别键入起止的IP地址。
    access-list 1 permit 10.100.100.0 0.0.0.255 // 定义内部访问列表:允许访问Internetr的网段为10.100.100.0~10.100.100.255,反掩码为255.255.255.0
    ip nat inside source list 1 pool onlyone overload //设置复用动态地址转换:以端口复用方式,将访问列表1中的私有IP地址转换为onlyone IP地址池中定义的合法IP地址。
    // ip nat inside source list 1 interface serial 0 overload
    
  4. 重叠地址NAT配置两个需要互联的私有网络分配了同样IP地址,或者一个私有网络和公有网络分配了同样的全局IP地址,这种情况称为地址重叠。两个重叠地址的网络主机之间是不可能通信的,因为它们相互认为对方的主机在本地网络。重叠地址NAT就是专门针对重叠地址网络之间通信的问题,配置了重叠地址NAT,外部网络主机地址在内部网络表现为另一个网络主机地址,反之一样
      重叠地址NAT配置,其实分为两个部分内容:
       (1) 内部源地址转换配置,如何配置请参见上文;
       (2) 外部源地址转换配置,只有与内部网络地址重叠的外部网络需要配置外部源地址转换,外部源地址转换可以采用静态NAT配置或动态NAT配置。
      
    配置外部源地址的静态NAT

命令作用
# ip nat outside source static global-address local-address* [vrf vrf_name]定义外部源地址静态转换关系
# interface interface-type interface-number进入接口配置模式
# ip nat inside定义该接口连接内部网络
# interface interface-type interface-number进入接口配置模式
# ip nat outside定义接口连接外部网络
  1. TCP负载均衡:当内部网络某台主机TCP流量负载过重时,可用多台主机进行TCP业务的均衡负载。这时,可以考虑用NAT来实现TCP流量的负载均衡。NAT创建了一台虚拟主机提供TCP服务,该虚拟主机对应内部多台实际的主机,然后对目标地址进行轮询置换,达到负载分流的目的

    配置目标地址轮询转换

    命令作用
    # ip nat pool address-pool start-address end-address {netmask mask / prefix-length prefix-length}定义IP地址池,包含所有实际主机地址
    # access-list access-list-number permit ip-address wildcard定义访问列表,只匹配虚拟主机地址。注意应该使用匹配目标IP的扩展ACL。
    # ip nat inside destination list access-list-number pool address-pool [vrf vrf_name]定义内部目标地址动态转换关系
    # interface interface-type interface-number进入接口配置模式
    # ip nat inside定义接口连接内部网络
    # interface interface-type interface-number进入接口配置模式
    # ip nat outside定义接口连接外部网络
  2. 配置特殊协议网关:默认情况下,特殊协议网关是全部打开的,通过命令可以关闭指定特殊协议网关。除了ftp和dns带有参数,其他每个特殊协议都只是开关命令。

    命令作用
    # no ip nat translation ftp关闭FTP特殊协议网关
    # ip nat translation ftp开启FTP特殊协议网关,默认端口21
    # ip nat translation ftp 2121开启FTP特殊协议网关,指定端口2121
举报

相关推荐

0 条评论