|
本帖最后由 buronnie 于 2017-10-29 10:22 编辑
要想在外网访问Home Assistant, 需要给树莓派分配一个静态IP。不过绝大多数用户都没有这个条件,所以官网推荐duckdns。配合路由器的端口映射和加密https,我们可以做到安全方便的从任何地方访问home assistant server. 接下来我们慢慢聊一聊这是如何实现的。
- 端口映射(port forwarding)
现在所有的路由器都支持这个技术,它解决了从外网访问内网服务器的问题。
通常我们上网都是从内向外:
我的电脑 —> 路由器 —> www.sina.com
在home assistant中我们需要的是从外网访问内网服务器:
手机 —> 路由器(71.23.0.1) —> home assistant(树莓派)(192.168.1.20)
这个过程看似简单,却还是有两个问题需要解决:
1)如何给路由器一个固定的IP地址?
2)如何让我们的http请求穿过路由器到达树莓派?
通常网络运营商给用户的都是动态IP地址,要解决这个问题我们需要duckdns,这个一会在下面会仔细说。
假设我们已经有个固定的IP地址,接下来就需要端口映射来帮助我们把从外面来的请求转发给内网的树莓派。这个过程就叫做端口映射。
2. DuckDNS
打开https://duckdns.org, 用google或facebook账户登录后,可以自定义一个域名(domain),最好是好记的,还有当前路由器的IP地址,直接度娘“我的ip”就能查到。每当我们的公网IP改变时,home assistant 就会通知DuckDNS更新IP, 从而保证我们的域名总是链接到最新的IP地址。设置成功之后,我们可以在浏览器里输入: http://<mydomain>.duckdns.org. 应该可以看到路由器的配置界面。这说明我们的域名和IP已经成功绑定。
3. 配置端口映射
在路由器管理界面里,找到port forwarding选项。填写:
外部起始端口:80
外部结束端口:80
内部起始端口:8123
内部结束端口:8123
内部IP地址:home assistant的IP 地址,在路由器菜单里能找到。
这样我们就设置好了端口映射,80是默认的http请求使用的端口,8123是home assistant使用的端口。
保存设定,再次访问http://<mydomain>.duckdns.org,这次看到了home assitant的界面,说明端口映射成功!
4. 安装DuckDNS插件
这个插件可以同步公网IP到DuckDNS,保证域名链接到最新的IP。这个插件还集成了let_encrypt插件的功能,使我们可以使用加密的https安全访问内网。安装插件非常容易,安装成功后需要配置一下选项:
{
"lets_encrypt": {
"accept_terms": true,
"certfile": "fullchain.pem",
"keyfile": "privkey.pem"
},
"token":<可以在duckdns账户中找到>,
"domains": ["<mydomain>.duckdns.org"],
"seconds": 300
}
最后启动duckdns 插件即可。
需要注明的一点是如果已经使用了duckdns插件,那么就不要安装Let’s Encrypt插件,因为Let’s encrypt插件的功能已经整合进去了。
5. 设置https访问
Let’s encrypt 会自动生成并更新https需要的安全证书,打开configuration.yaml, 添加
http:
base_url: https://buronnie.duckdns.org:8123
ssl_certificate: /ssl/fullchain.pem
ssl_key: /ssl/privkey.pem
最后去路由器端口映射菜单,将之前的配置里面的
外部起始端口改为443
外部结束端口改为443
因为https默认使用的是443端口.
重启home assistant使配置生效后,就可以使用https://<mydomain>.duckdns.org访问了。
|
评分
-
查看全部评分
|