静态路由、NAT和代理服务器/ALG

1. 静态路由
假设有一台路由器或三层交换机,其中的两个端口连接两个网络,那么可以通过配置静态路由连接两个网络,这是一个典型的三层路由。

假设有一台计算机,有两个网卡分别连接两个网络。默认情况下,操作系统并不允许在两个网卡间直接转发IP数据包,因为这台计算机可能是接入到多个业务层面的服务器。在这里,我们的目的就是配置最简单的路由,因此启动IP转发功能。

有几种配置方法:
(1)配置IP转发功能
以linux为例,在/etc/sysctl.conf中将ip_forward设成1,用sysctl -p生效。
如果是windows 2000/2003 Server,可以在管理工具里面启用“路由和远程管理”功能。
这种路由方式工作在第三层。与使用硬件路由器和三层交换机无异。
注意,无论是Linux/Windows,不要去尝试添加静态路由,因为不是路由的问题,是操作系统本身禁用这种转发方式。

(2)使用软件路由
软件路由(例如RouteOS)可以有更强大的功能,工作在传输层甚至是应用层。具备代理服务器的功能。

(3)单主机的路由
实际上每台主机都存在静态路由,可以用route print(windows)/route(linux)查看自己主机的路由表,这里面的都是静态路由。只不过单网卡机器,都只有一条静态路由。

2.NAT
随着IPv4地址即将耗尽,可以使用的公网IP地址也将越来越少。
如果一个机构/ 家庭想要多台计算机上网,那么每台计算机都需要分配一个IP地址,这显然是不现实的。
能不能多台计算机使用路由器共用一个IP地址上网呢?

当然可以,但是我们有以下步骤和约定:
1.使用路由器汇聚
先将这此计算机组成的内部网络通过一台路由器作为出口连接到Internet,这是共享IP地址的必要条件。
然后在路由器的外部端口配置公网IP地址(假设是202.101.99.88),现在的问题是内部端口配置什么地址,或者说这个内部网络的计算机配置什么IP地址呢?既然不能是公网IP地址,那哪些地址是可以不作为公网地址使用的呢?
OK,这就是第二个问题。

2. 专用网络地址
针对上面的问题,Internet机构在RFC1918中已经作了划分,规定10.x.x.x,172.16~31.x.x, 192.168.x.x作为专用地址,也就是非公网地址。这些地址只能在私网中使用,公网路由器对目的地址是这些地址的IP数据包一律不转发。
因此这种情况给私网内的计算机配置这些IP地址即可。

3.如何路由
在路由器上配置路由,将内外网连通就可以了吗?
我们来分析一下,
                                                     -------
                                               |---o|  PC1  | 192.168.1.100
                                               |     -------
    ------------          -----------          |     -------
   |  Internet  |-------o|   Router  |o--------|---o|  PC2  | 192.168.1.101
    ------------          -----------          |     -------
                 202.101.99.88   192.168.1.1   |     -------
                                               |---o|  PC3  | 192.168.1.102
                                                     -------
PC1的数据包发往Internet时,源IP地址是192.168.1.100,响应从Internet回来时,目的IP就变成了192.168.1.100,这会被公网路由器丢弃,因此不成功。

那我在出去的时候,将源IP 192.168.1.100改成路由器的外网IP 202.101.99.88呢?回来的时候目的IP就还是公网IP的,不就KO了?对,这个改动过程就叫NAT。
当前用得较多的是NAPT,即在路由器出口处使用202.101.99.88:Port来标识内网中多台计算机的IP,称为锥形NAT。
但有端口也不见得就必定是传输层的东西,这里还是把NAPT看成是第三层的。

(1)硬件NAT
目前几乎所有的路由器和防火墙都支持NA(P)T。另外,家用SOHO路由器内置NA(P)T,因此才会看到有一个WAN口和其他四个LAN口分开。

(2)使用计算机做NAT
如果使用计算机做NAT,可以在linux中使用iptables来配置NAT功能(linux在很多情况下把NAT叫IP伪装(IP masquerading),在win2003中仍使用“路由和远程管理”功能。

(3)反向NAT/DNAT
NAT一般只允许请求从内网出去到公网,这种NAT将源IP地址转换成公网地址,因此也叫SNAT,即源网络地址转换。
上面讲到过,锥形NAT是使用出口地址+端口来标识内网不同计算机的,而路由器建立这种表项必须先有从内到外的数据包,路由器才会学习和建立。
假设内网存在一台服务器,需要外部能访问,由于NAT表项没有建立,外来的请求到达路由器之后,路由器不知道转发给内网中的哪台主机了。因此需要有一种 NAT,先建立好映射关系,然后可以接收外来请求。这种NAT需要将请求中的目的IP:Port转换成内网服务器IP地址,因此叫DNAT,即目的网络地址转换,也叫反向NAT。

NAT的特点:
例1:
某企业内网地址为10.104.x.0。需要在企业内部搭建一套实验环境,这套环境中部分计算机需要与企业内部网络互通。允许使用192.168.1.0/24网络。如何组网?
1.使用静态路由。这相当于两个不同的网络使用路由器连通。网络中不允许有其他192.168.1.0/24 网络。
2.使用NAT。如果企业内网还有其他部门使用192,那最好使用NA(P)T,只需要使用一个10.x.x.x的地址作 NA(P)T网关,它代表了192.168.1.0/24整个网络,由于网络中的目的IP地址从来就不会出现192.168.1.*,因此192.168.1.0/24网络在全网(10.104.x.0) 内可有多个

一个NAT网关就能组建一个私网,外部网络只能看见此网关,因此可以无限扩展,解决网络地址不够的问题;
NAT不一定要在Internet使用。


例2:
俄罗斯环境,有一台服务器两个网卡,公网IP:85.26.133.29,内网IP:10.10.1.60。如何可通过直接访问公网IP来访问eConsole:  http://10.10.1.2:8080/eSpace。
方法一:
在服务器上配置一个反向NAPT,用端口映射到eConsole。在路由器或防火墙等网络设备上也叫NAT server模式。
方法二:
在服务器上安装代理服务器,这叫反向代理服务器。

隐藏服务器真实IP,提高安全性。

例3:
一台PC机IP地址10.164.x.x,要通过实验室一台双网卡机器(双网卡机器IP:10.164.8.111和192.168.0.1)访问实验室内网192.168.0.111,。求解决办法?
方法一:
常规方法,在PC机上做一条静态路由,对192.168.0.0的网络走网关 10.164.8.111。
然后在双网卡机器上配置路由功能即可。
方法二:
通过例1可知,可在双网卡机器上配置反向NAT,这样即可访问实验室内网。

反向NAT给客户端带来方便

反向NAT一般在路由器和防火墙都有这个功能,而且家用的SOHO路由器也具备。

如果使用计算机做DNAT,在linux中同样可以使用iptables来配置DNAT功能,但在windows下没有办法配置。

有关NAT的权威和详细知识,参考:http://en.wikipedia.org/wiki/Network_address_translation

3.代理服务器
由于通过上层应用可以实现更加丰富的应用,例如网站过滤,监控,cache,因此代理服务器应用广泛。
首先,代理服务器是作为Internet应用,因此肯定具备NAT功能。同时,代理服务器并不在网络层在两个接口之间转发包,而是在应用层进行处理和转发。因此代理服务器实际是应用层NAT,或者更通用的叫法是应用层网关(ALG)。当然,使用代理服务器的前提是,不能在两个网卡之间配置互通路由。

虽然实现功能相似,但是要注意代理服务器与NAT的区别:
NAT是网络层的东西,通过路由转发,只不过比静态路由多了源地址和目的地址转换。他对上层协议,例如TCP和UDP是不干涉的。
代理服务器通常工作在应用层(socks5代理在传输层),因此客户端PC必须先与代理服务器建立TCP 连接,代理服务器再与远程服务器建立TCP连接。因此工作方式实际是完全不同的。
这种概念有点像二层交换机和三层交换机(路由器)。

(1)HTTP
从组网角度来说,分为普通代理和透明代理。

普通代理就是在浏览器或其他客户端设置代理服务器的地址,浏览器提交所有的请求给代理服务器,由代理服务器完成域名解析和URL请求。这时浏览器提交的IP数据包目的地址就是代理服务器。
透明代理不需要设置代理服务器的地址,将默认网关配置成代理服务器的地址,域名解析由客户端自己解析(客户端需要配置DNS服务器IP)。所有IP数据包的目的地址都是URL对应的IP地址。我猜测这种情况的应用场景是直接使用一台计算机作为各个内网间连接的路由器,顺便安装代理服务器作为访问 Internet的出口。
补充一点,对于NAT上网,IP数据包的处理和透明代理类似。

例:
1.某企业内网 IP:10.104.0.0,使用代理服务器上网。现在调测的一个实验室环境网络是:192.168.1.0,其中的一台实验服务器需要上网,如何实现?
至少要有从192到10网段能通的路由,用多网卡PC机也好,用三层交换机也行。
然后在实验服务器的浏览器中直接配代理服务器的地址。

(2)SIP 代理
为什么SIP协议需要代理?
上面提到了NAT,IP数据包的源IP地址在出去到公网前,会被路由器或防火墙替换成公网IP。
但对SIP协议而言,仅替换网络层的IP还不够,SIP协议在应用层里包含的SDP协议数据中还有一个IP(SDP的C行),这个IP也是一个内网IP,告知对方本机媒体通信的实际IP。如果不作任何处理,对端客户端发送IP数据包的目的IP就是这个内网IP,这显然是不行的。因此,这个应用层数据中的IP 在出去公网之前也需要替换成公网IP,这就是SIP代理需要做的。

(3)FTP代理
与SIP协议类似,由于FTP的应用层数据也包含了文件传输的内网IP告知对方传送文件使用的IP和端口,这同样是内网的IP,需要在出去公网之前替换成公网IP。
FTP代理一般的路由器和防火墙的NAT都能直接支持,即替换网络层IP的同时,也会替换掉应用层中包含的内网IP。

小结:

NAT, 静态路由工作在网络层,三层。
socks5代理工作在传输层,四层,HTTP/FTP/SIP代理工作在应用层,即ALG。
凡使用 socket编程,至少都是在传输层。

你可能感兴趣的:(代理服务器,NAT,休闲,静态路由,ALG)