Presentation is loading. Please wait.

Presentation is loading. Please wait.

NAT技术讲座 主讲:周旭 大唐电信科技股份有限公司光通信分公司 数据通信部.

Similar presentations


Presentation on theme: "NAT技术讲座 主讲:周旭 大唐电信科技股份有限公司光通信分公司 数据通信部."— Presentation transcript:

1 NAT技术讲座 主讲:周旭 大唐电信科技股份有限公司光通信分公司 数据通信部

2 交 流 提 纲 一、NAT概述 二、traditional NAT 三、NAT vs Proxy

3 一、NAT概述 定 义 产生原因 术语解释 共有特性 多种实现

4 小问题 1、NAT离我们有多远? 2、NAT是做什么的?试描述运作过程? 3、NAT是否对所有应用都适合?原因?

5 定义 网络地址翻译(NAT):NAT的全称是Network Address Translator 是将IP地址从一个域映射到另一个域的方法,它试图为主机提供透明的路由。对不涉及IP地址和TCP/UDP port的应用PDU是透明的。 注意:NAT的应用范围是基于IP构建的网络。不要理解为其它网络与IP网络地址的翻译。

6 NAT-Router一般运作为Border Router

7 产生原因 IP地址(基于IPv4)资源的匮乏 IPv6实际应用遥遥无期 降低企业网络运营成本 安全性和私有网络的考虑
迫不得已(不想或不能变更已有的地址)

8 术语解释 地址域/域(Address realm or realm):
一个地址域就是一个网络域,网络中的实体 唯一地分配一个网络地址,以便实体之间发 送的数据报可以实现寻路。 透明路由(Transparent routing):本文的“透明路由”用于表示NAT设备提供的路由功能。透明路由在不同的地址域(realm)中对数据报进行路由,这需要把IP包头中的源地址域的地址内容修改成数据报文目的地址域中的合法地址。对应用PDU透明。

9 术语解释 公共/全球/外部网络(Public/Global/External network):是指由互联网数字分配委员会(IANA)或类似地址注册机构分配了唯一网络地址的地址域。(例如:IBM、Microsoft、Cisco等大的公司或一些大学以及地区性的ISP都拥有分配到的唯一的网络地址块)

10 术语解释 私有/本地网络(Private/Local network):指独立于外部(external)网络的一个地址域。在rfc1918中,对私有网络地址的分配有一定的建议。 (10/8 ) (172.16/12) ( /16)

11 术语解释 应用级网关(Application Level gateway) :简称(ALG),是应用专用翻译代理。并非所有应用都能轻易地由NAT进行翻译,特别是应用的净荷中包含了IP地址和TCP/UDP端口。它允许一个地址域内主机上的应用与不同地址域主机上运行的对等应用透明地进行连接。也可以说是对净荷中的地址和TU port进行翻译,当然除了上面的地址翻译外,针对不同的应用协议可能要进行相应特殊的处理

12 术语解释 TU ports:是TCP/UCP ports的简写 上面是对后面频繁出现的部分术语的解释。

13 共有特性 目前NAT有多种实现。但都有下面的特性: 1、透明地址分配 2、通过地址翻译的透明路由 3、ICMP错误报文中净荷的处理翻译处理

14 多种实现 不同的NAT实现有不同的特点,适用于不同的应用和组网环境。下面有些简要介绍:
1、传统NAT(Traditional NAT (or) Outbound NAT) 传统NAT如同标题中Outbound NAT意义一样,是根据应用环境来分类的,用于内部私有网络对公网的访问。在具体实现又分为basic NAT和NAPT两种。后面专门章节介绍。

15 多种实现 2、双向NAT(Bi-directional NAT (or) Two-Way NAT)
双向NAT位于私有地址域网络与公网的边界。不象traditional NAT,回话只能由私有网络内的主机发起,通过双向NAT,公网或外部主机也可以发起回话。 当然双向NAT不能单独使用实现内部主机和外部主机的双向会话(session)。 要求1:结合使用DNS-应用级网关(DNS-ALG),能够对DNS Queries 和 responses中的私有地址进行翻译。

16 多种实现 要求2:私有网络和公网必需有保证唯一性的域名地址空间。 要求3:私有网络和公网或外部网络有完全不同的地址域。

17 多种实现 3、双重NAT( Twice NAT)
当IP数据包从一个地址域跨越边界路由器(border router)路由到另一个地址域时,IP数据包的目的和源地址都要进行地址翻译的NAT实现。 应用在当边界路由器两边地址域的IP地址有冲突时。

18 多种实现 4、多宿NAT(Multihomed NAT)
一般情况下,NAT router作为一个stub network的边界路由器来使用。私有网络所有于公网之间的通信量都要流经这台NAT router,这样使NAT的实现相对要简单一些,当同时也产生了单点失效的问题。当唯一的NAT router失效时,内外的通信就失效了。为此提出了通信链路备份的问题。 多个NAT router提供了链路的备份,有提出如何保证NAT router之间的透明切换的问题。多NAT之间如何保证状态信息的同步,是多宿NAT要仔细考虑的问题。

19 多种实现 5、域明确IP技术(Realm Specific IP 简称RSIP)
从某种意义上讲,RSIP技术超出了NAT技术的范围。因为在RSIP技术中采取了tunnel的概念和技术,从而使这种技术在采用端到端IPsec技术时表现出了一些有趣的特性,所以我们在此作一定的介绍。 在实现上分为两大类:涉及地址的域明确IP实现(Realm Specific Address IP 简称RSA-IP)和涉及地址和端口的域明确IP(Realm Specific Address and port IP 简称RSAP-IP)。

20 多种实现 RSIP server是连接Private network和public network的border router。根据实现的不同,可能必需是NAT router,也可能不需要一定是。 Private network中通过RSIP server与外部主机通信的主机被称为RSIP client。

21 多种实现 RSA-IP: Private network中主机需要发起与external network中的主机通信时,通过RSIP server获取外部地址域的IP地址,当然此IP地址在外部地址域中是唯一的。RSIP server称为RSA-IP-server,client称为RSA-IP-client。 在RSA-IP实现中一种方式是RSA-IP-server与RSA-IP-client之间采用tunnel通信, RSA-IP-server与外部网络通信,解开tunnel,采用正常的IP通信。此时RSA-IP-server不必是NAT router。

22 多种实现 另一种方式是RSIP与内外主机之间的通信都采用tunnel技术。此时RSA-IP-server必需是NAT router。
RSA-IP实现由于不对IP tunnel内嵌入的IP数据包修改,可以采用IPsec技术。

23 多种实现 RSAP-IP:多个私有网络中的主机,只使用一个外部IP地址,在基于TCP/UDP port和ICMP 请求ID的基础上实现复用的技术。RSAP-IP在实现中使用了TCP/UDP port和ICMP 请求ID,对部分IPsec支持,同时RSAP-IP-client与外通信仅限于TCP/UDP/ICMP 会话。

24 二、Traditional NAT 定义及应用 Basic NAT NAPT 三个阶段 数据包翻译 FTP支持 其它问题

25 定义及应用 Traditional NAT:包括采用basic NAT和NAPT方法实现的NAT功能。
basic NAT是把一组IP地址映射到另一组IP地址。而NAPT是把多个IP地址和TCP/UDP port二元组翻译为单一IP和的它的TCP/UDP port二元组。这两种方法提供了从私有的地址域与外部地址域(拥有全球唯一注册地址)之间的连接机制。 两种实现方法在层次上的不同,basic NAT针对IP数据包头中的IP地址完成地址翻译功能。 NAPT由于涉及到TCP/UDP port的映射,所以还要对TCP/UDP报文头操作。这种不同造成对其他

26 定义及应用 注:其实也不尽然。我们公司就是采用NAPT连接到ISP。 协议可能有不同的影响。
Traditional NAT主要用于由内部发起的会话。当然,通过静态地址映射,也可以从外部对内部主机访问。 按建议中介绍,basic NAT适用于企业或组织,这些组织和企业有一个主要是内部使用的网络(intranet),对偶然有对外访问的流量。NAPT主要用于通过拨号连通ISP的SOHO( Small Office、 Home Office )和远程办公人员(telecommuting employees)。 注:其实也不尽然。我们公司就是采用NAPT连接到ISP。

27 定义及应用 Traditional NAT对应用协议有一定的影响(设计本意是对应用透明)。对于在净荷中涉及IP地址和TCP/UCP端口号的应用,必需有相应的ALG才能完成对净荷的修改。例如:FTP中的port和pasv的操作就要有FTP-ALG协助完成。对于在净荷中不涉及IP地址和TCP/UCP端口号的应用是透明的。 由于IP地址翻译,对于主机到主机的基于IP地址的端到端通信有一些不利影响。IPsec应用在NAT环境中就是一个难题。

28 Basic Nat Basic NAT就是把私有网络中的IP地址动态地(也可静态映射,如果需要从外部访问内部时)映射到一组全球有效的IP地址。内部主机同时访问外部网络的数量取决于分配的全球有效IP地址的数量。 内部主机可以同时发起多个会话,这些会话使用同样的地址映射。

29

30 Basic Nat 我们通过前面的图示来说明basic NAT的执行过程。
LAN-A和LAN-B都使用了私有的IP网络地址 /8。 LAN-A NAT 被分配了一个地址块 /24。 LAN-B NAT 分配了 /24的地址块。 /24和 /24是全球有效唯一的地址块。

31 Basic Nat 现在让我们来看看如果主机10.33.96.5打算向主机 10.81.13.22发送数据包将会发生什么?
现在让我们来看看如果主机 打算向主机 发送数据包将会发生什么? 构造IP报文。源地址 、目的地址 。 静态映射到 IP报文发送到LAN-A的NAT router LAN-A NAT router检查是否已有 的地址映射。如果没有就创建映射 : 。把源地址翻译为 并进行相应处理然后发送。

32 Basic Nat 源地址198.76.29.7、目的地址 198.76.28.4的IP 报文被路由到LAN-B NAT router。
如果有应答数据,经过一个相反的翻译过程。LAN-A NAT router上 : 动态映射保留到主机 所有对外的会话结束。

33 NAPT 当一个私有网络只有一个有效的全球IP地址,而内部的多个主机同时访问外部网络时,就要使用NAPT。 NAPT 通过二元组
(local IP addresses, local TU port number)到 (registered IP address, assigned TU port number)映射,来实现内部和外部地址翻译。 NAPT主要用于实现内部私有地址的网络对外部的访问。如果要使外部网络访问内部提供的服务时,可以把NAPT router上提供服务的port映射到内部提供服务的主机。 后面我们还是通过一个例子来说明NAPT的地址翻译过程。

34

35 NAPT 现在让我们来看看如果主机10.0.0.10打算向主机 138.76.29.7发送telnet数据包将会发生什么?
构造报文。源端socket地址 、port为3017。目的地址 、port为23 IP报文被发送到NAPT router LAN-A NAPT router检查是否已有 、port为3017的地址映射,如果没有就创建映射。在转发之前,NAPT把源地址 、源TCP port3017 翻译为全球唯一的地址 和唯一分配的TCP port 1024(按一定算法分配),进行相应处理后发送。

36 NAPT 数据报文在外部网络被路由到地址为138.76.29.7的主机。
回送报文经过NAPT router的翻译,路由进入内部网络到达 主机。 从上面NAPT执行翻译的步骤中可以发现通信主机不需要有任何变化,在NAT router上的翻译过程对应用是透明的。

37 NAPT NAT必需实现对ICMP报文的翻译和转发。IP包头的处理是一样的。 与处理TCP/UDP数据包中port不同,ICMP query 数据包头中的identifier field中的query identifier 被唯一映射为NAPT router上的ICMP query identifier,ICMP报文在转发前被翻译。应答报文根据映射,进行相反的翻译过程。 对于ICMP错误报文净荷中的地址也要进行翻译。

38 NAT的三个阶段 NAT在执行地址翻译的过程中,所有的回话要通过全部或部分这三个阶段。即:地址绑定、地址查询翻译、解除地址绑定。
注:地址指的是IP地址或二元组(IP地址和TU port / ICMP ID)。 地址绑定:对一个内部地址的动态绑定是在源于此地址的第一个会话初始化时建立的。Basic NAT是绑定内部和外部地址,NAPT是绑定二元组(IP地址和TCP/UDP port或ICMP ID)。绑定建立后,所有源于同一地址的会话都使用这个绑定。

39 NAT的三个阶段 地址查询和翻译: 在绑定产生之后,NAT为每一个使用这一绑定的连接维护一个软状态(soft state)。属于这些会话的数据包,将要查询现有的状态、进行翻译。 解除绑定: 在使用某一绑定最后的会话完成后,绑定可以解除,释放资源,循环使用。

40 数据包翻译 对于经过NAT的从两个方向(内、外)来的数据包,属于NAT管理会话的,都要经过翻译。对具体数据包的处理,包括对IP、TCP、UDP、ICMP头的处理;校验和的调整;ICMP错误信息报文净荷的处理。 1、IP、TCP、UDP、ICMP头的处理: 在Basic NAT方式下,每个数据包的IP包头都要处理,要处理的项目有:源IP地址(向外的数据包)翻译;目的IP地址(向内的数据包)翻译;IP校验和的重新计算。 属于TCP/UDP的会话要进行TCP/UDP包头中校验和的更新。( pseudo header)

41 数据包翻译 在NAPT方式下,每个数据包的IP包头都要处理,要处理的项目有:源IP地址(向外的数据包)翻译;目的IP地址(向内的数据包)翻译;IP校验和的重新计算。 属于TCP/UDP的会话要翻译源TU port (outbound packets); 目的TU port(inbound packets) 进行TCP/UDP包头中校验和的更新。 ICMP query包头(outbound packets)中的query ID; ICMP response 中的ID; ICMP 包头中校验和要被更新; 关于ICMP错误报文净荷的修改后面解释

42 数据包翻译 校验和的调整:在NAT翻译过程中,每个数据包有IP或TCP、 UDP、ICMP包头中校验和要计算调整。建议中提供了一个有效的算法。 ICMP错误信息报文净荷的处理:ICMP错误信息报文IP头和ICMP头的处理如上面所述。在ICMP错误信息报文的净荷中截取了出错的IP包头+64bits,由于要求NAT对ICMP进行处理,使之对端主机(end-host)透明。嵌入净荷中的IP包头的IP地址要进行翻译;校验和调整;ICMP头校验和要调整反应净荷的变化。如果在NAPT方式下,而且嵌入的IP恰好属于TCP/UDP/ICMP Query 报文,还要翻译TU port和ICMP query Identifier。 The algorithm below is applicable only for even offsets (i.e., optr below must be at an even offset from start of header) and even lengths (i.e., olen and nlen below must be even). Sample code (in C) for this is as follows. void checksumadjust(unsigned char *chksum, unsigned char *optr, int olen, unsigned char *nptr, int nlen) /* assuming: unsigned char is 8 bits, long is 32 bits. - chksum points to the chksum in the packet - optr points to the old data in the packet - nptr points to the new data in the packet */ { long x, old, new; x=chksum[0]*256+chksum[1]; x=~x & 0xFFFF; while (olen) old=optr[0]*256+optr[1]; optr+=2; x-=old & 0xffff; if (x<=0) { x--; x&=0xffff; } olen-=2; } while (nlen) new=nptr[0]*256+nptr[1]; nptr+=2; x+=new & 0xffff; if (x & 0x10000) { x++; x&=0xffff; } nlen-=2; chksum[0]=x/256; chksum[1]=x & 0xff;

43 FTP支持 前面已经提到NAT设计是对应用透明的,但在实际的应用中有些应用协议的净荷中,涉及到IP地址和TCP/UDP PORT,这时就需要相应的应用协议支持网关来处理。 FTP是IP领域非常普及的一个应用,在FTP中主要在port和pasv响应命令中包含了ASCII码的IP地址和port号,这样就需FTP-ALG来完成对FTP操作的透明传输。在缺省条件下(不需要使用port和pasv命令),FTP可以通过NAT与外部网络透明传输。 The algorithm below is applicable only for even offsets (i.e., optr below must be at an even offset from start of header) and even lengths (i.e., olen and nlen below must be even). Sample code (in C) for this is as follows. void checksumadjust(unsigned char *chksum, unsigned char *optr, int olen, unsigned char *nptr, int nlen) /* assuming: unsigned char is 8 bits, long is 32 bits. - chksum points to the chksum in the packet - optr points to the old data in the packet - nptr points to the new data in the packet */ { long x, old, new; x=chksum[0]*256+chksum[1]; x=~x & 0xFFFF; while (olen) old=optr[0]*256+optr[1]; optr+=2; x-=old & 0xffff; if (x<=0) { x--; x&=0xffff; } olen-=2; } while (nlen) new=nptr[0]*256+nptr[1]; nptr+=2; x+=new & 0xffff; if (x & 0x10000) { x++; x&=0xffff; } nlen-=2; chksum[0]=x/256; chksum[1]=x & 0xff;

44 其它问题 IP选项的处理:在IP选项(option)中记录路由(Record Route)和严格源路由( Strict Source)两个选项通过NAT后,可能泄漏内部网络地址,但不影响数据包传输。 地址重叠:如果NAT router内外的地址有重叠,边界路由器将不知如何转发此类数据包。 路由信息传播:必需仔细设计,使具有私有地址的内部网内部的路由信息不应广播到外部网络。外部路由信息可以传播到内部网络。NAT router和Provider router互配静态路由。 The algorithm below is applicable only for even offsets (i.e., optr below must be at an even offset from start of header) and even lengths (i.e., olen and nlen below must be even). Sample code (in C) for this is as follows. void checksumadjust(unsigned char *chksum, unsigned char *optr, int olen, unsigned char *nptr, int nlen) /* assuming: unsigned char is 8 bits, long is 32 bits. - chksum points to the chksum in the packet - optr points to the old data in the packet - nptr points to the new data in the packet */ { long x, old, new; x=chksum[0]*256+chksum[1]; x=~x & 0xFFFF; while (olen) old=optr[0]*256+optr[1]; optr+=2; x-=old & 0xffff; if (x<=0) { x--; x&=0xffff; } olen-=2; } while (nlen) new=nptr[0]*256+nptr[1]; nptr+=2; x+=new & 0xffff; if (x & 0x10000) { x++; x&=0xffff; } nlen-=2; chksum[0]=x/256; chksum[1]=x & 0xff;

45 其它问题 Basic NAT到NAPT的切换:在一般情况下,可供分配的全球地址远远少于内部主机在多个内部主机同时对外访问时,造成对外的全球地址用尽,部分主机将无法访问外部。 这种切换提供一种机制:当对外的全球地址表中剩下一个地址时,NAT router自动从Basic NAT切换到NAPT模式下。 安全性和私密性:如果traditional NAT靠会话的单向性( uni-directional)保证内部网的安全性和私密性。同时,这也产生了一些问题,隐藏内部主机对外部网络的攻击;使网络排错困难。 The algorithm below is applicable only for even offsets (i.e., optr below must be at an even offset from start of header) and even lengths (i.e., olen and nlen below must be even). Sample code (in C) for this is as follows. void checksumadjust(unsigned char *chksum, unsigned char *optr, int olen, unsigned char *nptr, int nlen) /* assuming: unsigned char is 8 bits, long is 32 bits. - chksum points to the chksum in the packet - optr points to the old data in the packet - nptr points to the new data in the packet */ { long x, old, new; x=chksum[0]*256+chksum[1]; x=~x & 0xFFFF; while (olen) old=optr[0]*256+optr[1]; optr+=2; x-=old & 0xffff; if (x<=0) { x--; x&=0xffff; } olen-=2; } while (nlen) new=nptr[0]*256+nptr[1]; nptr+=2; x+=new & 0xffff; if (x & 0x10000) { x++; x&=0xffff; } nlen-=2; chksum[0]=x/256; chksum[1]=x & 0xff;

46 其它问题 ARP对多个地址的解析:在与外部通过LAN技术互联时, ARP对分配在NAT router外部一个接口上多个网络地址进行解析。
安全性和私密性:如果traditional NAT靠会话的单向性( uni-directional)保证内部网的安全性和私密性。同时,这也产生了一些问题,隐藏内部主机对外部网络的攻击;使网络排错困难。 在NAPT方式下翻译向外发送的基于TCP/UDP会话的数据包:这种情况下目的端处理注定要失败。 The algorithm below is applicable only for even offsets (i.e., optr below must be at an even offset from start of header) and even lengths (i.e., olen and nlen below must be even). Sample code (in C) for this is as follows. void checksumadjust(unsigned char *chksum, unsigned char *optr, int olen, unsigned char *nptr, int nlen) /* assuming: unsigned char is 8 bits, long is 32 bits. - chksum points to the chksum in the packet - optr points to the old data in the packet - nptr points to the new data in the packet */ { long x, old, new; x=chksum[0]*256+chksum[1]; x=~x & 0xFFFF; while (olen) old=optr[0]*256+optr[1]; optr+=2; x-=old & 0xffff; if (x<=0) { x--; x&=0xffff; } olen-=2; } while (nlen) new=nptr[0]*256+nptr[1]; nptr+=2; x+=new & 0xffff; if (x & 0x10000) { x++; x&=0xffff; } nlen-=2; chksum[0]=x/256; chksum[1]=x & 0xff;

47 三、NAT vs proxy NAT+APP-ALG在表现上与透明PROXY几乎一样。 其实很不相同: 1、NAT设计是对应用透明的。
4、其实1和2已经很说明问题了。 The algorithm below is applicable only for even offsets (i.e., optr below must be at an even offset from start of header) and even lengths (i.e., olen and nlen below must be even). Sample code (in C) for this is as follows. void checksumadjust(unsigned char *chksum, unsigned char *optr, int olen, unsigned char *nptr, int nlen) /* assuming: unsigned char is 8 bits, long is 32 bits. - chksum points to the chksum in the packet - optr points to the old data in the packet - nptr points to the new data in the packet */ { long x, old, new; x=chksum[0]*256+chksum[1]; x=~x & 0xFFFF; while (olen) old=optr[0]*256+optr[1]; optr+=2; x-=old & 0xffff; if (x<=0) { x--; x&=0xffff; } olen-=2; } while (nlen) new=nptr[0]*256+nptr[1]; nptr+=2; x+=new & 0xffff; if (x & 0x10000) { x++; x&=0xffff; } nlen-=2; chksum[0]=x/256; chksum[1]=x & 0xff;

48 谢谢大家!

49 透明地址分配 NAT将私有网络地址与全球网络地址绑定,从而为两个地址域间的数据报提供透明路由。在某些情况下的绑定可以扩展到传输层(比如TCP/UDP端口)。地址绑定在会话开始时完成。 有两种类型的地址分配: 静态地址分配:NAT操作期间私有网络地址和外部网络地址进行一对一的地址映射。静态地址分配确保NAT不必进行会话流的地址管理。

50 透明地址分配 动态地址分配:外部地址和私有网络主机地址是基于使用需要和会话流动态地绑定的。当最后一个使用地址绑定的会话终结时,NAT会释放绑定以便全球地址能够被循环使用。确切的地址分配特性由具体的NAT实现决定的。

51 透明路由 当一个地址域中的数据报文(目的主机在另一地址域中)经过NAT地址翻译,能够正确地在另一地址域中被路由。而对于通信的主机,并不知道这个地址翻译的过程,好像在一个地址域中被路由一样。 地址翻译有三个阶段: 1、地址绑定 2、地址查询和翻译 3、解除绑定

52 透明路由 发送 目的地址翻译 到目的地 源地址翻译 查询 地址映射 Dst:Ip_x_1 Src:Ip_x_b data
Dst:Ip_x_b Src:Ip_p_a data Dst:Ip_x_1 Src:Ip_x_b data Dst:Ip_x_b Src:Ip_x_1 data 发送 目的地址翻译 Dst:Ip_p_a Src:Ip_x_b data 到目的地 源地址翻译 Dst:Ip_x_b Src:Ip_x_1 data Dst:Ip_p_a Src:Ip_x_b data Dst:Ip_x_b Src:Ip_p_a data 查询 地址映射 Ip_x_b Ip_p_a Ip_x_1 ip_x_2 ... Ip_x_1 Ip_p_a

53 ICMP错误报文负荷地址翻译 由于在ICMP错误信息报文的净荷中,截取了出错的IP数据包的IP头以及又64bits。为了实现ICMP报文的透明转发,必需对嵌入净荷中的IP头进行翻译操作。当然如果需要的话,对传输协议头信息也要进行翻译操作。(除了重定向信息报文Redirect message type) 需要翻译操作的ICMP错误信息报文有: Destination-Unreachable, Source-Quench, Time-Exceeded, Parameter-Problem。 要进行的操作主要有地址翻译和校验和修正。


Download ppt "NAT技术讲座 主讲:周旭 大唐电信科技股份有限公司光通信分公司 数据通信部."

Similar presentations


Ads by Google