我希望模拟 DNS 以用于测试目的,并决定在进入网络托管领域之前先了解它。
我考虑过 BIND(并尝试进行设置),但它并不适合我的目的。
我想使用它来制作我的网站的开发(“dev”)副本。
我看过了这里但后来决定不这样做,因为它使用起来似乎有点复杂。
我这样做是有原因的,只是为了确保我可以测试我的网站和服务器负载等,而不会损坏实时网站。
这是我当前的虚拟主机:
<VirtualHost 127.0.0.1>
NameVirtualHost mywebsitedomain1.co.uk
ServerName mywebsitedomain1.co.uk
ServerAlias www.mywebsitedomain1.co.uk
DocumentRoot /www/vhosts/mywebsitedomain1.co.uk
ErrorLog /www/Apache22/logs/error.log
<Directory "/www/vhosts/mywebsitedomain1.co.uk">
Options All
AllowOverride All
order allow,deny
allow from all
</Directory>
</VirtualHost>
但我打算这样做(为了测试):
<VirtualHost 12.345.678>
NameVirtualHost mywebsitedomain1.co.uk
ServerName mywebsitedomain1.co.uk
ServerAlias www.mywebsitedomain1.co.uk
DocumentRoot /www/vhosts/mywebsitedomain1.co.uk
ErrorLog /www/Apache22/logs/error.log
<Directory "/www/vhosts/mywebsitedomain1.co.uk">
Options All
AllowOverride All
order allow,deny
allow from all
</Directory>
</VirtualHost>
(我不认为 12.345.678 实际上存在,在这种情况下,它只是一个占位符)。
请注意,127.0.0.1 将替换为我的网站 IP,我打算模拟该网站以进行测试。我已经使用了 HOSTS,但正在尝试更进一步。
基本上,我想要实现的是 - 一个用于测试的假 DNS 服务器,如果我的 PHP 脚本出错,它不会损坏主站点 - 它是为客户端设置的,我希望它正确。
您建议我怎样处理此事?
答案1
不确定你到底想实现什么。确保特定框使用特定 IP 回复特定 DNS 查询的最简单方法是编辑 hosts 文件。如果你想查看系统发出的 DNS 查询类型,可以使用 wireshark 或 tcpdump。如果你真的想模拟 DNS 不稳定/延迟/怪异,你需要一个简单的 DNS 服务器实现,例如http://code.activestate.com/recipes/491264-mini-fake-dns-server/。
有关 hosts 文件位置,请参阅http://en.wikipedia.org/wiki/Hosts_%28file%29(!)。
编辑:似乎,出于测试目的,您只需要欺骗运行测试客户端的机器,让您的开发服务器是 mywebsitedomain1.co.uk。除非测试客户端运行其自己的专用 DNS 解析器(例如使用 libadns),否则编辑主机文件应该没问题。请注意我的 /etc/hosts 中的以下示例 hack:
127.0.0.1 localhost repo.company.com
127.0.1.1 wonky.example.com wonky
第二行是大多数现代 Linux 发行版的标准配置。在第一行中,我假装我的本地主机是我们的 Subversion 存储库,这样我就可以将流量隧道传输到我的工作场所网络。URLhttp://repo.company.com/projectsource将会真正解决http://127.0.0.1/projectsource但仍然包含 HTTP 主机头 Host: repo.company.com。
这听起来能满足您的需求吗?
答案2
不确定你说的“更进一步”是什么意思,但让我们试一试。假设你使用 *nix 盒作为你的开发服务器并从你的开发服务器测试你的“复制站点”。每台计算机都有 127.0.0.1 地址(它称为环回网络地址,这意味着没有实际流量离开你的计算机)从你的第一个 apache 虚拟主机配置。我们可以看到你的 apache 在环回 ip 地址上运行。所以基本上你必须将 mywebsitedomain1.co.uk 的 dns 查询重定向到 127.0.0.1。这可以通过在你的 /etc/hosts 文件中添加一行来实现,如下所示:127.0.0.1 mywebsitedomain1.co.uk 然后你就可以在此开发服务器中测试你的脚本了
现在,如果您想进一步了解,我建议您使用不同的计算机来测试您的脚本。我们将这台计算机称为 clientB,将您的开发服务器称为 devA。
您需要在 devA 和 clientB 之间设置真正的网络连接。我们将坚持使用私有 IP 地址。我的建议是这样的 devA IP:192.168.12.34 子网 255.255.255.0 并且不设置网关或 DNS 服务器 clientB IP:192168.12.56 子网 255.255.255.0 也不设置网关,但将 DNS 服务器设置为 devA IP
接下来。在您的 devA 上安装 dnsmasq。它是一个简单的 dns、dhcp 和 tftp 服务器。在默认配置中,dnsmasq 将读取您的 /etc/hosts 文件并填充其 dns 数据库。但您可以将其配置为不读取 /etc/hosts,而是从您指定的其他文件获取数据库。Dnsmasq 在您的 devA 服务器上使用端口 udp 53,因此请记住从您的 dev 服务器防火墙解除对它的阻止(如果有)。您还必须更改您的 apache 配置以反映 IP 地址更改为 192.168.12.34
现在您必须从客户端 B 测试 DNS 解析。如果您 ping mywebsitedomain1.co.uk,您应该会收到来自 192.168.12.34 的回复,而不是您的公共 IP 地址。
如果一切正确,您应该能够自信地测试您的脚本,确保它可以在您的“实时”网站上运行
祝你好运