网络地址转换(NAT)技术学习

admin 2022年6月14日08:38:07评论87 views字数 2314阅读7分42秒阅读模式

补坑,很早以前写的笔记,本篇文章还同步在:rce.iloli.moe

markdown已上传到Github仓库,欢迎fork

https://github.com/icecliffs/ciscn0note

注:如有错误内容(e.g: 配置错误,命令错误,思路错误)

可以电邮我,我改改,或提 issue(


之前写了一大堆后来发现写的都是错的,lol,笑死我了,刚好现在学完了来总结一下


起初这个(NAT)是为了推迟可用IP地址空间耗尽的时间,通俗易懂的讲NAT就是利用网关,将不能访问外部网络的IP地址转换为可访问外部的IP地址,从而实现内部网络到外部网络的访问,通常(NAT)用于边界路由器,尽管这样NAT也有不少的优缺点

  • 优点

    • 节省合法的注册地址

    • 在地址重叠时提供解决方案

    • 连接到特网的灵活性

    • 在网络发生变化时避免重新编址

  • 缺点

    • 地址转换将增加交换延迟

    • 导致无法进行端到端IP跟踪

    • 导致有些应用程序无法正常运行

[alert]本篇文章基于IPv4编写;但现今IPv4地址池已经耗尽,等到将来IPv6出来会在文末补充[/alert]

NAT地址转换类型

静态NAT:这种 NAT 能够在本地地址和全局地址之间进行一对一的映射,网络中的每台主机都必须要有一个公网IP地址

动态NAT:它能够将未注册的 IP 地址映射到注册 IP 地址池中的一个地址,必须有足够的公网 IP 地址,让连接到因特网的主机都能够同时发送和接收分组

NAT重载:NAT 重载也是动态 NAT ,它利用源端口将多个非注册 IP 地址映射到一个注册 IP 地址(多对一),它也被称为端口地址特换即(PAT),通过使用 PAT(NAT 重载),只使用一个全局地址,就可将数千名用户连接到因特网。

NAT地址常用术语

  • 内部本地地址 - 转换前的内部源地址

  • 内部全局地址 - 转换后的源地址

  • 外部本地地址 - 转换后的目标地址

  • 外部全局地址 - 转换前的外目标地址

基本NAT转换

为了向互联网发送分组,主机A将数据包发给配置了 NAT 的边界路由器。该路由器发现分组的源地址为内部本地地址,且是前往外部网络的,因此对源地址进行转换,并将这种转换记录保存到 NAT 表中。然后,该分组被转发到外部接口,它包含转换后的源地址,收到外部主机返回的分组后,NAT 路由器根据 NAT 表将分组包含的内部全局地址转换为内部本地 IP 地址。

  • 主机A:

    • 内部本地IP地址:10.1.1.1

    • 内部全局IP地址:11.45.14.19

  • 主机B:

    • 内部本地IP地址:10.1.1.2

    • 内部全局IP地址:11.45.14.20

  • 主机C:

    • 内部本地IP地址:10.1.1.3

    • 内部全局IP地址:11.45.14.21

NAT重载转换

还是刚才的IP,只不过现在有了一些变化,使用重载时,转换后的所有内部主机都使用同一个 IP 地址,除内部本地 IP 地址和外部全局 IP 地址外,它还包含端口号。这些端口号让路由器能够确定应该将返回的数据流转发给哪台主机。

  • 主机A:

    • 内部本地IP地址:10.1.1.1

    • 内部全局IP地址:11.45.14.19

  • 主机B:

    • 内部本地IP地址:10.1.1.2

    • 内部全局IP地址:11.45.14.20

  • 主机C:

    • 内部本地IP地址:10.1.1.3

    • 内部全局IP地址:11.45.14.21

静态NAT配置

主要配置命令和配置方法如下

R-SIDE(config)#ip nat [inside/outside] source static [内部本地地址] [内部全局地址]

  • ip nat inside source 内部接口指定为源,即转换的起点

  • ip nat outside source 从而将外部接口指定为源,即转换的起点

R-SIDE(config-if)#ip nat inside # 设置内部接口

R-SIDE(config-if)#ip nat outside # 设置外部接口

[alert]R-SIDE为Router0[/alert]

R-SIDE(config-if)#int fa0/0
R-SIDE(config-if)#ip nat inside
R-SIDE(config-if)#int s0/0/0
R-SIDE(config-if)#ip nat outside
R-SIDE(config)#ip nat inside source static 10.0.0.1 152.23.36.3

这时候你会发现Router2可以ping通152.23.36.3这个IP地址,同时PC0也可以ping通152.23.36.2

动态NAT配置

配置动态 NAT 需要有一个地址池,用于给内部用户提供公有 IP 地址,动态 NAT 不使用端口号,因为所有试图访问外部网络的用户,都需要有一个公有 IP 地址

命令 ip nat inside source list 1 pool [pool name] 与 access-list 相匹配IP地址转换为 NAT 地址池中的一个可用地址。

ip nat pool lopu 152.23.36.3 152.23.36.254 netmask 255.255.255.0 创建一个地址池,用于将全局地址分配给主机。

POPU(config-if)#int s0/0/0
POPU(config-if)#ip nat outside
POPU(config-if)#int fa0/0
POPU(config-if)#ip nat inside
POPU(config)#ip nat pool lopu 152.23.36.3 152.23.36.254 netmask 255.255.255.0
POPU(config)#ip nat inside source list 1 pool lopu
POPU(config)#access-list 1 permit 10.0.0.0 0.0.0.255


原文始发于微信公众号(Gh0xE9):网络地址转换(NAT)技术学习

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月14日08:38:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   网络地址转换(NAT)技术学习http://cn-sec.com/archives/1111368.html

发表评论

匿名网友 填写信息