第二讲:公网IP与DDNS——打通远程访问的第一道门

各位同学,咱们今天聊点实在的。

Home Assistant 装好了,本地玩得挺溜。但你想过没有——出门在外,怎么连回家里的智能家居?

说白了,这就是远程访问要解决的核心问题。而远程访问的第一步,就是搞定公网IP和DDNS。

一、公网IP:远程访问的“门牌号”

先问个问题:你家路由器在互联网上,到底有没有一个唯一的地址?

我刚开始折腾Home Assistant时,也以为只要路由器能上网,就肯定有公网IP。结果一查,发现运营商给的是个内网地址——10.x.x.x或者100.x.x.x开头的。这种地址,说白了就是运营商内部用的,外面根本访问不到。

什么是公网IP?

公网IP就是互联网上唯一的、可路由的IP地址。有了它,外网设备才能直接找到你家路由器。

那怎么判断自己有没有公网IP?很简单:

  • 登录路由器管理页面,查看WAN口IP地址
  • ip.sbwhatismyip.com 查一下
  • 对比两个地址是否一致

如果一致,恭喜你,你有公网IP。如果不一致,嗯...你大概率被运营商“内网化”了。

二、向运营商申请公网IP

没有公网IP怎么办?别急,这事有办法解决。

我个人习惯是直接打运营商客服电话。电信、联通、移动都行,就说:“你好,我需要一个公网IP,家里装了监控和NAS,内网用不了。”

这里有个小技巧——我建议你态度好一点,语气客气点。客服每天接几百个电话,你态度好,他办事也痛快。我遇到过几次,客服直接说“好的,我帮你开通,重启一下路由器就行”。

避坑指南:

我曾经遇到过一家运营商,客服说“公网IP要加钱”。别慌,换个客服再打一次,或者直接说“我要投诉到工信部”。大部分情况下,家庭宽带是可以免费申请公网IPv4的。

申请成功后,重启路由器,再查一下WAN口IP。这时候应该能看到一个公网地址了。

三、动态DNS(DDNS)原理

有了公网IP,是不是就万事大吉了?

不是。问题在于——运营商给你的公网IP是动态的。什么意思?就是它会变。可能每隔几天、几周,IP就换了。

你想想看,你出门在外,想连家里的Home Assistant。结果IP变了,你连不上。这多尴尬。

DDNS就是解决这个问题的。

DDNS工作原理:

DDNS(动态域名解析)把你的域名(比如 myhome.abc.com)和家里的动态公网IP绑定在一起。当IP变化时,DDNS客户端会自动更新DNS记录,让域名始终指向最新的IP。

说白了,你只需要记住一个域名,不用管IP怎么变。DDNS帮你搞定一切。

四、在路由器上配置DDNS(以阿里云DNS为例)

好,理论讲完了,咱们来实操。

我推荐用阿里云DNS做DDNS。为什么?因为稳定、免费、配置简单。我自己用了三年,没出过问题。

第一步:准备工作

  1. 注册阿里云账号,开通DNS服务
  2. 添加一个域名(比如 myhome.abc.com
  3. 获取AccessKey ID和AccessKey Secret

注意:

AccessKey相当于你的账号密码,千万别泄露。我见过有人把AccessKey传到GitHub上,结果被人拿去刷流量,一个月欠费几千块。

第二步:在路由器上配置DDNS

不同路由器界面不一样,但逻辑差不多。以我常用的华硕路由器为例:

1. 登录路由器管理页面
2. 进入“高级设置” -> “DDNS”
3. 选择“自定义DDNS”
4. 填写以下信息:
   - 服务器:www.aliyun.com
   - 主机名:myhome.abc.com
   - 用户名:你的AccessKey ID
   - 密码:你的AccessKey Secret
5. 点击“应用”

如果是OpenWrt或梅林固件,可以用脚本实现。我贴一个我常用的脚本:

#!/bin/sh
# 阿里云DDNS更新脚本
# 放在 /etc/ddns/ 目录下

ALI_DOMAIN="myhome.abc.com"
ALI_ACCESS_KEY="你的AccessKey ID"
ALI_ACCESS_SECRET="你的AccessKey Secret"

# 获取当前公网IP
CURRENT_IP=$(curl -s http://ip.sb)

# 更新DNS记录
curl -s "https://alidns.aliyuncs.com/?Action=UpdateDomainRecord&DomainName=$ALI_DOMAIN&RecordId=你的RecordId&RR=@&Type=A&Value=$CURRENT_IP&AccessKeyId=$ALI_ACCESS_KEY&Timestamp=$(date -u +%Y-%m-%dT%H:%M:%SZ)"

第三步:验证配置是否成功

配置完成后,等个一两分钟。然后:

  • 在电脑上打开命令行,输入 ping myhome.abc.com
  • 看返回的IP是不是你家的公网IP

如果一致,恭喜你,DDNS配置成功了。

我的经验:

配置完成后,我建议你手动重启一次路由器。有时候DDNS服务不会立即生效,重启一下能加速更新。另外,记得在路由器上设置定时任务,每隔半小时检查一次IP是否变化。我习惯用crontab,每30分钟执行一次脚本。

五、常见问题与避坑

最后,我总结几个我踩过的坑:

问题 原因 解决方法
DDNS更新失败 AccessKey权限不足 在阿里云控制台给AccessKey添加DNS管理权限
域名解析不生效 DNS缓存未刷新 等待5-10分钟,或手动清除本地DNS缓存
公网IP频繁变化 运营商策略 设置更短的DDNS更新间隔(比如5分钟)

嗯,这一讲的内容就到这里。公网IP和DDNS是远程访问的基础,搞定了这一步,后面配置端口转发、HTTPS证书就顺理成章了。

下一讲,咱们聊聊端口转发——怎么把Home Assistant的服务暴露到公网上,同时保证安全。