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-netfilter
和iptables -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。我不知道 iptablesQUEUE
可以做什么,但是基于 tun 的解决方案应该可以工作,尽管它可能不适合高负载。【参考方案6】:
在 IPv6 堆栈中编写您自己的 NAT 实现。
【讨论】:
以上是关于Linux 下 IPv6 流量的透明代理的主要内容,如果未能解决你的问题,请参考以下文章