结论;我有一个正在运行的 DDNS ddns.example.com
,我想使其能够将此类请求路由host1.example.com
到我本地托管的机器。
因此,我有一个公共域名,比如说example.com
Google Domains。我有一个支持 DDNS 的路由器,假设它有一个动态 IP 地址,当前设置为1.2.3.4
。
我让路由器正确识别我的 GD 帐户,并在 GD 上将其设置ddns.example.com
为匹配路由器。此时一切正常,我可以看到,例如,我的本地网络上的 host1(其端口1234
已转发)可以在 上看到ddns.example.com:1234
。
我反而想要做的就是能够在我的本地网络上书写host1.example.com:1234/a/b?c
和访问。host1:1234/a/b?c
我目前的想法是,这应该可以通过以下方式实现:
我添加通配符记录从Google Domains
*.ddns
到。ddns.example.com
在 Google Domains 上添加发件人
CNAME
至收件人host1
。host1.ddns.example.com
在我的本地网络上设置一个动态 DNS 服务器+客户端,
host2
端口为 53,并通过路由器进行端口转发(我有一个 DNS 服务器,它能够在权威答复中包含当前的外部 IP 地址,该服务器安装在 上host2
)。将适当的条目添加到我的本地 DDNS 客户端/服务器(
host2
):添加
NS
记录ns.ddns.example.com
至host2
。添加动态
A
记录ns.ddns.example.com
到host2
。添加动态
A
记录services.ddns.example.com
到host2
。
1234
我从host1
路由器上进行端口转发。
这是我的想法应该发生:
我输入host1.example.com/a/b?c
:
NS 请求
com.
,example.com.
,然后A
请求host1
。host1.example.com
被重定向到host1.ddns.example.com
客户要求提供
NS
记录ddns.example.com
。答案是1.2.3.4
。客户端询问 的 IP 地址
host1.ddns.example.com
。答案是1.2.3.4
。客户端连接到
1.2.3.4:1234/a/b/?c
由 托管的host1:1234/a/b/?c
。
dig
inghost1.example.com
域确实会返回CNAME
记录host1.ddns.example.com
。但是,dig
inghost1.ddns.example.com
会返回 Google NS 域。据我了解,CNAME
记录基本上意味着对该记录的任何请求都将被转发。所以我预计dig
对执行host1.ddns.example.com
会匹配通配符,成为CNAME
的重定向ddns.example.com
,进而能够处理其余的递归。我在这里遗漏了什么?
答案1
这可能是一个很老的问题,但我也遇到过类似的情况,因为我有一个动态公共 IP。我只是使用多个 duckdns 实例,它们指向我服务器上运行的不同服务的 10 个不同的子域。
我使用 Lets-encrypt 来处理反向代理和 SSL 证书,并且能够使用不同的子域(例如 a.duckdns.org、b.duckdns.org)指向相关的 IP:端口。
路由器上唯一的端口转发功能是将 SSL 端口指向 letsencrypt。我不建议不必要地打开额外的端口。
这是可从 a.duckdns.org 访问的音乐服务器的 letsencrypt.conf 示例
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name abcsonic.*; #(Your subdomain/cname)
include /config/nginx/ssl.conf;
client_max_body_size 0;
# enable for ldap auth, fill in ldap details in ldap.conf
#include /config/nginx/ldap.conf;
location / {
# enable the next two lines for http auth
#auth_basic "Restricted";
#auth_basic_user_file /config/nginx/.htpasswd;
# enable the next two lines for ldap auth
#auth_request /auth;
#error_page 401 =200 /login;
include /config/nginx/proxy.conf;
resolver 127.0.0.11 valid=30s;
set $upstream_airsonic airsonic;
proxy_pass http://192.168.10.100:4040; #(Airsonic IP address)
}
}
答案2
我通过逐一检查每个部分并确定它们工作正常来解决问题。问题出在 Google 域帐户上。显然,由于他们那边的一个错误,我的帐户被阻止,因为未激活。客户服务代理修复了这个问题后,一切都顺利运行。因此,我认为这个问题的布局可用于成功地在另一个 DDNS 后面设置 DDNS,并支持动态域/子域,而无需拥有静态 IP。