我可以创建类似于在 /etc/hosts 中写入而无需 root 访问权限的覆盖 dns

我可以创建类似于在 /etc/hosts 中写入而无需 root 访问权限的覆盖 dns

我想设置我的浏览器将使用的 dns 记录,但我没有 root 访问权限,因此无法修改/etc/hosts.我需要这样做来使用 apache 测试虚拟主机,其 dns 尚未设置。我可以使用 Firefox 和 chrome,所以如果有一个插件可以简化它;或其他选项有帮助。

更新:覆盖 dns 的替代方法可能是修改 HTTP 标头,如果将正确的标头发送到 apache,则应返回正确的内容。

答案1

我正在寻找一种方法来运行具有修改后的 DNS 解析的程序以进行测试。对我来说,解决方案是使用HOSTALIASES环境变量:

$ echo "foo www.google.com" >> ~/.hosts
$ HOSTALIASES=~/.hosts wget foo

hostname(7)

(附注:在示例中,HOSTALIASES环境变量仅影响wget进程。当然,您可以export HOSTALIASES让它对当前 shell 的所有子进程生效。)

答案2

您可以围绕 libc 函数编写一个包装器来解析主机名,并在与 /etc/hosts 不同的文件中查找它们。然后运行您想要使用主机文件的任何应用程序

LD_PRELOAD=wrapper.so firefox

答案3

我认为最好的方法是设置一个 SOCKS5 代理并告诉 Firefox 通过 SOCKS5 代理(network.proxy.socks_remote_dns)发送 DNS 请求。你可以使用 openssh 相当轻松地设置一个ocks5代理(-D选项),并让一个远程主机使用自定义的/etc/hosts运行,或者类似的东西DNS掩码对于更复杂的 DNS 设置。但实际上,这会将 DNS 设置的配置推送到您可以进行系统范围更改的系统。

答案4

要测试虚拟主机,您可以将 Apache 服务器设置为 Firefox 中的代理。您输入的名称将转发给 Apache。这将中断浏览其他网站,因此完成后请重新设置代理。

相关内容