You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

家庭服务器DNS问题:内网设备域名解析至本地IP方案咨询

解决内网设备将No-IP域名解析到本地服务器地址的问题

这个需求我碰到过很多次,核心是要让内网设备访问你的域名时不走公网,直接指向本地的192.168.2.XXX。最省心的是全局生效的方案,实在不行再给单个设备单独配置,下面给你详细说:

一、路由器端配置(最推荐,一劳永逸)

绝大多数家用路由器都支持本地域名映射(也叫Hosts映射、静态DNS条目),配置后整个内网的所有设备都会自动把你的No-IP域名解析到本地地址,不用挨个改设备:

  • 打开浏览器登录路由器管理后台(地址通常是192.168.1.1192.168.2.1,看你的网段,路由器底部一般有标注)
  • 找到DNS相关的设置页面,不同品牌的路由器叫法不一样,比如小米叫“静态域名映射”,华硕叫“Hosts”,TP-Link叫“本地DNS”
  • 添加一条映射记录:
    • 主机名:填你在No-IP注册的完整域名(比如yourdomain.ddns.net
    • IP地址:填你的树莓派内网地址192.168.2.XXX
  • 保存设置,部分路由器需要重启后生效,之后内网设备访问域名就会直接指向本地服务器了

二、单设备单独配置(适合路由器不支持映射的情况)

如果你的路由器没这个功能,那就给每个设备单独改Hosts或者用对应方法:

Linux/macOS 设备

和Windows改Hosts原理一致,只是文件位置不同:

  • 打开终端,输入sudo nano /etc/hosts(需要管理员权限)
  • 在文件末尾添加一行:192.168.2.XXX yourdomain.ddns.net
  • Ctrl+O保存,Ctrl+X退出编辑器
  • macOS需要刷新DNS缓存:运行sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
  • Linux发行版不同,刷新命令略有差异,比如Ubuntu用sudo systemctl restart systemd-resolved,CentOS用sudo systemctl restart named

iOS 设备

iOS没有直接改Hosts的入口,有两种方法:

  • 方法1:配置文件法(无需越狱)
    1. 在电脑上用文本编辑器创建一个.mobileconfig格式的配置文件,内容模板如下(替换掉域名和IP,UUID可以在线生成两个不同的):
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
      <plist version="1.0">
      <dict>
          <key>PayloadContent</key>
          <array>
              <dict>
                  <key>Hosts</key>
                  <dict>
                      <key>yourdomain.ddns.net</key>
                      <string>192.168.2.XXX</string>
                  </dict>
                  <key>PayloadType</key>
                  <string>com.apple.webcontent-filter</string>
                  <key>PayloadIdentifier</key>
                  <string>com.your.hosts</string>
                  <key>PayloadUUID</key>
                  <string>12345678-1234-1234-1234-1234567890AB</string>
                  <key>PayloadVersion</key>
                  <integer>1</integer>
              </dict>
          </array>
          <key>PayloadType</key>
          <string>Configuration</string>
          <key>PayloadIdentifier</key>
          <string>com.your.config</string>
          <key>PayloadUUID</key>
          <string>87654321-4321-4321-4321-BA0987654321</string>
          <key>PayloadVersion</key>
          <integer>1</integer>
          <key>PayloadDisplayName</key>
          <string>Local Hosts Mapping</string>
          <key>PayloadOrganization</key>
          <string>Your Name</string>
          <key>PayloadRemovalDisallowed</key>
          <false/>
      </dict>
      </plist>
      
    2. 把文件保存为hosts.mobileconfig,通过AirDrop或邮件发送到iOS设备
    3. 打开iOS的「设置」→「已下载描述文件」,安装并信任这个配置文件,重启设备后生效
  • 方法2:越狱设备
    直接用iFile、Filza等文件管理器修改/etc/hosts文件,添加和Linux一样的条目即可

Android 设备

  • 无Root权限:用第三方APP比如「Hosts Editor」(从正规应用商店下载),打开后添加条目:IP填192.168.2.XXX,域名填yourdomain.ddns.net,应用设置后重启设备生效
  • 有Root权限:用Root Explorer等文件管理器找到/system/etc/hosts,编辑文件添加192.168.2.XXX yourdomain.ddns.net,保存后重启设备

三、进阶方案:搭建本地DNS服务器

如果内网设备多,或者路由器限制多,可以直接在你的树莓派上搭一个本地DNS服务器(比如用dnsmasq),这样所有设备都通过它解析域名:

  • 在树莓派上安装dnsmasq:sudo apt update && sudo apt install dnsmasq
  • 编辑配置文件:sudo nano /etc/dnsmasq.conf,添加一行:address=/yourdomain.ddns.net/192.168.2.XXX
  • 重启dnsmasq服务:sudo systemctl restart dnsmasq
  • 最后把内网所有设备的DNS服务器设置为树莓派的内网IP192.168.2.XXX,或者在路由器上把默认DNS改成树莓派IP,这样所有设备访问你的域名都会直接指向本地服务器

内容的提问来源于stack exchange,提问作者clorisanderton

火山引擎 最新活动