这就是为什么我想做:
大多数主机名 -> 由 DNS1 解析。
一些主机名-> 由 DNS2 解析(我不知道 IP 地址只是主机名)。
它应该看起来像创建一个应该由除主 DNS 之外的另一个 DNS 解析的网站的白名单/黑名单。事实上,这就是我想要完成的。
/etc/hosts 是不可能的,因为我可能不知道网站的 IP
谢谢!
这就是为什么我想做:
大多数主机名 -> 由 DNS1 解析。
一些主机名-> 由 DNS2 解析(我不知道 IP 地址只是主机名)。
它应该看起来像创建一个应该由除主 DNS 之外的另一个 DNS 解析的网站的白名单/黑名单。事实上,这就是我想要完成的。
/etc/hosts 是不可能的,因为我可能不知道网站的 IP
谢谢!
解决此类问题的一种有趣方法是使用
iptables
基于数据部分中的字符串模式重定向 DNS 查询数据包的规则。iptables 允许在您的机器上创建和管理防火墙和路由规则。如果操作正确,它是一个非常强大的工具。为了让这个答案变得简单——我们不会过多地讨论命令的全部含义。更多关于 iptables 的信息:IptablesHowTo(Ubuntu 文档)。
假设您的机器使用默认端口进行 DNS 查询 (53/UDP),您的名称服务器地址是
8.8.8.8
并且您正在查询askubuntu.com
域。查看请求包时,我们会注意到名称长度为13,标签计数为2(askubuntu 和 com)。因为
us.archive.ubuntu.com
它将是21和4。现在让我们尝试创建一个将
askubuntu.com
查询从默认8.8.8.8
服务器重定向到8.8.4.4
服务器的规则:因为
us.archive.ubuntu.com
它将是:总体而言,对于默认机器设置,唯一需要更改的字段是为
-hex-string
标志定义的字符串。请注意,|000001|
必须始终出现在字符串的末尾(DNS 请求数据包的另一个重要部分)。要记住的另一件事是,您的配置只会持续到您下次启动(这意味着一旦您的机器关闭,它将被删除)。您可能希望使用 保存配置
iptables-save
并将命令输出重定向到文件。最佳做法是使用以下语法:要从文件恢复规则,只需使用:
请注意,该
-n
标志会将您文件中的规则附加到您的 iptables 中已经存在的任何其他规则中。要使用文件中的任何内容完全覆盖所有规则,请省略该-n
标志。每次都恢复你的规则可能有点麻烦,所以我建议安装一个
iptables-persistent
包,它会在每次启动时自动为你做同样的事情:iptables-persistent
查找下的文件rules.v4
,因此/etc/iptables
请确保您相应地命名它。