Linux 下 IPv6 流量的透明代理

Posted

技术标签:

【中文标题】Linux 下 IPv6 流量的透明代理【英文标题】:Transparent Proxy for IPv6 traffic under Linux 【发布时间】:2010-10-12 03:05:54 【问题描述】:

在维护网络时,运行透明代理通常是一种权宜之计。透明代理是指“劫持”传出连接并通过本地服务运行它们的代理。具体来说,我运行一个配置了 squid 的 linux 防火墙,以便端口 80 上的所有 tcp/ip 连接都由 squid 代理。

这是使用 iptables 'nat' 表,使用 IPv4 实现的。

但是 IPv6 的 iptables 没有“nat”表,所以我不能使用相同的实现。我可以使用什么技术来透明地代理 IPv6 连接的流量?

【问题讨论】:

【参考方案1】:

一种可行的方法是使用 iptables 中的 TPROXY 规则,文档可在此处获得:

http://wiki.squid-cache.org/Features/Tproxy4#IPv6_Support http://www.mjmwired.net/kernel/Documentation/networking/tproxy.txt

这应该是 Squid 支持的(>= 3.2 版)。使用--enable-linux-netfilteriptables -t mangle -j TPROXY 规则。

【讨论】:

【参考方案2】:

iptables 有一个 QUEUE 目标,您可以使用它来将数据包传送到用户空间。我不确定,但也许可以在那里实现一些东西。

除此之外,您还可以尝试在内核中添加一些东西来进行重定向。

【讨论】:

【参考方案3】:

你不能。引用squid-cache.org:

NAT 在 IPv6 中根本不存在。经过 设计。

鉴于透明度/拦截 实际上是通过 偷偷在里面扭曲NAT路由 出走自己。相当 没有 NAT 的协议是合乎逻辑的 不能做到透明和 以这种方式拦截。

【讨论】:

【参考方案4】:

这是一个实现:

http://www.suse.de/~krahmer/ip6nat/

【讨论】:

【参考方案5】:

另一种丑陋的黑客:

使用 iptables 标记所有流量(似乎,有针对 IPv6 的 CONNMARK 目标) 将所有标记的流量路由到 tun 设备 在监听 tun 设备的守护进程中执行用户空间 NAT ...

【讨论】:

这真的可能吗?知道我会从哪里开始使用支持 ipv6 的 tun 实现吗? 恕我直言,这应该是可能的。 Linux tun/tap 驱动似乎支持 IPv6。如果我错了并且不支持 IPv6,请尝试使用 tap 驱动程序(虚拟以太网)而不是 tun。我不知道 iptables QUEUE 可以做什么,但是基于 tun 的解决方案应该可以工作,尽管它可能不适合高负载。【参考方案6】:

在 IPv6 堆栈中编写您自己的 NAT 实现。

【讨论】:

以上是关于Linux 下 IPv6 流量的透明代理的主要内容,如果未能解决你的问题,请参考以下文章

如何利用代理知识去提升一个网站的流量

什么是透明代理

如何将 squid 配置为透明代理?

怎样配置linux9.0中的透明代理

NGINX 透明 TCP 代理

Squid透明代理