4-9 虚拟专用网VPN与网络地址转换NAT
# 490.4-9 虚拟专用网VPN与网络地址转换NAT
本节课我们介绍虚拟专用网 VPN(Virtual Private Network)和网络地址转换 NAT 的基本工作原理。
首先介绍虚拟专用网 VPN 的基本工作原理,来看这个例子,假设这是某机构部门 A 的局域网,这是该机构部门 B 的局域网,部门 A 的局域网位于北京,部门 B 的局域网位于上海,那么如何才能让这两个专用网络可以通信,一种方法是租用电信公司的通信线路,这种方法简单方便,但是租金很高。
另一种方法是利用公用的因特网作为本机构各专用网之间的通信载体,这样形成的专用网要称为虚拟专用网。那么虚拟专用网中的各主机应该分配怎样的 IP 地址?由于 IPv4 地址的紧缺,一个机构能够申请到的 IPv4 地址数量往往远小于本机构所拥有的主机数量。
因此虚拟专用网中的各主机所分配的地址应该是无需申请,就可由本机构自由分配的专用地址,而不是需要申请的在因特网上使用的公有地址,我们可以在因特网数字分配机构 IANA 的官方网站,查看 IPVC 地址空间中特殊地址的分配方案,这三个地址块中的地址,就是无需申请的可自由分配的专用地址或称私有地址。
我们给部门 A 的专用网分配的私有地址的网络号为 10.1.0.0,给部门 B 的专用网分配的私有地址的网络号为 10.2.0.0。两个专用网装各主机所分配的私有地址如图所示,需要注意的是私有地址只能用于一个机构的内部通信,而不能用于和因特网上的主机通信。
换句话说,私有地址只能用作本地地址,而不能用作全球地址。在因特网中的所有路由器,对目的地址是私有地址的 IP 数据报,一律不进行转发。很显然部门 A 和 B 各自至少需要一个路由器,具有合法的全球 IP 地址,这样他们各自的专用网才能利用公有的因特网进行通信。
假设部门 A 中的这台主机要给部门 B 中的另一台主机发送数据,它会将待发送数据封中成内部 IP 数据报,发送给路由器 R1,其首部中源地址字段的值为部门 A 中该主机的 IP 地址,目的地址字段的值为部门 B 中另一台主机的 IP 地址。R1 收到该数据报后,发现其目的网络必须通过因特网才能到达,就将该内部 IP 数据报进行加密,这样就确保了内部 IP 数据报的安全,然后重新添加上数据报的首部封中成为在因特网上发送的外部数据报,且首部中源地址字段的值为路由器 R1 的全球地址,目的地址字段的值为路由器 R2 的全球地址。
路由器 R2 收到该外部 IP 数据报后,去掉其首部,将其数据部分进行解密,恢复出源来的内部 IP 数据报,这样就可以从其首部提取出源地址和目的地址,根据目的地址将该内部 IP 数据报发送给相应的主机。很显然两个专用网内的主机间发送的数据报是通过了公用的因特网,但在效果上好像是在本机构的专用网上传送一样。
数据报在因特网中可能要经过多个网络和路由器,但从逻辑上看,R1 和 R2 之间好像是一条直通的点对点链路,因此也被称为 IP 隧道技术。本地属于同一机构内不同部门的内部网络所构成的虚拟专用网,这就称为内联网 VPN。有时一个机构的虚拟专用网需要某些外部机构参加进来,这样的虚拟专用网又称为外联网 VPN。
在外地工作的员工需要访问公司内部的专用网络时,只要在任何地点接入到因特网,运行驻留在员工 PC 中的 VPN 软件,在员工的 PC 和公司的主机之间建立 VPN 隧道,即可访问专用网络中的资源,这种虚拟专用网又称为远程接入 VPN。
相信很多同学寒暑假在家中要远程访问校园网内的某些资源时,就要使用过远程接入 VPN 这种技术。
接下来我们介绍网络地址转换 NATNetwork Address Translation)的基本工作源理。虽然因特网采用了无分类编制方式,来减缓 IP 地址空间耗尽的速度,但是由于因特网用户数目的激增,特别是大量小型办公室网络和家庭网络接入因特网的需求不断增加,IPv4 地址空间即将面临耗尽的危险,仍然没有被解除。
1994 年提出了一种网络地址转换的方法,再次缓解了 IPv4 地址空间即将耗尽的问题。NAT 能使大量使用内部专用地址的专用网络用户,共享少量外部全球地址来访问因特网上的主机和资源。
我们来举例说明,图中的专用网络使用私有网络号 192.168.0.0,该网络中各主机的私有地址如图所示,那么使用私有地址的主机如何才能与因特网上使用全球 IP 地址的主机进行通信呢?
这需要在专用网络连接到因特网的路由器上,安装 NAT 软件,装有 NAT 软件的路由器,叫做 NAT 路由器,它至少有一个有效的外部全球 IP 地址,这样所有使用私有地址的主机在和外界通信时都要在 NAT 路由器上将其私有地址转换成全球 IP 地址。
我们来举例说明,假设使用私有地址的该主机要给因特网上使用全球 IP 地址的另一台主机发送 IP 数据报,该主机将数据报发送给 NAT 路由器,数据报首部中源地址字段的值为该主机的私有地址,目的地址字段的值为因特网上另一台主机的全球地址。NAT 路由器从自己的全球 IP 地址池中为该主机分配一个临时的全球 IP 地址,172.38.1.5,并将 IP 数据报的源地址修改为该地址。
然后将私有地址与全球地址的对应关系记录在 NAT 转换表中,之后就可以转发该 IP 数据报了。请注意此时该 IP 数据报中的源地址和目的地址都是全球 IP 地址,如图所示:
因特网上的这台主机给源主机发回数据报,数据报的源地址和目的地址都是全球 IP 地址,如图所示。NAT 路由器收到该 IP 数据报后,在 NAT 转换表中进行查找,发现该数据报的目的地址所对应的私有地址为 192.168.0.2,于是就将该数据报的目的地址修改为 192.168.0.2,并将其发送给相应的主机。请注意此时该 IP 数据包中的源地址为因特网上那台主机的全球 IP 地址,而目的地址为专用网络中这台主机的私有地址,如图所示。
当专用网中的这两台使用私有地址的主机,都要给因特网上使用全球地址的另一台主机。发送数据报时,在 NAT 路由器的 NAT 转换表中就会产生两条记录,分别记录两个私有地址与两个全球地址的对应关系,这种基本转换方法存在这样一个问题。如果 NAT 路由器具有 N 个全球 IP 地址,那么至多只能有 N 个内网主机,能够同时和因特网上的主机通信,由于绝大多数的网络应用都是使用运输层协议 TCP 或 UDP 来传送数据,因此可以利用运输层的端口号和 IP 地址一起进行转换,这样用一个全球 IP 地址就可以使多个拥有本地地址的主机,同时和因特网上的主机进行通信,这种将端口号和 IP 地址一起进行转换的技术,叫做网络地址与端口号转换。
NAPT 如图所示,这是本例中的 NAPT 路由器,这是它的全球 IP 地址,这是它的 NAPT 转换表中的部分内容。
实际上现在很多家用路由器都是这种 NAPT 路由器,由于端口号的概念属于运输层,而我们的课程还没有进行到运输层,因此对该转换表中的内容不再解释。等我们学习了运输层的端口号概念后,相信大家很容易看懂该转换表的内容,请大家思考这样一个问题:内网主机与外网主机间的通信是否能由外网主机首先发起?
答案是否定的,如果由外网主机首先发起,那么当 NAPT 路由器收到来自外网的 IP 数据报后,在 NAPT 转换表中找不到相应的记录,也就无法把数据报转发给内网中的主机,因此需要私有地址的主机不能直接充当因特网服务器。对于一些点对点网络应用,需要外网主机主动与内网主机进行通信,在通过 NAT 时也会遇到问题,需要网络应用自己使用一些特殊的 NAT 穿越技术来解决问题。
另外由于 NAT 对外网屏蔽了内网主机的网络地址,因此能为内网主机提供一定的安全防护。还记得我们在上节课中介绍的 ICMP 协议的典型应用 Tracert 吗?可以看到其中有两个路由器使用了相同的 IP 地址,这很可能是内网出外网的路由器使用了 NAT,并且内网中还有一个使用私有 IP 地址的路由器:
小结: