如何在没有 NAT 环回或 /etc/hosts 中的 DNS 更改的情况下将动态 DNS 域解析为内部 IP?

如何在没有 NAT 环回或 /etc/hosts 中的 DNS 更改的情况下将动态 DNS 域解析为内部 IP?

我在家里的树莓派上设置了一个 nextcloud 服务器,我可以通过 noip dyn-dns 域从我的 wifi 外部访问它。但是从网络内部我无法使用该域,因为它解析为我的外部 ip,而不是树莓派的内部 ip。

为此,我发现了两种方法,但对我来说都不起作用:

1.) 最广泛建议的方法是激活路由器上的 NAT 环回。不幸的是,这是不可能的,因为我的路由器不支持此功能,而且我也不打算只为这个用例购买新的路由器。

2.) 更改本地 DNS 条目。我正在运行 Linux,因此我可以更改 /etc/hosts 以将域映射到内部 IP。如果我本地连接到我的家庭网络,则工作正常,但如果我想从外部连接,则不起作用。也许有办法绕过这个问题,但这种方法的另一个主要缺点是我需要编辑多个设备(包括 Windows、iOS 和 Android)的本地 DNS 条目。所以,我更愿意找到一种不需要修改多个本地客户端但以更集中的方式进行的方法。

还有其他方法可以解决这个问题吗?

答案1

我通过在树莓派上设置 DNS 服务器解决了这个问题。

为此我做了:

  1. 在我的树莓派上设置静态 IP

  2. 安装dnsmasq并按照这篇文章进行设置: https://www.raspberrypi.org/forums/viewtopic.php?t=46154 我使用了本文提供的 /etc/dnsmasq.conf 文件,但做了以下调整:

    #the domain to be accesses from outside and inside
    domain=mydomain.ddns.net
    
    resolv-file=/etc/resolv.dnsmasq  
    min-port=4096
    
    #Google's DNS Server:
    server=8.8.8.8 
    
    # Max cache size dnsmasq can give us, and we want all of it!    
    cache-size=10000    
    
    # Below are settings for dhcp. Comment them out if you dont want    
    # dnsmasq to serve up dhcpd requests.    
    dhcp-range=192.168.0.101,192.168.0.149,255.255.255.0,1440m    
    dhcp-option=3,192.168.0.100    
    dhcp-authoritative
    

    我取消了有关 DHCP 的注释,这使得树莓派可以访问。我不太明白 DHCP 和 DNS 在这种情况下是如何关联的,但由于它是这样工作的,所以我没有进一步研究。

  3. 在树莓派上的 /etc/hosts 中添加了以下行,这样我的域名就可以在内部解析到树莓派的静态 IP。

    192.168.0.100   mydomain.ddns.net 
    
  4. 在不同客户端的网络设置中将我的树莓派的静态 IP 设置为 DNS 服务器(就我而言,这在 Linux、Windows、Android 和 iOS 上都有效)。

更新

树莓派的 DHCP 设置干扰了我路由器的 DHCP,因此我通过注释掉 /etc/dnsmasq.conf 中有关 DCHP 的行,在树莓派上禁用了它。只要您在连接的客户端上手动将树莓派的 IP 添加为 DNS 服务器,它在没有它的情况下也可以正常工作。

更新2:

以下是关于在 raspbian 上的 nextcloud 环境中安装 DNS 服务器的所有步骤的详细说明: https://ownyourbits.com/2017/03/09/dnsmasq-as-dns-cache-server-for-nextcloudpi-and-raspbian/

相关内容