Apache-2.4

Fritz!Box 和 Ubuntu:使用 Apache Httpd 和 Bind 在 LAN 中公開 URL

  • October 9, 2021

我希望有人可以幫助我完成這個 - 我想 - 簡單的任務。

情況:

在我的私有 LAN 上,我執行一個 Internet 路由器(“Fritz!Box”)和一個帶有 Ubuntu 20.04 LTS 的 Raspberry Pi。我為私人目的開發了一個小型 Spring Boot Web-App,我只想在我的 LAN 中使用它(或者可能通過 VPN 從外部訪問)。Web-App 的本機 URL 是“http://ubuntu:8080”,因為我的 Raspberry 被稱為“ubuntu”並且應用程序在 Tomcat-Server 上執行。現在我想在區域網路內公開一個 URL,例如“http://thats-my.app”,並將其用作應用程序的基本 URL。目前,ubuntu 上的 curl 可以訪問它,我的其他 PC 不能。

更好的是 FQDN“http://wow.thats-my.app”(帶有子域),這樣我就可以對所有應用程序使用相同的域和頂級域,並且只改變子域,例如“http ://super.thats-my.app" 等等.. 免責聲明:由於我通過 SSH 工作,所有配置都是僅在終端完成的。請考慮我不使用 Ubuntu 的桌面表面。

提前感謝您的時間,並希望您的幫助!

這是我對 ubuntu 系統所做的設置。此處未顯示的內容被註釋掉!:

ufw

Status: active

    To                         Action      From
    --                         ------      ----
[ 1] 9090/tcp                   ALLOW IN    Anywhere                   # UBUNTU-COCKPIT
[ 2] 3306/tcp                   ALLOW IN    Anywhere                   # MYSQL
[ 3] Apache Full                ALLOW IN    Anywhere                   # :80,:443
[ 4] Bind9                      ALLOW IN    Anywhere                   # :53
[ 5] OpenSSH                    ALLOW IN    Anywhere                   # :22
[ 6] 8080:8090/tcp              ALLOW IN    Anywhere                   # TOMCAT
[ 7] 9090/tcp (v6)              ALLOW IN    Anywhere (v6)              # UBUNTU-COCKPIT
[ 8] 3306/tcp (v6)              ALLOW IN    Anywhere (v6)              # MYSQL
[ 9] Apache Full (v6)           ALLOW IN    Anywhere (v6)              # :80,:443
[10] Bind9 (v6)                 ALLOW IN    Anywhere (v6)              # :53
[11] OpenSSH (v6)               ALLOW IN    Anywhere (v6)              # :22
[12] 8080:8090/tcp (v6)         ALLOW IN    Anywhere (v6)              # TOMCAT

/etc/hosts

127.0.0.1 localhost.localdomain localhost
127.0.1.1 ubuntu
127.0.1.1 thats-my.app

(–> 沒有 IPv6 條目)

/etc/apache2/sites-available/thats-my.conf

<VirtualHost *:80>
       ServerName thats-my.app
       ServerAlias thats-my
       ProxyRequests Off
       <Proxy *>
               Order deny,allow
               Allow from all
       </Proxy>
       ProxyPreserveHost On
       ProxyPass               / http://localhost:8080/
       ProxyPassReverse        / http://localhost:8080/
</VirtualHost>

–> 指向啟用站點的目錄的符號連結

/etc/bind/named.conf.local

zone "thats-my.app" IN {
       type master;
       file "/etc/bind/forward.thats-my.app.db";
       allow-update { none; };
};

zone "178.168.192.in-addr.arpa" IN {
       type master;
       file "/etc/bind/reverse.thats-my.app.db";
       allow-update { none; };
};

/etc/bind/named.conf.options

options {
       directory "/var/cache/bind";
       forwarders {
       1.1.1.1;
       1.0.0.1;
       8.8.8.8;
       8.8.4.4;
       };
       dnssec-validation auto;
       listen-on-v6 { any; };
       allow-query { any; };
};

/etc/bind/forward.thats-my.app.db

$TTL    604800
@       IN      SOA     ns1.thats-my.app. admin.ns1.thats-my.app. (
                             5         ; Serial
                        604800         ; Refresh
                         86400         ; Retry
                       2419200         ; Expire
                        604800 )       ; Negative Cache TTL
;
@       IN      NS      ns1.thats-my.app.
ns1     IN      A       192.168.178.23

/etc/bind/reverse.thats-my.app.db

$TTL    604800
@       IN      SOA     thats-my.app. admin.thats-my.app. (
                             4         ; Serial
                        604800         ; Refresh
                         86400         ; Retry
                       2419200         ; Expire
                        604800 )       ; Negative Cache TTL
;
@       IN      NS      ns1.thats-my.app.
ns1     IN      A       192.168.178.23
23      IN      PTR     ns1.thats-my.app.

–> 終端輸入:

sudo systemctl restart named
sudo systemctl restart apache2
sudo systemctl restart bind9

–> 路由器中的 DNS 配置

將 DNS IPv4 IP 設置為 192.168.178.23(主要和次要)

將DNS IPv6 IP設置為ubuntu機器的IPv6地址(主要和次要)

這是我得到的:

在本地 Ubuntu-Server 上

$ curl thats-my.app -> OK
$ dig thats-my.app -> status: NOERROR   *but*  SERVER 1.1.1.1#53 ???
$ dig thats-my.app @127.0.1.1 -> "connection timed out!"
$ dig thats-my.app @192.198.178.23 -> "connections timed out!"

在 LAN 上 Windows-PC PowerShell

curl thats-my.app -> cannot be resolved

區域網路上 Windows-PC Chrome 瀏覽器

http://thats-my.app -> 網站無法訪問/DNS_PROBE_FINISHED_NXDOMAIN

如果您查看“探勘”結果,我會發現 Bind9 在這裡不起作用。你怎麼看?

謝謝!

我終於找到了一個解決方案:路由器(“AVM Fritz!Box”,在德國很常見)具有安全功能“DNS-Rebind-Protection”,可以防止 LAN 內的 DNS 請求發送到 LAN 內的另一台主機。當您通過在文本框中輸入例如 TLD“lan”或在上面的“app”的情況下設置例外時,您的本地 DNS 伺服器可以正常工作。您可以刪除轉發器。

PS:您不需要 /etc/hosts 中的條目!

PPS:https ://bind9.readthedocs.io/en/latest/index.html

祝你好運!

引用自:https://serverfault.com/questions/1079731