在本地网络中解析 wildcard.hostname 吗?

在本地网络中解析 wildcard.hostname 吗?

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

server {
    listen       80;
    server_name  project.myHostname;

    root         /that/projects/html/root;
    ....
}

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

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

我认为这里的主要问题可能是我对主机名、域名等概念和关系的理解不够。我为此苦苦挣扎了一段时间,但还是很难理解。

答案1

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

  1. 设置一个 DNS 服务器,例如 Bind9 或 Unbound – 您应该使用一个能够同时充当递归和权威的服务器;
  2. 配置您的计算机以使用该服务器作为 DNS,而不是您的路由器的 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

这将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

$ORIGIN如果名称不是以点结尾,则会自动附加到所有名称上。)

答案2

这里有两个问题。

1)将名称解析为IP。

Grawity 对此的回答非常正确。为此,您可以手动编辑所有计算机上的主机文件(对于两个系统之一可行,但对于大量系统则不行)。

或者使用为此设计的系统。这个系统就是 DNS。

DNS 并非完全微不足道,但有许多简单的指南介绍如何设置它以完成有限的工作。完成设置后,您可以通过编辑单个文件来选择主机名将解析到哪个 IP。

1B)

我认为这里的主要问题可能是我对主机名、域名等概念和关系的理解不够。我为此苦苦挣扎了一段时间,但还是很难理解。

那么,这可能是个不错的起点。没有良好的基础,您就如同在流沙上建造。关于这个问题的完整答案可能不适合一篇文章。因此,请在其他地方寻找完整答案。


2)HTTP。

HTTP 是一种奇怪的协议。互联网上几乎所有协议都通过 TCP/IP 工作。数据报通过 TCP 或 UDP 发送到 IP。

另一方面,HTTP 还在其请求中包含主机名。这允许您从一个 IP:端口组合运行多个不同的网页。通常这非常方便,但它确实需要您发送(并解析)正确的主机。这意味着您首先要谷歌一下并阅读有关 DNS 的入门知识。

相关内容