如何在本地网络中设置每个人都可以看到的本地域?

Posted

技术标签:

【中文标题】如何在本地网络中设置每个人都可以看到的本地域?【英文标题】:How to setup local domain in local network that everyone can see? 【发布时间】:2018-02-08 14:35:55 【问题描述】:

我有一些基于 Web 的本地应用程序用于家庭自动化目的,它们可以通过带有类似 http://192.168.1.100:8080 端口号的 IP 地址访问。

我想要实现的是将每个单独的 IP 和端口号组合链接到一个内部域名,这样任何人都可以使用域名和子域名而不是 IP 地址。

例如,一个人可以指定一个 URL 为 http://kitchen.home,而不是一个带有端口号 URL 的 IP 地址,例如 http://192.168.1.100:8080

同时http://192.168.1.100:8081 可以映射到一个域名,例如hall.home,这样就可以使用http://hall.home 的URL 来代替那个IP 地址和端口号。

访问服务器不需要修改单个 PC 的hosts 文件,而应该是某种域名服务器,可以将域名映射到本地网络上任何 PC 的 IP 地址和端口号。

【问题讨论】:

unix.stackexchange.com/questions/16890/…的好答案 【参考方案1】:

我已经在运行bind9的PC上设置了一个DNS服务器作为我家庭网络上Ubuntu 20.04下的DNS服务器,以便拥有自己的特殊域名。

关于 DNS 和 HTTP 代理服务器的一些细节

要将域中的多个不同子域名映射到同一台 PC 上的特定端口,您需要在 PC 上安装代理服务器以及本地网络的 DNS 服务器。域名通过 DNS 协议映射到特定的 IP 地址,而不是映射到 IP 地址的特定端口。

在我的情况下,我有与 Ubuntu 20.04 相同的 PC 硬件,其中 (1) Bind9 用于我的 DNS 服务器,(2) Apache 用于我的代理服务器。我可以使用两台不同的 PC,一台作为 DNS 服务器来将域名解析为 IP 地址,另一台提供通过单个 IP 端口访问的各种服务,使用侦听端口的代理服务器将连接分派到服务或直接访问通过指定所需服务的正确端口号来提供服务。

例如,浏览器中的http://kitchen.home/ 会指示浏览器使用默认的HTTP 协议端口80 来打开到由域名kitchen.home 表示的IP 地址的TCP 连接。 DNS服务器用于将域名kitchen.home解析为IP地址。如果 URL 为 http://kitchen.home:8081/,浏览器将要求 DNS 服务器将域名 kitchen.home 解析为 IP 地址,然后打开到该 IP 地址的 TCP 连接,但使用端口 8081 而不是标准的 HTTP 端口 80。

因此,http://kitchen.home/ 映射到该 IP 地址的 8080 端口,http://hall.home/ 映射到该 IP 地址的 8081 端口,您需要将解析域名的 DNS 服务器与驻留的代理服务器结合起来在端口 80,标准 HTTP 端口。然后,代理服务器会将请求重定向到基于整个域说明符 kitchen.homehall.home 的子域名 hallkitchen 选择的 PC 上的不同端口。

请参阅https://***.com/a/58122704/1466970,其中描述了将 nginx 设置为代理服务器。

Apache Web 服务器也可以用作代理服务器,这正是我正在研究的。请参阅来自 DigitalOcean、How To Use Apache HTTP Server As Reverse-Proxy Using mod_proxy Extension 和 Setting up a basic web proxy in apache 的本教程。

我的环境

我在楼下有一台 Windows 10 PC,楼上有一台 Ubuntu 20.04 PC,通过 Arris 路由器与我的有线互联网提供商通信。两台电脑都通过 WiFi 连接到我的本地家庭网络。

Ubuntu 20.04 PC 是我使用 Apache Web 服务器的 Subversion 服务器。我大部分时间都在楼下的 Windows 10 PC 上度过,需要时使用 PuTTY 通过一个或多个终端窗口连接到 Ubuntu PC。我计划在 Windows 10 PC 上使用 Visual Studio,通过 Apache Web 服务器访问 Subversion,并将 Ubuntu PC 用作数据库服务器(mysql)和 Web 服务器(Apache with php)和微服务(golang 和 node.js) .

我想在 Ubuntu PC 上设置 DNS 服务器,然后将我的 Windows 10 PC 指向一个特殊的域名,同时使用标准 DNS 服务器,例如 Google 在 8.8.8.8 和 8.8.4.4。

我做了什么

我遵循的程序是(参见How to Configure BIND9 DNS Server on Ubuntu 20.04 并参见Domain Name Service (DNS) 和Everything You Need To Know About Ubuntu DNS Servers):

使用sudo apt install bind9 安装bind9 创建防火墙规则sudo ufw allow Bind9 修改文件/etc/bind/named.conf.options 修改文件/etc/bind/named.conf.local 为我的新域名home.x 创建一个/etc/bind/db.local 的副本 使用正确的规则修改新文件/etc/bind/db.home.x

我想在本地使用的域名是home.x,如果我输入http://www.home.x/ 的网站URL,结果页面将是我的Ubuntu PC 上的Apache Web 服务器。或者,如果我输入 http://home.x/svn,结果将是我的 Ubuntu 服务器上的 Subversion 存储库。

注意:为了通过 Apache 访问 Subversion,我必须进行设置。如果您对此感兴趣,请参阅enabling Subversion access via Apache web server and DAV on Ubuntu。

更改和修改文件的详细信息

Ubuntu PC 在我的本地网络上的 IP 地址为 192.168.0.4。在下面的描述中,此 IP 地址用于任何引用 Ubuntu PC 的地方。

我在文件/etc/bind/named.conf.options 中添加了forwarders 部分,以便将我的Ubuntu 服务器未知的任何DNS 请求转发到其他DNS 服务器。我从我在 Windows 10 PC 上运行的 Window 10 命令ipconfig /all 返回的 DNS 服务器列表中复制的 IP 地址。修改后的文件如下:

rick@rick-MS-7B98:~/Documents$ cat /etc/bind/named.conf.options
options 
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        // forwarders 
        //      0.0.0.0;
        // ;

        // following forwards are to Google DNS servers at 8.8.8.8 and 8.8.4.4
        forwarders 
                8.8.8.8;
                8.8.4.4;
                209.55.27.13;
        ;

        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        dnssec-validation auto;

        listen-on-v6  any; ;
;

更改文件/etc/bind/named.conf.options 后,我运行了检查实用程序,没有发现任何错误,然后重新启动了bind 服务。

sudo named-checkconf
sudo systemctl restart bind9

接下来,我在文件/etc/bind/named.conf.local 中添加了一个新的zone 指令,为我的新本地域名home.x 创建一个DNS 条目。修改后的文件如下:

rick@rick-MS-7B98:~/Documents$ cat /etc/bind/named.conf.local
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

zone "home.x" 
        type master;
        file "/etc/bind/db.home.x";
;

最后我需要创建在zone 指令的file 指令中指定的文件/etc/bind/db.home.x。我通过使用命令从现有文件/etc/bind/db.local 的副本开始这样做

sudo cp /etc/bind/db.local /etc/bind/db.home.x

然后我修改了文件/etc/bind/db.home.x 以指定将home.x 的域名以及www.home.x 的子域解析为我的Ubuntu PC 的IP 地址所需的规则。修改后的文件如下:

rick@rick-MS-7B98:~/Documents$ cat /etc/bind/db.home.x
;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     home.x. root.home.x. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      ns.home.x.
@       IN      A       192.168.0.4
@       IN      AAAA    ::1
ns      IN      A       192.168.0.4
www     IN      A       192.168.0.4

此时,我可以通过在命令窗口中使用 nslookup 命令来测试我的 Windows 10 PC 是否可以正常工作。我先试了一下,没有指定 Ubuntu PC IP 地址,然后是 Ubuntu PC IP 地址

C:\Users\rickc>nslookup home.x
Server:  dns.google
Address:  8.8.8.8

*** dns.google can't find home.x: Non-existent domain

C:\Users\rickc>nslookup home.x 192.168.0.4
Server:  UnKnown
Address:  192.168.0.4

Name:    home.x
Addresses:  ::1
          192.168.0.4

然后我使用 Windows 10 控制面板 (Control Panel > Network and Internet > Network Connections) 查看我的网络适配器列表,以便修改我的 WiFi 适配器使用的 DNS 服务器地址。通过在适配器上单击鼠标右键弹出一个浮动菜单,选择“属性”弹出“属性”对话框,然后选择“Internet 协议版本 4”,然后单击对话框上的“属性”按钮并修改 DNS 服务器地址,可以找到此设置。下面是对话框的屏幕截图。

修改DNS服务器地址后,重试nslookup,没有指定DNS服务器地址,命令找到home.x

C:\Users\rickc>nslookup home.x
Server:  UnKnown
Address:  192.168.0.4

Name:    home.x
Addresses:  ::1
          192.168.0.4

当我测试http://www.home.x/ 的 URL 时,会显示我的 Apache Web 服务器的测试页面。当我测试http://home.x/svn 的 URL 时,Web 浏览器显示了我的 Subversion 存储库的目录树。当我在带有 Visual Studio 2017 的 Ankh Subversion 插件中使用 http://home.x/svn/trunk/ 访问我的 Subversion 存储库时,它可以工作。

其他想法

此设置的一个问题是,如果我的 Ubuntu PC 未启动并运行,那么在启动 Ubuntu PC 或将 DNS 服务器地址设置回原始地址之前,Windows 10 PC 将无法正常运行 DNS 服务器WiFi 适配器上的设置。以前,它被设置为发现 DNS 服务器。可能我可以从指定的 DNS 服务器地址、我的 Ubuntu PC 的 IP 地址改回来,我的 Windows 10 PC 无论如何都会发现我的 Ubuntu PC 作为 DNS 服务器。

【讨论】:

【参考方案2】:

DNS 名称独立于端口号。 dns 记录将名称与 IP 地址相关联。如果您想在 url 中省略端口号,您需要在默认端口 (80/443) 上托管,或者使用代理。

对于家庭网络,dns 可能很棘手,而且通常很大程度上取决于您拥有的特定路由器。您的选择基本上是:

    也许您的路由器有一个用于定义主机覆盖的接口。 OpenWRT 有这样的东西,一些路由器上有一个类似的 dns 服务器,你可以添加主机条目。 获取公共域名。您可以拥有指向本地网络地址的example.comA 记录。服务器本身可能只能在您的网络内部访问,但 dns 将在任何地方可用。 运行您自己的 dns 服务器并告诉您的路由器将其用作您网络的默认解析器。 也许mDNS 可以满足您对.local 域的需求。

【讨论】:

以上是关于如何在本地网络中设置每个人都可以看到的本地域?的主要内容,如果未能解决你的问题,请参考以下文章

没有网络连接无法浏览本地域

如何在swift中设置每周本地通知

Genymotion - 在 etc/hosts 文件中设置了哪个 IP 以通过域访问主机的本地网络服务器?

如何在 cypress 中设置本地存储

如何在 git bash 中设置正确的本地时区?

如何在 Flutter 中设置工作日多天的本地通知?