解决本地网络中的wildcard.hostname?

Ars*_*lum 5 networking dns lan subdomain hostname

对于本地服务器 ( nginx)上的 Web 开发,我喜欢为某些项目创建子域虚拟主机,主要是为了方便和灵活。例如

server {
    listen       80;
    server_name  project.myHostname;

    root         /that/projects/html/root;
    ....
}
Run Code Online (Sandbox Code Playgroud)

虽然技术上有问题(?),但http://project.myHostname 在同一台机器上发出请求时它工作正常。但我想最终得到一个配置,我可以http://project.myHostname从本地网络中连接的任何设备(并且仅在那里)访问。就像它在我访问时工作一样myHostname(因为,我猜我的路由器 DNS 将其解析为本地 ip)。但对于另一件事,我得到了各种各样的错误尖叫,没有这样的事情subdomain.hostname

到目前为止,我找到的唯一解决方案是hosts为每个应该能够请求该“地址”的设备手动编辑文件。有没有更方便的解决方案?

我认为这里的一个主要问题可能是我对主机名、域名等之间的概念和关系掌握得不好。我已经为此苦苦挣扎了一段时间,但很难理解它。

use*_*686 5

您需要 DNS 功能,因此您应该使用 DNS。

  1. 设置一个 DNS 服务器,例如 Bind9 或 Unbound——您应该使用能够同时充当递归和权威的服务器;
  2. 将您的计算机配置为使用该服务器进行 DNS,而不是路由器的;
  3. 为了提高性能,请将您的 DNS 服务器设置为使用您常用的DNS 服务器地址作为“转发器”(以利用它们的缓存)。

这就是“准备”部分。


现在创建一个名为“myHostname”的新区域。它与托管您自己的域(如 )大致相同example.com,因此您可以遵循各种现有教程。

(区域对应于一个权威区域——通常是一个 TLD 或“常规”一级域,但在某些情况下,子域也可以是它自己的区域。)

很多人为此使用dnsmasq,但我不知道它是否支持通配符。另外它的配置真的很模糊,所以我会跳过它。

在Unbound(主要是具有非常有限的权威托管功能的递归器)中,它看起来像这样:

server:
    (other settings...)
    local-zone: "myHostname." static
    local-data: "myHostname. A 192.168.1.234"
    local-data: "*.myHostname. A 192.168.1.234"
    (other settings...)

forward-zone:
    name: "."
    forward-addr: 8.8.8.8
    forward-addr: 8.8.4.4
Run Code Online (Sandbox Code Playgroud)

这既指向myHostname<anything>.myHostname指向给定的 IP 地址。

在 Bind9(它是一个功能齐全的权威服务器)中,它稍微复杂一些——您需要创建一个单独的“区域文件”:

; /etc/named.conf

options {
    (other settings...)
    forwarders { 8.8.8.8; 8.8.4.4; };
};

zone "myHostname" {
    type master;
    file "/var/named/myHostname.zone";
};

; /var/named/myHostname.zone (example in short form, with $ORIGIN)

$ORIGIN myHostname.
$TTL 1h
@  SOA  localhost. whatever. ( 1 4h 1h 7d 1h )
@  A    192.168.1.234
*  A    192.168.1.234

; /var/named/myHostname.zone (same example but in full form)

$TTL 1h
myHostname.    SOA  localhost. whatever. ( 1 4h 1h 7d 1h )
myHostname.    A    192.168.1.234
*.myHostname.  A    192.168.1.234
Run Code Online (Sandbox Code Playgroud)

$ORIGIN如果它们还没有以点结尾,则会自动附加到所有名称。)