如何在 *NIX 环境中本地重定向 DNS 请求

如何在 *NIX 环境中本地重定向 DNS 请求

本质上,我希望将我的机器上某个网站的所有请求重定向到另一个网站。

例如:你 ping yahoo.com,结果 ping 的却是 google.com。

或者一个更有用的例子:每个对 facebook.com 的请求都会自动发送为https://facebook.com

答案1

您可以通过修改文件来重定向本地内容/etc/hosts

然而,您对 http/https 的要求却完全不同。

实现此目的的一种方法是设置本地代理并设置必要的规则。请记住,必须将本地代理设置为忽略 hosts 文件并使用上游 dns 解析 ip 地址。

大致如下:

  1. 浏览器请求http://facebook.com通过代理。
  2. 代理重定向http://facebook.comhttps://facebook.com
  3. 浏览器请求https://facebook.com通过代理。
  4. 代理忽略 hosts 文件的内容。
  5. 代理通过隧道建立连接。

答案2

正如评论中指出的,您的两个例子是完全不同的主题。

如果我由于某种原因必须实现这一点(现在想不出任何原因),我会编辑第一个例子的主机文件(如果需要修改的列表很小),或者设置我自己的本地 DNS 服务器来修改响应。

对于第二个示例,您可能会使用专门配置的代理服务器,该服务器会根据需要重写请求。但请注意,这不能以“一网打尽”的方式完成,因为大多数网站不提供 SSL 服务,因此仅将每个查询重定向到相应的 https 变体是行不通的。

答案3

您可以使用 Squid 缓存代理程序完成一些操作。/etc/hosts 技巧在这种情况下不起作用,因为它不够智能,无法执行端口级重定向,例如从 http: 到 https: 所需的重定向。我相信 Squid 中的重定向规则足够强大,可以编写其中一些过滤器。将它安装在本地主机上,您可以执行拦截代理(我相信),这样它对用户来说是不可见的。

不过,这是 HTTP 级别的重定向,而不是 IP 级别的重定向。对于纯 IP,您还需要其他东西。/etc/hosts 文件可以做很多事情,但要么全部做,要么全部不做。如果您需要将逻辑插入到重定向的内容中,则如果目的地 = A,则发送到 B那么你将需要另一个包。

答案4

编辑您的/etc/hosts

#yahoo's IP address
69.147.114.224 google.com

至于 Facebook,您需要运行 DNS 服务器并将 webhop 设置为 https:// 站点而不是 http:// 站点。

相关内容