好的,这将是一个有点冗长的问题。首先,介绍一些背景:我正在 Macbook(OSX Lion)上开发和测试网站,使用 Parallels 运行各种 Windows 安装以进行 IE 测试。我需要一种方法来通过 BASH 文件初始化新的 Web 项目,自动为项目设置我的虚拟主机等等。我需要让我的 VM 识别虚拟主机,而无需我手动编辑 VM 的 Windows 主机文件,但要做到这一点,我需要 OSX 中的 BASH 脚本能够编辑 Windows VM 中的主机文件。
我仍然不确定这是否可行,但在试图弄清楚这一点时,我偶然发现了一篇博客文章。这篇博客文章讨论了 BIND 以及使用命名区域等来设置 DNS 服务器,以便虚拟机识别我的虚拟主机。它有一个表单,要求输入我的 IP 地址或其他内容,并输出一个脚本,我使用该脚本设置了一切,它运行完美!然而,问题是,出于某种愚蠢的原因,我没有将这篇博客文章加入书签。最重要的是,当我升级到 Parallels 8 时,它破坏了某些东西,整个系统停止了工作。我搜索了又搜索这篇博客文章,但再也找不到它了。
然而,据我所知,该脚本确实使用了区域文件中 Parallels Shared #0 适配器 (192.168.2.2) 的 IP。我不确定为什么它在升级到 Parallels 8 之前可以工作,但升级后,我的虚拟主机只有在运行 Parallels 时才能工作(即使在我的本地计算机上)。它还在 /etc/ 中创建了一个名为 resolver 的文件夹,其中包含我的虚拟主机的文件。我不知道为什么它在没有运行 Parallels 的情况下可以工作。
无论如何,自从放弃寻找那篇博文以来,我已经开始尝试自己弄清楚整个绑定的事情。
我想要使用的虚拟主机基础是stupid.local..所以如果我有一个名为“test”的网站,它将被访问http://test.stupid.local。我已在 apache httpd.conf 文件中正确设置了主虚拟主机,并且我的 BASH 脚本为我生成了单独的站点虚拟主机文件(我知道这确实有效)。到目前为止,我已经通过终端设置了 bind/named,并将其添加到我的 /etc/named.conf 文件中:
zone "local" IN {
type master;
file "local.zone";
allow-update { none; };
};
我的 /var/named/local.zone 文件如下所示:
$TTL 60
$ORIGIN local.
@ 1D IN SOA localhost. root.localhost. (
46 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
1D IN NS localhost.
1D IN A 127.0.0.1
*.local. 60 IN A 192.168.1.138
stupid.local. 60 IN A 192.168.1.138
*.stupid.local. 60 IN A 192.168.1.138
...192.168.1.138 是我在工作时的 IP。您可能已经猜到了,此设置有效,并且可以通过 IE 由我的 Windows VM 访问,但前提是我在工作网络上。当我将 Macbook 带回家时,我必须将该 IP 地址更改为我家庭网络上的 IP 地址,即 192.168.1.4。此外,如果我将该 IP 地址更改为 192.168.2.2(Parallels Shared #0 适配器的 IP),它就可以正常工作,并且可以通过 IE 由我的 Windows VM 访问,但当然,前提是 Parallels 正在运行。将其更改为 127.0.0.1 会使设置仅在 OSX 中有效,而根本无法通过我的 VM 进行。
所以我需要创建或访问某种 IP 地址,该地址将保留在我的 Macbook 上而不会改变,我可以将其与 BIND 一起使用,以便能够在我的本地 OSX 机器和 Parallels VM 中访问 *.stupid.local 上的虚拟主机。
我知道这很冗长,但我想说得更全面一些。所以...有什么想法吗?或者,有什么替代解决方案吗?