news 2026/3/1 15:07:31

树莓派4b安装系统实现DDNS动态域名绑定通俗解释

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树莓派4b安装系统实现DDNS动态域名绑定通俗解释

用树莓派4B打造永不掉线的远程家门:从刷系统到动态域名实战全记录

你有没有过这样的经历?
刚在公司调试好家里的NAS,准备下班后连上去下个电影,结果一试发现IP变了——连接失败。再查路由器,公网IP已经不是昨天那个了。这几乎是每个想从外网访问家里设备的人都会踩的坑。

问题出在哪?
绝大多数家庭宽带用的都是动态公网IP,运营商不会给你分配一个固定不变的地址。可能重启一下光猫,或者过了24小时自动重拨,你的“网络身份证”就换了一张。

那能不能让这个变化的IP,始终对应一个固定的域名?比如无论怎么变,我都能通过myhome.duckdns.org访问到家?

当然可以。这就是DDNS(Dynamic DNS)的核心价值。

而在这个过程中,树莓派4B凭借低功耗、高稳定性、强可编程性,成了最理想的“家庭DNS哨兵”。它能7×24小时蹲守在家,一旦发现IP变动,立刻通知域名服务商更新记录。

今天,我就带你手把手走一遍:如何从零开始,在树莓派4B上完成系统安装,并配置全自动DDNS服务。全程无坑,小白也能一次成功。


先搞清楚一件事:为什么非得是树莓派4B?

很多人第一反应是:“我家路由器不是自带DDNS功能吗?”
没错,部分中高端路由器确实支持花生壳、DuckDNS等协议。但现实很骨感:

  • 老旧路由器固件陈旧,不支持新API;
  • 厂商内置客户端更新频率慢,甚至几天才同步一次;
  • 设备本身性能弱,跑久了发热死机;
  • 更别说你还不能自定义逻辑或扩展功能。

相比之下,树莓派4B就像个“全能选手”:

  • 支持千兆网口 + 双频Wi-Fi,网络响应快;
  • 功耗仅3~5W,插着一年电费不到30块;
  • 启动只要20秒,断电恢复快;
  • 完整Linux系统,你想装啥都行;
  • GPIO还能接个LED灯,IP变了闪一下提醒你。
对比项普通PC主机路由器内置DDNS树莓派4B
功耗60W+<5W3~5W
稳定性易蓝屏宕机固件卡顿常见散热好,持续运行无忧
自定义能力极弱完全自由控制
成本已包含一次性投入约300元

所以,如果你真打算长期稳定地远程访问家中设备,树莓派4B是最划算、最可靠的选择


第一步:给树莓派“装操作系统”——别跳,这是根基

树莓派出厂就像一台没装系统的电脑主板,必须先把系统写进SD卡才能启动。这个过程俗称“刷机”。

你需要准备什么?

  • 树莓派4B主板(推荐4GB或8GB内存版)
  • 5V/3A电源线(千万别用手机充电头凑合!电压不稳容易烧卡)
  • 16GB以上高速microSD卡(Class 10或UHS-I)
  • 读卡器
  • 网线 or Wi-Fi环境
  • 可选:显示器和HDMI线(其实不用也行)

✅ 提示:整个过程可以在没有屏幕的情况下完成,也就是所谓的“无头模式”(headless setup),完全靠SSH远程登录操作。

开始刷系统(超详细步骤)

  1. 下载官方工具
    - 打开 https://www.raspberrypi.com/software/
    - 下载并安装Raspberry Pi Imager

  2. 选择系统镜像
    - 插入SD卡
    - 打开Imager → 点击“CHOOSE OS”
    - 推荐选:Raspberry Pi OS (64-bit)(性能更好,兼容性强)

  3. 选择存储设备
    - 点击“CHOOSE STORAGE”,选中你的SD卡
    - 点击“WRITE”开始烧录

⚠️ 注意:此操作会清空SD卡所有数据,请提前备份!

  1. 启用SSH和Wi-Fi(关键!)

烧录完成后,SD卡会被分为两个分区。此时不要拔卡,先做两件事:

(1)开启SSH

boot分区根目录新建一个空文件,名字叫:

ssh

注意:没有扩展名!Windows用户要关掉“隐藏已知文件类型”才能看到。

(2)预设Wi-Fi连接(可选)

如果你不想插网线,可以在这一步配置无线网络。

同样在boot分区创建文件:

wpa_supplicant.conf

内容如下(记得改SSID和密码):

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=CN network={ ssid="你的WiFi名称" psk="你的密码" key_mgmt=WPA-PSK }

保存后安全弹出SD卡,插入树莓派,通电开机。


登录树莓派:第一次见面请多指教

等待约30秒到1分钟,打开你家路由器的后台管理页面(通常是192.168.1.1192.168.31.1),查找新接入的设备,找到名为raspberrypi的主机,记下它的局域网IP。

然后打开终端(Mac/Linux)或 PowerShell(Windows),输入:

ssh pi@<树莓派IP>

例如:

ssh pi@192.168.31.100

默认密码是:

raspberry

首次登录后建议立即修改密码:

passwd

接着运行基础配置工具:

sudo raspi-config

重点设置这几项:
-Change User Password:改掉默认密码
-Network Options → Hostname:改成你喜欢的名字(如home-ddns
-Localisation Options
- 设置时区为Asia/Shanghai
- 键盘布局选 US,默认就行
-Interfacing Options → SSH:确认已开启
-Advanced Options → Expand Filesystem:扩展SD卡使用空间

全部完成后重启:

sudo reboot

DDNS到底是怎么工作的?三句话讲明白

我们常说“动态域名解析”,听起来很高大上,其实原理非常简单:

  1. 我有一个域名myrpi.duckdns.org
  2. 当前我家公网IP是112.98.234.101
  3. 树莓派每隔几分钟去网上查“我现在对外IP是多少”,如果变了,就告诉DuckDNS:“喂,把我域名指向新的IP”。

就这么简单。

整个流程就像你在微信群里说:“我现在搬到了朝阳区XX路XX号,大家来找我别跑错地方。”
只不过这里是机器自动喊话,而且每次搬家都会及时通知。

关键环节拆解

步骤干什么怎么实现
① 获取当前公网IP问外部网站“我现在的出口IP是什么?”curl ifconfig.me/ip
② 判断是否变化和上次记录的IP对比存本地文件或变量比较
③ 提交更新请求调用服务商API上传新IPHTTP GET请求带Token认证
④ 记录日志与重试失败了下次再来,成功了留个底写日志文件 + cron定时执行

只要这几个环节打通,你就拥有了一个“永远能找到的家”。


选哪家DDNS服务商?新手闭眼入DuckDNS

市面上主流方案有几种,我帮你总结清楚:

✅ DuckDNS(强烈推荐新手)

  • 免费提供子域名(如xxx.duckdns.org
  • API极简,一行命令就能更新
  • 不需要注册账号,GitHub一键授权
  • 社区脚本丰富,兼容性极佳

缺点:域名不太美观,适合测试和个人使用

✅ No-IP

  • 提供免费三级域名(如mypi.no-ip.org
  • 每30天要手动点击确认一次,防止滥用
  • 适合对品牌有一定要求的用户

✅ 阿里云 / Cloudflare(进阶推荐)

如果你已经有自己的域名(比如买了xiaoming.com),强烈建议用这些平台:

  • 安全性高,支持API Token鉴权
  • 可创建任意子域名(如nas.xiaoming.com
  • TTL可调至60秒以内,变更生效更快
  • 支持HTTPS、CDN、防火墙等高级功能

推荐组合:Cloudflare + 树莓派 + 自定义域名 = 最佳实践


实战:用DuckDNS搭建自动更新脚本

下面我们以DuckDNS为例,一步一步部署。

步骤1:注册DuckDNS账户

  1. 打开 https://www.duckdns.org
  2. 点击“Login with GitHub”
  3. 添加一个子域名,比如myrpi
  4. 页面会显示一串TOKEN,复制下来备用(形如a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6

步骤2:编写自动更新脚本

回到树莓派终端,创建脚本文件:

nano ~/duckdns_update.sh

粘贴以下内容(请替换DOMAIN和TOKEN):

#!/bin/bash # === 配置区 === DOMAIN="myrpi" # 替换为你注册的域名 TOKEN="a1b2c3d4-e5f6-g7h8-i9j0-k1l2m3n4o5p6" # 替换为你的Token LOGFILE="/var/log/duckdns.log" # === 主程序 === # 获取当前公网IP IP=$(curl -s https://ifconfig.me/ip) # 检查是否获取成功 if [ -z "$IP" ]; then echo "$(date): ❌ 无法获取公网IP" >> $LOGFILE exit 1 fi # 调用DuckDNS API更新 RESPONSE=$(curl -s "https://www.duckdns.org/update?domains=$DOMAIN&token=$TOKEN&ip=$IP") # 记录日志 echo "$(date): IP=$IP, Response=$RESPONSE" >> $LOGFILE # 判断结果 if [ "$RESPONSE" = "OK" ]; then echo "✅ DDNS更新成功" else echo "❌ 更新失败: $RESPONSE" fi

保存退出(Ctrl+X → Y → Enter)

赋予执行权限:

chmod +x ~/duckdns_update.sh

步骤3:设置定时任务(每10分钟检查一次)

运行:

crontab -e

选择编辑器(推荐 nano),在最后一行添加:

*/10 * * * * /home/pi/duckdns_update.sh

意思是:每10分钟执行一次脚本

✅ 至此,自动化机制已建立,无需人工干预


验证效果:看看你的域名灵不灵

方法1:查看日志

tail -f /var/log/duckdns.log

正常输出应该是:

Mon Oct 28 10:30:01 CST 2024: IP=112.98.234.101, Response=OK

方法2:ping你的域名

ping myrpi.duckdns.org

你应该能看到它解析到了你当前的公网IP。

方法3:模拟IP变化(终极验证)

你可以尝试重启光猫,等几分钟后再看日志,你会发现:

  • 新的IP被检测到
  • API返回OK
  • 域名自动指向新地址

说明一切正常!


进阶优化:让DDNS更稳更安全

虽然cron脚本能跑起来,但作为长期运行的服务,还有几个提升点:

✅ 创建系统日志目录

sudo mkdir -p /var/log sudo touch /var/log/duckdns.log sudo chown pi:pi /var/log/duckdns.log

✅ 使用 systemd 服务管理(替代cron)

有些人喜欢把脚本做成系统服务,好处是:
- 开机自启
- 支持失败重启
- 日志集中管理

创建服务文件:

sudo nano /etc/systemd/system/ddns.service

内容如下:

[Unit] Description=DuckDNS Update Service After=network.target [Service] Type=simple User=pi ExecStart=/home/pi/duckdns_update.sh Restart=always RestartSec=300 [Install] WantedBy=multi-user.target

启用服务:

sudo systemctl enable ddns sudo systemctl start ddns

以后可以用:

sudo systemctl status ddns

查看运行状态。


安全提醒:别让你的树莓派成为黑客跳板

DDNS虽然方便,但也带来风险。一旦域名暴露在外网,攻击者可能尝试暴力破解SSH。

必须做的几件事:

  1. 禁用root远程登录
    bash sudo nano /etc/ssh/sshd_config
    修改:
    PermitRootLogin no

  2. 更换SSH端口
    同样在上面文件中:
    Port 2222 # 改成非标准端口
    然后重启SSH:
    bash sudo systemctl restart ssh

  3. 启用防火墙(ufw)
    bash sudo apt install ufw sudo ufw allow 2222 # 只允许指定端口 sudo ufw enable

  4. 不要在脚本里硬编码敏感信息
    可将Token存为环境变量或配置文件,权限设为600。


能做什么?这些场景太实用了

一旦你有了稳定的域名入口,玩法瞬间打开:

🌐 远程桌面访问

ssh pi@myrpi.duckdns.org -p 2222

随时随地管理你的家庭服务器。

💻 搭建个人博客

配合Nginx,把Markdown写的日记发布出去:

http://blog.myrpi.duckdns.org

📹 查看摄像头画面

安装MotionEyeOS或ZoneMinder,通过浏览器观看实时监控。

🗄️ NAS文件共享

配置Samba服务,手机、电脑随时取回照片文档。

🔐 加上HTTPS更专业

结合Let’s Encrypt免费证书,实现绿色小锁访问:

certbot --nginx -d nas.xiaoming.com

结尾:一次设置,长久受益

回头看整个流程,其实只有三步:

  1. 给树莓派装系统—— 解决“能不能跑”的问题
  2. 写脚本检测IP变化—— 解决“知不知道变”的问题
  3. 调用API更新域名—— 解决“能不能改”的问题**

剩下的,就是交给时间。

只要你家不断电、不断网,这个小小的树莓派就会一直替你守着那扇“通往家的门”。

未来你还可以继续拓展:
- 加个温度传感器,变成智能气象站;
- 接个继电器,远程开关台灯;
- 联动Home Assistant,打造全屋自动化中心。

但所有这一切的起点,都是今天这一套“树莓派4B + DDNS”组合拳。

如果你是第一次玩嵌入式开发,不妨就从这里开始。
不需要多高的门槛,只要一块板子、一张卡、一根线,就能迈出掌控家庭网络的第一步。


🔧关键词汇总(方便搜索回顾):
树莓派4b安装系统、DDNS、动态域名解析、Raspberry Pi OS、DuckDNS、公网IP、cron定时任务、API接口、远程访问、域名绑定、Linux脚本、网络配置、SSH登录、自动化更新、家庭服务器、systemd服务、网络安全、路由器NAT、Let’s Encrypt、Headless模式

🎯一句话总结
用树莓派做DDNS,不是为了炫技,而是为了让“回家”这件事,变得更简单、更确定。

如果你按这篇文章操作成功了,欢迎留言分享你的域名(当然别真写出来 😄)。
也欢迎提出任何疑问,我会一一回复。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/25 3:27:49

Anaconda卸载后系统清理指南

Anaconda卸载后系统清理指南 在人工智能与数据科学开发中&#xff0c;Python 环境的混乱几乎是每个开发者都会遇到的问题。你是否曾在终端里敲下 python 命令时&#xff0c;突然发现它指向了一个早已“被卸载”的 Anaconda&#xff1f;或者新安装的 PyTorch 总是莫名其妙地报错…

作者头像 李华
网站建设 2026/2/25 19:36:07

Git与PyTorch协同开发实践:基于CUDA镜像的CI/CD流程搭建

Git与PyTorch协同开发实践&#xff1a;基于CUDA镜像的CI/CD流程搭建 在深度学习项目日益复杂、团队协作频繁的今天&#xff0c;一个常见的场景是&#xff1a;开发者A在本地训练模型一切正常&#xff0c;提交代码后CI系统却报错“CUDA not available”&#xff1b;或者新成员花两…

作者头像 李华
网站建设 2026/2/11 12:15:47

PyTorch镜像中运行Graph Neural Network图神经网络

PyTorch镜像中运行Graph Neural Network图神经网络 在当今AI模型日益复杂、数据规模持续膨胀的背景下&#xff0c;如何快速搭建一个稳定高效的深度学习开发环境&#xff0c;已成为研究人员和工程师面临的首要挑战。尤其是在图神经网络&#xff08;GNN&#xff09;这类对算力要求…

作者头像 李华
网站建设 2026/2/20 9:21:15

JiyuTrainer下载与配置:结合PyTorch镜像进行模型微调

JiyuTrainer 下载与配置&#xff1a;结合 PyTorch 镜像进行模型微调 在深度学习项目开发中&#xff0c;最让人头疼的往往不是模型结构设计或调参优化&#xff0c;而是环境搭建本身。你是否经历过这样的场景&#xff1a;刚克隆一个开源项目&#xff0c;满怀期待地运行 python tr…

作者头像 李华
网站建设 2026/2/26 0:43:46

Git命令大全:AI开发者必须掌握的版本控制技能

Git与容器化环境协同&#xff1a;AI开发者的高效工程实践 在深度学习项目日益复杂的今天&#xff0c;一个常见的场景是&#xff1a;研究员在本地训练出一个效果出色的模型&#xff0c;但当同事尝试复现时&#xff0c;却因PyTorch版本不一致、CUDA驱动缺失或依赖库冲突而失败。这…

作者头像 李华
网站建设 2026/2/25 23:13:30

SystemVerilog封装特性全面讲解

从“能跑就行”到专业设计&#xff1a;SystemVerilog封装的艺术你有没有遇到过这种情况——仿真突然崩溃&#xff0c;查了半天发现是某个同事在测试用例里直接修改了驱动器内部的状态变量&#xff1f;或者你在复用一个老项目的类时&#xff0c;发现到处都是裸露的成员变量&…

作者头像 李华