我希望有人可以帮助我完成这个 - 我想 - 简单的任务。
情况:
在我的私有 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
祝你好运!