我squid
在一个小型设置中用作代理,该设置具有一个内部网卡和一个外部网卡。现在使用 tcp,我可以捕获两侧的流量,但我面临一些问题。如果我捕获外部 NIC 的流量,那么它仅将外部 NIC IP 作为客户端 IP,如果我从内部捕获流量,则目标 IP 始终是 SQUID 内部 IP。我想要的是实际的客户端和服务器IP。我怎样才能做到呢?
我的操作系统是 CentOS 7.2
答案1
除非您使用透明代理,否则您看到的行为是正常的:
- 客户端连接到代理以检索内容,因此您可以看到从客户端到代理并返回的数据包;
- 代理代表客户端连接到目标服务器,因此您可以看到从代理到目标服务器并返回的数据包。
在IP层面,没有办法将两者连接起来。如果您的代理是缓存代理,那么在某些情况下将不需要连接任何内容:如果代理在其缓存中有信息,则它可以自行服务客户端的请求。但如果你查看数据包内部,你应该找到你要找的东西:
- 从客户端到代理的请求将包含目标服务器名称(查找
Host
HTTP 标头); - 从代理到目标服务器的请求可能(取决于您的代理配置)包含客户端的 IP 地址(查找
X-Forwarded-For
HTTP 标头)。
请注意,在第二种情况下,使用缓存代理,您只能找到请求给定可缓存资源的第一个客户端的 IP 地址。
如果您尝试处理加密连接,事情会变得更加复杂;我会让你读一下(参见Wireshark 关于该主题的页面和鱿鱼的)...