如何用iptables将透明代理请求重定向另一主机

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用iptables将透明代理请求重定向另一主机相关的知识,希望对你有一定的参考价值。

其实应该这样设置

1、PREROUTING 该怎么做还怎么做,DNAT 到那个 PROXY
iptables -t nat -I PREROUTING -s <内网IP> -d ! <内网IP> -p tcp --dport 80 -j DNAT <PROXY_IP>:3128

2、针对访问 PROXY 的数据首包进行一次原地址修改
ipitables -t nat -I POSTROUTING -d <PROXY_IP> -p tcp --dport 3128 -j SNAT --to <LINUX_IP>
参考技术A 其实应该这样设置

1、PREROUTING 该怎么做还怎么做,DNAT 到那个 PROXY
iptables -t nat -I PREROUTING -s <内网IP> -d ! <内网IP> -p tcp --dport 80 -j DNAT <PROXY_IP>:3128

2、针对访问 PROXY 的数据首包进行一次原地址修改
ipitables -t nat -I POSTROUTING -d <PROXY_IP> -p tcp --dport 3128 -j SNAT --to <LINUX_IP>本回答被提问者和网友采纳

通过代理重定向本地主机?

【中文标题】通过代理重定向本地主机?【英文标题】:Redirect localhost through proxy? 【发布时间】:2010-10-31 19:19:38 【问题描述】:

我有一个在 localhost:1234 运行的 HTTP 代理。该代理适用于我发出的所有 Web 请求。

我有一个在 localhost:4567 运行的服务器。我希望对我的服务器的 HTTP 请求通过我的代理。应该很简单吧?有没有办法让 IE 或任何其他浏览器做到这一点?

【问题讨论】:

相关:***.com/questions/37700079 【参考方案1】:

浏览器绕过某些地址的代理。浏览器网络设置的“无代理”小节中对此进行了说明。 (火狐)

由于使用“localhost”而不是 ip,它解析为默认 ip 127.0.0.1,并且“localhost”和“127.0.0.1”都明确列为“无代理”。

但是“本地主机”是相当大的子集。可以使用 127.0.0.2:4567 或 127.0.1.1:4567,他们说有超过 1600 万个 IP 地址供您使用。 这将解决问题(至少对于 FF)。

附上设置和地址示例

【讨论】:

【参考方案2】:

在 Windows 上:

转到 Windows/System32/Drivers/等

在记事本中以管理员身份运行

在你的主机文件中添加这样的内容:

127.0.0.1 mysite.local

然后,该代理将获取位于http://mysite.local 的该主机的所有数据。

Ubuntu: /etc/hosts

苹果: http://decoding.wordpress.com/2009/04/06/how-to-edit-the-hosts-file-in-mac-os-x-leopard/

【讨论】:

windows HOSTS文件的实际格式为IP name【参考方案3】:

是的,有办法!

在 IE9 中,如果您在 Internet 选项中手动配置了代理,您可以单击高级并简单地将 &lt;-loopback&gt; 添加到代理绕过列表。在 IE6 中,当手动配置代理时,localhost URL 会通过代理。只有 IE7+ 版本不向代理服务器发送 localhost 请求。

如果您想要一个更全球化的解决方案,您可以创建一个自动代理配置脚本。它基本上是一个包含函数 FindProxyForURL 的 javascript 文件。您可以使用该脚本的 URL 配置 Internet 选项。所有 HTTP 请求都会查询 FindProxyForURL 以获得它需要的代理服务器。因此,如果您希望所有 URL 都通过代理,您可以执行以下操作:

function FindProxyForURL(url, host) 
    return "PROXY localhost:1234";

如果您只希望外部地址访问您的本地主机代理,那么您可以执行以下操作:

function FindProxyForURL(url, host) 
    if (isPlainHostName(host))  
          return "DIRECT"; 
    
    return "PROXY localhost:1234";

【讨论】:

【参考方案4】:

这取决于您的浏览器。在 Firefox 中,检查“无代理”是否为空。默认情况下,Firefox 会阻止 localhost 和 127.0.0.1 的 URL 代理。

mozilla.org

【讨论】:

【参考方案5】:

通常您可以为此配置浏览器设置。在 Firefox 中,它是选项 -> 高级 -> 网络 -> 连接(设置)。

如果 IE 检测到 localhost URL,它会自动忽略代理。这一直是 Fiddler 等工具的眼中钉。

但是,您通常可以通过直接访问 http://somesite.com:1234。有人花时间注册“somesite.com”域以自动路由到 127.0.0.1。这会使 IE 误以为它是一个外部域,但应该在重定向到本地服务器时通过您的代理运行。

祝你好运。

【讨论】:

somesite.com 上的注册似乎已失效。 在@FlavorScape 的回答中使用 HOSTS 文件。

以上是关于如何用iptables将透明代理请求重定向另一主机的主要内容,如果未能解决你的问题,请参考以下文章

squid 透明代理

什么是透明代理

Squid透明代理

Linux iptables 重定向 IP

Linux iptables 重定向 IP

squid透明代理