我正在尝试使用 dnsmasq 在笔记本电脑上启用通配符 DNS。我意识到这已经问和已回答我多次在这个论坛上询问过我,但是我却无法找到适合我的解决方案。
迄今采取的措施:
- 安装 dnsmasq
address=/example.dev/127.0.0.1
在 dnsmasq.conf 中设置listen-address=127.0.0.1
在 dnsmasq.conf 中设置- 确保
nameserver 127.0.0.1
在 /etc/resolv.conf 中 prepend domain-name-servers 127.0.0.1;
在 /etc/dhcp3/dhclient.conf 中设置- 为 example.dev 创建了一个 vhost
- 重新启动 apache 和 dnsmasq
注意:example.dev 未在 /etc/hosts 中设置
我的 vhost 例如.dev
<VirtualHost *:80>
ServerName example.dev
DocumentRoot /home/jkendall/public_html/example/public
ServerAlias *.example.dev
# This should be omitted in the production environment
SetEnv APPLICATION_ENV development
<Directory /home/jkendall/public_html/example/public>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
上述设置将在本地为 example.dev 提供服务,不会出现任何问题。它还将为 test.example.dev 提供服务,但 test.example.dev 从 /var/www 返回默认的 apache“It works!”index.html,而不是 /home/jkendall/public_html/example/public 中的 index.php。
解决方案服务器故障线程表明
address=/.example.dev/127.0.0.1
可以解决我的问题,但是当我尝试使用该解决方案时,重新启动 dnsmasq 会导致失败并显示错误消息
dnsmasq: error at line 62 of /etc/dnsmasq.conf
为了好玩,我将项目移至 /var/www/example 并适当修改了 vhost。我得到了与上述相同的结果。
目前我不确定我还能采取什么其他措施来解决此问题。您有什么想法吗?
答案1
看来我对 dnsmasq、vhosts 和 dns 存在根本性的误解。dnsmasq 所做的正是它应该做的事情,将 example.dev 的请求路由到 127.0.0.1。虽然我确实设置了 vhosts,并且设置正确,但没有本地 DNS 服务器来响应并将这些请求定向到正确的位置。
最终解决我的问题的是安装bind9,为 example.dev 创建一个区域,然后为通配符子域添加一条 A 记录。
以下是详细信息:
- 通过 Synaptic 包管理器安装 bind9
- 添加了区域
named.conf.local
- 复制
/etc/bind/db.local
到/etc/bind/example.dev
- 根据我的需要适当地编辑新的区域文件。
- 已测试
- 跳起胜利之舞
这是我的named.conf.local
zone "example.dev" {
type master;
file "/etc/bind/example.dev";
};
这是我的db.example.dev
;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA localhost. root.localhost. (
201005173 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
@ IN A 127.0.0.1
example.dev IN A 127.0.0.1
* IN A 127.0.0.1
@ IN AAAA ::1
我不会提供胜利之舞的例子。
答案2
我的设置与你在问题中描述的完全相同,但有一点不同:在我的 Apache vhost 中Listen 80
设置NameVirtualHost *:80
。这应该将 Apache 连接到端口 80 - 你的浏览器正在监听该端口,这可能是你的初始设置所缺少的部分。
如果你可以恢复初始设置(是的,我知道,那是半年前的事了),你还需要通过调用dig example.dev | grep SERVER
(应该返回;; SERVER: 127.0.0.1#53(127.0.0.1)
.