NAT网络地址转换技术入门到详解

这篇具有很好参考价值的文章主要介绍了NAT网络地址转换技术入门到详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文会从NAT的简介入手,详解NAT技术本身,通过本文,你可以清楚了理解NAT,SNAT, DNAT, PAT, NAPT, Full NAT的定义,它个之间的区别与联系。最后会详细给出如何将一台多网卡的Linux主机配置成一台NAT路由器。
如果你已经清楚了NAT的定义,可以直接跳转到这里看如何通过NAT table配置一台Linux主机成一台软路由

1、NAT简介

NAT是Network Address Translation的简写,指网络地址转换技术,即将一个IP地址转换成另外一个IP地址的技术。 当在内部网络的一些主机本来已经分配到了本地IP地址(即私有IP地址),但又需要和因特网上的主机通信时(按照IP协议与路由协议,路由器只会转发公有IP地址主机发出来报文),可通过NAT技术来完成。

公网IP地址的稀缺性,导致无法给每一个需要上网的主机都分配一个公网IP地址,所以就引入了NAT技术,让多个主机可以共用一个公网IP地址去访问外网,提供了这样的功能的设备被称为NAT路由器,NAT路由器可以将路由器管理下的私有网络里的每个主机的的IP报文的目标IP和源IP地址。除了去市场上购买这样的NAT路由器之外,一台多网口的Linux主机也可以完成这样的功能。

多对多地址转换,Linux路由、防火墙与流量控制QOS的设计与实现,网络,智能路由器
如上图所示,我们有一台主机"Linux Router",这台主机通过公网IP地址1.1.1.1连接到公网,它的另外一个网卡连接到内部私有网络192.168.1.0/24。我们都已经知道192.168.1.0/24 是有一个私有网段,这个网段下的所有IP地址都是私有IP地址,路由器是不会转发私有IP地址的数据包的,所以任何公网上的主机都无法访问我们私网里的主机 (所以使用私用IP地址,也是给我们的主机提供了网络安全保护的)。
为了使私网里的主机能和外网的主机进行通信,NAT路由器(Linux router主机)将这些私网内主机的私有IP地址转换成它自己的公网IP(即1.1.1.1)。这里外网上的主机是与Linux router的公网IP地址进行数据通信的,所以它需要知道哪些报文是给它自己的,而且哪些报文是给它下面的私有网络下的其它主机的。Linux router这台主机,通过维护一个所有通过它的TCP/IP连接的数据库来完成这个区分。我们称这个功能为连接跟踪,Linux主机通过在内存里创建并维护了一个TCP/UDP连接的状态表来实现这个连接跟踪功能。这所有连接的状态信息被保存在/proc/net/ip_conntrack目录下,这个状态表主要包括:IP地址,端口号,协议类型,连接状态和超时状态。如下:

tcp 6 262872 ESTABLISHED src=2.2.2.2 dst=1.1.1.1 sport=80 dport=65000 [UNREPLIED] src=192.168.1.2 dst=2.2.2.2 sport=65000 dport=80 use=1
udp 17 174 src=1.1.1.1 dst=1.1.1.11 sport=40997 dport=161 src=1.1.1.11 dst=1.1.1.1 sport=161 dport=40997 [ASSURED] use=1

通过连接跟踪功能,Linux router知道当一个响应报文(用于响应192.168.1.2发起的请求)到达 1.1.1.1时,这个报文需要被转发给192.168.1.2这台笔记本电脑,所以它会把响应报文的目标IP地址从1.1.1.1改写成192.168.1.2,然后再转发给192.168.1.2。注意:基于连接跟踪功能的防火墙被称为有状态防火墙。

NAT功能按场景可以分成以下几类:

  • 一对一NAT(1:1):
    直接将一个私有IP地址转换成公有IP地址,如上图,如果我们的私网里只有笔记本电脑一台主机那么我们可以使用一对一NAT。
  • 一对多NAT(1:N):
    一个私有IP地址转换成多个公有IP地址。这意味着,针对私网里的主机主动发起的每个到公网主机的TCP/UDP连接,NAT路由器都要从它的公有IP库里选择一个公用IP,然后把私有IP转换成这个被选中的公有IP。如上图,如果我们的私网里只有笔记本电脑一台主机,但是我们有多个公m网IP,那么我们可以选择一对多NAT。
  • 多对一NAT (N:1):
    如上图所示,有多个私有IP,但只有一个公有IP,所以NAT路由器需要将多个私有IP转换成同一个有IP地址(如果这个公网IP属于这个路由器,那么我们称之为IP伪装masquerading)。
  • 多对多NAT (N:N):
    有多个私有IP,也有多个公有IP,我们需要将多个私有IP转换成指定的多个公有IP,这里我们就要用到多对多NAT。

1.1、SNAT 和IP伪装(Masquerade)

SNAT(Source Network Address Translation)是源IP地址转换的缩写。因为在SNAT里,只有源IP地址会被转换。NAT设备会把NAT设备带着的所有设备发送的IP报文的源IP地址都会被转换成NAT设备的出口设备的IP地址。只有在需要访问外网时,数据包的源IP地址才会被转换,但要注意的是从外网上某个公网服务器发起的请求的IP报文不会被转换源IP地址,也不会转发到私网里的任何服务器(意味着所有的访问连接,都需要私网里的某个主机来主动发起)。这为私网里的服务器提供了访问保护,同时也节省了很多公网IP地址。SNAT分成静态SNAT和动态SNAT二类,静态SNAT是指一个或者多个NAT后面的主机的IP地址都会被转换成同一个公网的IP地址,动态SNAT是指一个或者多个NAT后面的主机的IP地址会被转换成一系列的公网的IP地址。在动态NAT下,NAT路由器为每一个连接会从公网IP池里选择一个IP地址,所以同一个主机的多个连接是很有可能会被转换成不同的公网源IP地址的。通常,动态SNAT,iptables会在每个连接初始化时,为这个连接选择使用得最小的公网IP地址。如果IP池里有多个IP都从来没有被用到过,那么iptables会随机选择其中一个。IP伪装Masquerade(MASQ)工作在静态SNAT模式下,如果你无法指定一个IP的话(比如说公网接口是自动获取IP的),那么IP伪装功能可以自动的使用NAT路由器的接外网的网卡的IP地址。

注意:SNAT是被iptables在linux内核2.4中由Netfilter引入的,而IP伪装则被iptables保留下来,以支持如PPP接口这一类动态配置
     IP地址的接口,它用IP伪装MASQ去代替先找到动态分配的IP再做SNAT这样的过程。

为了支持SNAT或者Masquerade,NAT路由器必须支持连接跟踪功能,这样它才可以知道当前连接的数据是由私网里的哪个服务器发起的,它才能知道如何做SNAT并转发数据。

下图显示SNAT, MASQ和连接跟踪是怎么工作的:
多对多地址转换,Linux路由、防火墙与流量控制QOS的设计与实现,网络,智能路由器

在这个图里,

  • 192.168.1.3这个主机,主动发起一个到2.2.2.2的连接。这个连接请求的数据包被送到Linux router,此时这个请求数据包的源IP地址是192.168.1.3,目标IP地址是2.2.2.2.

  • 如果此时我们给192.168.1.3这个IP配置了SNAT或 Masqueraded,Linux router会把请求报文的IP头里的源IP address从192.168.1.3改成1.1.1.1,然后按照路由协议把包发往2.2.2.2。同时保存这个连接信息到/proc/net/ip_conntrack.

  • 当收到2.2.2.2的响应报文时,到达Linux router的响应报文的源IP是2.2.2.2目标IP是1.1.1.1。这里Linux router在/proc/net/ip_conntrack里查找连接信息,然后就会找到上一步建立的那条连接。

  • Linux router会将响应报文的IP头里的目标IP地址从1.1.1.1改成192.168.1.3,然后按照路由规则发送这个IP报文到192.168.1.3主机。

      注意:使用SNAT或IP伪装Masquerade时,只有192.168.1.3可以发起到2.2.2.2的连接,
           然而2.2.2.2不能发起到192.168.1.3的连接。因为192.168.1.3是一个私网IP地址。
    

1.2、DNAT

DNAT(Destination Network Address Translations)将一个公网IP地址转换成一个私网IP地址。DNAT的功能和SNAT是相反的,所以如果你同时使用了SNAT去把私网IP地址转换成公网IP地址和DNAT把把同一个公网IP地址转换成同一个私网IP地址,那就就形成了full NAT。DNAT 通常用于以下场景,你在NAT后面有多台服务器,你根据端口或者协议的不同,把同一个公网的IP地址映射到不同的私网IP地址,比如HTTP请求转到HTTP服务器,FTP请求转到FTP服务器。所以这个DNAT也称为端口转发。如下图所示:
多对多地址转换,Linux路由、防火墙与流量控制QOS的设计与实现,网络,智能路由器
正常情况下,2.2.2.2这台主机是不能主动发起与192.168.1.3主机的连接的,因为192.168.1.3是一个私网IP地址,公网上的路由器是不会转发目标的地址为私网地址的IP报文的。但2.2.2.2主机可以发起与1.1.1.1主机的连接请示。

  • 此时,如果我们在1.1.1.1主机上配置了DNAT规则,并且请求报文命令DNAT规则的话,Linux router会把这个请求报文的IP头中的目标IP地址从1.1.1.1改为192.168.1.3,然后将这个报文转发给192.168.1.3,然后记录当前连接到它的连接跟踪数据库里。

  • 当192.168.1.3发回响应报文时,Linux router会查询它的连接跟踪数据库,并发现这个响应报文是属于由2.2.2.2发起的到1.1.1.1的连接的

  • Linux router 会把这个响应报文的IP头中的源IP地址从192.168.1.3改为1.1.1.1。然后报报文发送给2.2.2.2。

      注意:如果只配置了DNAT,但没有配置SNAT,那么 2.2.2.2可以通过将目标地址设置为1.1.1.1,从而和
           192.168.1.3建立连接。但192.168.1.3不能主动发起连接到2.2.2.2。
    

题外话:很多家用的SOHO路由器把它们提供的DNAT功能叫做DMZ。事实上,把DNAT叫做DMZ是不完全正确的。DMZ是Demilitarized Zone的缩写,意思是你的网络中,不设置任何过滤规则的区域。DMZ本质上是一个公有IP的集合,使用这些公有网络IP的服务器,是允许任何连接的(允许所有进出二个方向的连接与通信)。事实上家用的SOHO路由器是给局域网做了一个IP伪装Masquerade,所以它们把可以接收所有目标IP为路由器的WAN口的公网IP的那个私有服务器为DMZ。

1.3、Full NAT (也称为Full Cone NAT)

Full NAT是完全将一个IP地址映入到另外一个IP地址。在配置了full NAT的情况下,位于NAT后面的一个私有IP地址的服务器(比如: 192.168.1.3)在公网上会被完全看成NAT路由器提供的公网IP地址(比如1.1.1.1)。这意味着,192.168.1.3发出的请求报文,在公网上的主机看来,完全等同于从1.1.1.1 (SNAT)收到报文。.所有从公网其它主机发往1.1.1.1的报文,NAT路由器都会把目标IP地址改成192.168.1.3后转发给192.168.1.3主机,即使这个报文不属于任何一个由192.168.1.3主机发起的连接 (DNAT)。
换句话说,full NAT = SNAT+DNAT。Linux router从公网收到一个不属于任何私网主机发起的连接的IP报文会被转到给到192.168.1.3,所以192.168.1.3这个主机并不因为它的私有IP地址而受到任何连接限制与安全保护。

	注意:在上一章的DNAT的例子里,1.1.1.1可以是NAT路由器的公网IP地址,也可以是它能收到目标地址为1.1.1.1的报文就可以(其它路由
	      器会把目标为1.1.1.1的报文转发给NAT路由器)。如果1.1.1.1是NAT路由器的公网IP地址(如上一章图所示), 我产就无法从公网上访问
	      NAT路由器(比如:我们就无法SSH登录到NAT路由器),因为NAT路由器会把所有发给1.1.1.1的报文都转发给192.168.1.3。

1.4、PAT (也称为NAPT)

PAT是Port Address Translation的缩写,意思是端口地址转换,也被叫做NAPT,是Network Address and Port Translation的缩写,表示地址和端口转换。PAT不仅仅隔离隐藏了IP地址,也隔离隐藏了特定服务器的端口号。比如,公司的web服务器部署在NAT路由器后面,web服务器的IP地址是192.168.1.100。然后NAT路由器只有一个公网的IP地址,我们在DNS服务器中,把http://www.ourcompanyname.com这个地址的IP地址配置成了1.1.1.1。如果我们要从公网上访问这个web服务器,NAT路由器需要把收到的所有发给1.1.1.1的目标端口号为80的IP报文的目标IP地址改成192.168.1.100。还有,公司同时还有个内网专用的内网web服务器192.168.1.200,它也运行在80端口上(我们知道按协议web服务器应该运行在80端口)。当在办公室时,我们可以通过地址http://192.168.1.200访问内网web服务器。但如果我们希望在外网也可以访问内网的web服务器,那么我们就需要通过PAT来实现这个功能,我们可以任意选择一个NAT路由器上没有在使用的端口号(比如2143端口),然后把发往1.1.1.1的2143端口的所有IP报文的目标地址和端口修改成192.168.1.200和80端口。

通过这个配置,在外网:

  • 访问http://www.ourcompanyname.com,即发往1.1.1.1:80的报文会被发往192.168.1.100: 80,那么就可以访问公司的外网主页。
  • 访问http://www.ourcompanyname.com:2143, 即发往1.1.1.1:2143的报文会被发往192.168.1.200: 80,那么就可以访问公司的内网主页。

如果公司的内网web服务器需要主动访问外网的话,NAT服务器就不需要重写源IP地址为192.168.1.200的IP报文的端口,只需要配置SNAT或者Masquerade就可以了。

2、如何通过iptables将一台多网卡的主机配置成NAT路由器

未完待续文章来源地址https://www.toymoban.com/news/detail-779432.html

3、汇总

未完待续

到了这里,关于NAT网络地址转换技术入门到详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • NAT/NAPT地址转换(内外网通信)技术详解【华为eNSP】

    下文下载或文章顶部资源绑定处下载。 https://download.csdn.net/download/weixin_52908342/88526847 我们之前已经解决了,DHCP,VRRP,MSTP,OSPF的需求了,我们来解决一下内外网通信的需求: 11.思考当内网用户需要访问互联网时如何实现 先看一下我们现在的拓扑图: 现在的需求就是我们内

    2024年02月09日
    浏览(26)
  • 哈工大计算机网络课程网络层协议详解之:网络地址转换NAT

    上一节中,我们在DHCP协议中介绍了主机如何配置自己的IP地址,可以通过手动静态配置的方式,或者是利用DHCP协议动态配置的方式。在本节中,我们继续深入探究另一个问题,即: IP地址从哪里来? DHCP协议中我们知道了主机如何配置自己的IP地址,但是这个DHCP服务器返回的

    2024年02月11日
    浏览(30)
  • VMware虚拟机三种网络模式详解之NAT(地址转换模式)

      二、NAT(地址转换模式) 刚刚我们说到,如果你的网络ip资源紧缺,但是你又希望你的虚拟机能够联网,这时候NAT模式是最好的选择。NAT模式借助虚拟NAT设备和虚拟DHCP服务器,使得虚拟机可以联网。其网络结构如下图所示: 在NAT模式中,主机网卡直接与虚拟NAT设备相连,

    2024年02月16日
    浏览(29)
  • 华为防火墙地址转换技术(NAT)

    281、NAT理论 私网地址不能再公网上路由,NAT的功能主要就是将私网地址在往外转发的过程中,将私网地址转换成为公网地址; 282、PAT:端口多路复用,可以将多个私网地址转换成为一个公网IP地址上网 283、工作原理:私网地址想要出外网,会将自己的源IP地址、目的IP地址、

    2024年02月06日
    浏览(29)
  • 【NAT】网络地址转换

    NAT(Network Address Translation)又称为 网络地址转换 ,用于实现 私有网络和公有网络之间的互访 。 私有网络地址和公有网络地址 公有网络地址 (以下简称公网地址)是指在互联网上 全球唯一 的IP地址。2019年11月26日,是人类互联网时代值得纪念的一天,全球近43亿个IPv4地址已

    2024年01月17日
    浏览(24)
  • NAT 网络地址转换

    1.什么是NAT? NAT 是一种地址转换技术,它可以将IP数据报文头中的IP地址转换为另一个IP地址,并通过转换端口号达到地址重用的目的。NAT作为一种缓解IPv4公网地址枯竭的过渡技术,由于实现简单,得到了广泛应用。 2.NAT有什么用? 随着网络应用的增多,IPv4地址枯竭的问题越

    2024年02月05日
    浏览(31)
  • NAT网络地址转换

    网络地址转换 NAT(Network Address Translation)是一种网络技术,用于将一个网络的IP地址转换为另一个网络的IP地址。 NAT技术的主要作用是将私有IP地址转换为公有IP地址,以便在互联网上进行通信。这样,私有网络中的计算机就可以使用单个公有IP地址与互联网通信,而不需要为

    2024年02月08日
    浏览(27)
  • NAT—网络地址转换

    目录 静态NAT 动态NAT  NAPT—easy IP 多对多的NAPT  端口映射—高级用法 NAT—网络地址转换  IPV4地址不够用 NAT ABC—三类地址中截取了一部分地址(并且让这部分地址可以 重复使用 )— 私网地址 A类地址中:10.0.0.0-10.255.255.255 (A类地址掩码8)——1条A类网段  B类地址中:172.

    2024年02月16日
    浏览(29)
  • NAT网络地址转换与配置

    目录 NAT 什么是NAT与其工作原理 NAT的种类 静态 动态 NAPT  Easy IP 端口映射 配置实验 静态设置实验   动态设置实验 Easy ip 设置实验(重要) NAT是网络地址转换,是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术。将内网的IP地址转换为可以通

    2024年01月20日
    浏览(26)
  • 什么是网络地址转换 (NAT)

    网络地址转换(NAT)是更改源和目标 IP 地址和端口的过程,地址转换减少了对 IPv4 公共地址的需求,并隐藏了专用网络地址范围,该过程通常由路由器或防火墙完成。 NAT 允许单个设备(如路由器)充当 Internet(或公共网络)和本地网络(或专用网络)之间的代理,这意味着

    2024年02月12日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包