原则上,这个应该算纯网络部分,貌似和IOT没啥关联。
但是我计划用放置在家中的香蕉派(Banana PI M2+)来作为IOT系统中的网络服务器,因此如何访问到家中Bananpi M2+就成为一个首先要解决的问题。
而Dynamic DNS 无疑是解决这个问题的最佳方案(至少我这么认为)。
所以,把这部分记录下来,算是我学习IOT的一部分吧。
关于Dynamic DNS
简单说一下我对Dynamic DNS 的理解。
要说Dynamic DNS,就不得不提DNS(域名解析服务);要提DNS,就不得不提域名。
简单的讲,互联网的主机靠IP来区分,要访问一台主机上的服务(HTTP、 FTP、EMAIL、DATABASE等)我们首先要知道对方的IP地址。
但是互联网的主机千千万,抽象的IP地址根本无法记忆,而域名就是给这个地址起一个好记的名字。
所以,我们就可以通过www.baidu.com这样的域名来访问到百度,通过www.godpub.com这样的域名来访问到狗趴论坛。
而从域名到IP的过程,就是域名解析,是由域名解析服务器(Name Server)来完成的。
而另外一种场景就是分配给主机的IP不时的变化。
这时如果使用普通的域名解析服务,我们需要不时的修改解析记录,来将域名指向更新后的IP。
这时会有一些问题存在,比如变化频繁,修改工作量大;变化时机不定,无法确定何时修改。
Dynamic DNS 很好的解决如上问题,它的基本原理就是,当主机关联的IP变化时,自动更新解析记录。
所以,屏蔽掉一些技术细节。
通俗的讲:
- 互联网上的主机靠IP区分和访问。
- 域名给IP地址起了个好记的名,从域名到IP的过程就是域名解析。
-
Dynamic DNS自动更新解析记录,适合关联到主机的IP不时变化的场景。
Free DNS service by he.net
he.net是老牌网络服务商啦,十几年前就使用过他们的域名解析服务。
现在他们的DNS服务支持Dynamic DNS啦。
关于他们的DNS服务以及Dynamic DNS的使用细节,请参考:https://dns.he.net/
使用Dynamic DNS大致需要如下步骤:
- 将要解析的域名DNS设置为he.net的DNS
- 在he.net的DNS面板中添加域名
- 添加对应的解析记录(比如A记录),并选取“Enable entry for dynamic dns”
- 生成用于DDNS客户端的密码(Generate the key used for dynamic DNS updates)
-
在主机上使用DDNS client。(设置定时任务)
操作实例
1)将域名DNS设置为he.net的DNS
2)在he.net的DNS面板中添加域名
3)添加对应的解析记录
4)生成用于DDNS client的密码
5)设置DDNS client
- sudo crontab -e
-
*/5 * * * * curl "https://dyn.dns.he.net/nic/update" -d "hostname=iot.godpub.com" -d "password=XXXXXX" -k
-
设置NAT
对于家庭局域网内的设备而言,都通过一个公网IP(由ISP分配)出去的。
我们上述DDNS设置最终解析到的就是这个公网IP。
通过这个IP是无法直接访问到局域网内的设备的,所以我们需要使用NAT(网络地址转换)来将对应的服务映射到局域网的设备。
比如,将HTTP服务、MQTT Broker服务等映射到我的局域网香蕉派上。
这个很简单的啦,进路由器设置一下就可以啦。这里不多讲啦。
当前战果
经过DDNS以及NAT设置,
并且在我的香蕉派上装了个apache2 web server
详情参考: 【JoyTag M1+学习】M1+ 安装Apache2、PHP5、MYSQL (同样适用于其它香蕉派、树莓派设备)
现在访问http://iot.godpub.com/ 就会打开我香蕉派上的web server 欢迎页面哦
当然,如果您访问不到,可能是我拔电源了
总结
本文简单介绍了域名、DNS、Dynamic DNS的原理。
并已he.net的DNS服务为例,为iot.godpub.com添加了一个Dynamic DNS的A Record。
并通过NAT,将http服务映射到局域网内香蕉派上的80端口。
限于篇幅,对一些技术细节只做通俗的解释,想了解对应知识的,请参阅相应的技术文档。
谨以本文抛砖引玉,希望大家可以尝试在局域网设备上折腾出更多好玩的功能,而不用购买昂贵的云服务或者独立主机哦