透明代理保存客户端的mac地址

我有一个客户希望在SSLstream量离开networking时拦截他们。 我build议的解决scheme是设置一个透明的代理,包括第2层和第3层,这样就可以简单地将其放入networking中,而不需要对configuration进行任何更改。 代理有两个网卡,一个连接到服务器,另一个连接到客户端。 客户端,代理和网关在客户的控制下,服务器不在。

例如:

client --- Proxy --- gateway -|- server 

我有我的代理程序configurationIP_TRANSPARENT套接字选项,它可以响应连接目标为远程IP。

我正在使用以下设置:

 iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --on-port 3128 --tproxy-mark 1/1 iptables -t mangle -A PREROUTING -p tcp -j MARK --set-mark 1 ip rule add fwmark 1/1 table 1 ip route add local 0.0.0.0/0 dev lo table 1 

有问题的客户端位于其自己的子网上,并已configuration为使代理服务器成为默认网关。

结果是:

  1. 客户端发送一个帧到代理; 源IP是客户端,源MAC是客户端,目标IP是服务器,目标MAC是代理
  2. 代理将此帧转发给网关; 源IP是代理,源MAC是代理,目的IP是服务器,目的MAC是网关
  3. 网关将其转发给服务器,并得到回应。
  4. 网关将回复发回给代理; 源IP是服务器,源MAC是网关,目的IP是代理,目的MAC是代理
  5. 代理将此回复转发给客户端; 源IP是服务器,源MAC是代理,目的IP是客户,目的MAC是客户。 tproxy和iptablesconfiguration让代理发送一个非本地IP地址的数据包。

有没有办法在mac地址级别透明的东西? 也就是说,将客户端放在与网关相同的子网上。 网关将源IP和MAC视为客户端,即使它们来自代理。 这可以通过configuration代理作为桥梁,然后使用ebtables来升级stream量来由iptables处理?

当我使用ebtables向iptables推送某些东西时,看起来我的代理程序不响应数据包,因为它们是以网关的mac地址为目标的,而不是代理的。

我可以调查的其他潜在途径是什么?

编辑:当客户端和网关在不同的子网(和客户端已设置为代理作为网关),它的工作原理如1至5。但我想知道是否有可能有客户端和网关在相同子网和代理完全透明(即客户端不知道代理)。 客户不想将某些客户端移动到不同的子网,他们只是想要一个解决scheme。 谢谢!

编辑2:我可以configuration代理作为使用brctl的桥梁,但无法find一种方法来引导这个stream量到我的代理程序 – 这里问可能为linux桥拦截stream量? 。 目前,编号为1至5的描述在第三层操作; 它在客户端(客户端认为它正在与服务器的IP通话)是透明的,而不是在网关端(网关正在与代理的IP通话)。 我想知道的是,是否有可能在第二层操作,所以它是完全透明的? 我应该研究哪些可用选项? 谢谢

编辑3:更详细地阐明了情况。

如果机器在同一个子网上,答案是否定的。 在一个子网内,以太网协议将数据包从机器传送到机器,而在以太网层,MAC地址是真正的源地址,IP地址是未知的。