在 DD-WRT 上重写出站 HTTP 请求

在 DD-WRT 上重写出站 HTTP 请求

我的家庭网络正在运行 DD-WRT 路由器 (v24SP2-MULTI (11/04/12) std),我想重写所有传出的 HTTP 请求。具体来说,我想在路由器级别将对 xxx.example.org 发出的所有请求重写为对 zzz.example.org 的请求。

现在,我意识到这样做有多么复杂,因此我尝试使用 DNSMasq 以更简单的方式解决这个问题,通过使用地址指令为域设置绝对地址,如下所示:address=/xxx.example.org/1.2.3.4

虽然这种方法可行,但我遇到的明显问题是 IP 地址可能会发生变化。如果我能够告诉 DNSMasq 查找不同的域而不是提供绝对地址,我会很满意,但根据手册页,我认为这是不可能的。

我的问题归结为:使用 DD-WRT 路由器,我可以让特定域的所有内部到外部 HTTP 请求实际上离开路由器到不同的域吗?

答案1

如果仅更改 IP 解析,这只是一个半解决方案,因为 HTTP 标头仍将包含有关原始查询的信息。

你可以做的是在路由器上安装一个小代理(例如私有网络),然后在那里进行 URL 重写(如果我们谈论 Privoxy,则使用 REDIRECT 和 CLIENT-HEADER-FILTER)。

然后,您可以将浏览器指向 Privoxy,或者最终使用 iptables 进行透明代理,这样客户端甚至不需要知道它。(例如,参见这里了解如何做到这一点)

答案2

如果您想在路由器上重写所有传出的 HTTP 请求,那么“最佳实践”的方法是安装透明代理]1在路由器上。您需要设置一个基本的重定向器(或者这里) 在 squid 下也同样可以运行。

我确实指出,根据您要执行的操作,如果您可以使用 IP 地址而不是主机名,那么您应该能够使用单个 IPTABLES 规则来实现这一点,以使用类似 iptables -t nat -A PREROUTING -p tcp --dport 80 -i (INTERNALIF) -s old.ip.addr.ess -j DNAT --to new.ip.addr.ess 的方法重写目标地址(DNAT)

相关内容