飞机塞进菊花 发表于 2014-07-11 10:28

关于透明代理

有没有哪种代理软件可是实现透明代理,并且要做到服务器要使用客户的真实IP向internet发送请求。

试过squid的透明代理模式达不到要求。

我更想知道代理服务器要使用客户IP发送请求时用什么原理来实现呢?也就是服务器要用非本机IP发起connect()?

q1208c 发表于 2014-07-11 14:04

NAT ? :em14::em14:

飞机塞进菊花 发表于 2014-07-12 12:41

回复 2# q1208c

问题是经过代理之后 我哪里知道用户源IP是多少?
   

phanx 发表于 2014-07-13 00:46

本帖最后由 phanx 于 2014-07-13 01:19 编辑

回复 3# 飞机塞进菊花


一种方式是透明代理会在 HTTP的头里面加上X-Forwarded-For 字段,包含client的真实地址,这样 Web 程序可以从这个获得。 但这个只对基于HTTP的应用有效,这也是最常见的识别代理后面客户端真实源地址的手段。

另外就是 反向代理, 在透明模式下,反向代理可以实现保留客户端的源地址,但这都是靠近Server端的行为。
具体可以参考http://blog.loadbalancer.org/configure-haproxy-with-tproxy-kernel-for-full-transparent-proxy/
很多商业的代理服务器 例如 BlueCoat ProxySG, Riverbed SteelApp Traffic Manager, Oracle Enterprise Gateway 等都提供了这种反向代理保留客户端源地址。

传统意义上的正向代理类似squid常用的正向模式,squid必须作为客户端前面的唯一网关设备,那么在理论上才能够实现保留源地址的透明模式代理。
RFC 1919 Classical versus Transparent IP Proxies 也提到了这种透明的IP代理。但很遗憾,目前我还不清楚有什么软件能够实现。

看你前面的帖子提到了haproxy配置反向代理,是不是要让haproxy后面的server获得真实的客户机地址呢?如果是的话,那么可以参考一下我上面提供的地址。
随便说一下RHEL 6.5内核和iptables已经支持TRPXOY,RHEL 6.5自带的haproxy 1.4.24-2 默认也已经加入了TPROXY支持,不用自己重新再重新编译一堆东西了。
https://rhn.redhat.com/errata/RHBA-2013-1619.html

Trofish 发表于 2014-07-13 11:00

即然是代理, 为什么还要使用客户端原ip发送呢?

乙是甲的代理,甲让乙代理自己发一封信,但乙却完全以甲的身份发了信。
这会引申出另一个问题:
收信人不知道乙的存在, 回信直接给到甲。

你的代理是单向的

phanx 发表于 2014-07-13 11:24

只要保证在回信给甲的路上,乙能够截获这封信,然后改的让甲以为是乙帮他发的就行了。

代理使用客户端的源地址可以提供给server真实的信息,这样对于某些例如限定IP地址才可以登录或者基于不同IP地址有不同策略的程序就需要代理支持不隐藏客户端源地址。
页: [1]
查看完整版本: 关于透明代理