导航

浅析透明代理的重定向过程

Posted on 2011-04-16 14:37  rosabc_com  阅读(789)  评论(0)    收藏  举报
浅析透明代理的重定向过程 现介绍基本概念 网络地址转换有两种特殊的形式:重定向和伪装。伪装的有书上也称为PNAT/PortNAT。 伪装是src-nat的特殊形式,它不需要定义to-address(即源地址转换成的地址),伪装后地址自动转换为外网接口地址。 重定向是dst-nat的特殊形式,它也不需要定义to-address(即目的地址转换成的地址),而是自动转换为内网接口地址。 注意重定向中to-ports是很重要的,to-ports的值是路由器响应请求的服务端口。如web proxy的服务端口3128,当然web proxy服务要提前配置好。 这次要详细说明的是透明webproxy用到的重定向dst-nat。 下面到讲到重点了,请准备好笔墨,看下面的内容不写写画画是会晕的。我自己都快晕了。 透明webproxy实际使用了路由器的两个功能:重定向和webproxy,没有重定向,路由器的webproxy功能也不可能是透明webproxy。 不论是一般的dst-NAT还是重定向dst-NAT,目标地址都会被修改。关于地址转换的信息(包括被转换前的原始目标地址)被保留在路由器的内部表中。例如有一些client-ip请求访问google-ip:80的数据包,数据包经过重定向后目标地址google-ip被自动转换为路由器的内网接口laninterface-ip,端口被转换为webproxy的端口3128。转换前的原始目标地址google-ip和转换后的laninterface-ip的对应关系现在已经转换到内部表中了。下一步就是由webproxy来处理了,webproxy读取内部表中的原始目标地址google-ip,然后才能找到google的服务器。 现在回过来想一下,为什么在透明webproxy的重定向中不需要定义to-address而是将目标地址转换为内网接口地址?假设重定向中的to-address定义的不是路由器自身内网接口地址,而是指向另一个webproxy服务器的ip,这种情况我们分析一下client-ip能不能访问google-ip:80。client-ip访问google-ip:80的数据包经过第一个路由器的重定向功能,数据包的目标地址由google-ip转换成了另一个webproxy服务器的IP,于是经过改变目标地址的数据包转到了另一个webproxy服务器,而这另一个webproxy服务器并不能看到转换前的目标地址(即google-ip),所以也就不能访问google服务器。最终client-ip不能访问google-ip的网页。所双说,透明webproxy的重定向必然定向到路由器自身的内网接口地址才能有效。 官方文档也提到,新的http协议标准支持在高层协议中保存原始目标地址(如google-ip),虽然上文提到的"另一个webproxy服务器"无法查看数据转换前的目标地址,但可以深入数据包的内部查看高层协议中保存的网页服务器IP地址。但老协议标准不能在高层协议中保存原始目标地址,为了让webproxy服务器能获取重定向前的原始目标地址,重定向还是应定向到路由器本身内网接口地址,也就是说重定向和webproxy服务要做在同一个路由器中,这才能做到真正的透明webproxy。