最终效果如上图所示,可以通过域名,在外网访问家中的私有网盘。
可以自动同步手机文件和账户管理等。
本篇文章没有高深的东西,都是简单知识点。但是涉及面比较多,包括:网络知识
、爬虫解析
、定时任务
、域名解析
、Linux
、Python
、Docker
。
搭建私有网盘步骤:
- 宽带的外网访问(本篇文章)
- 树莓派私有网盘全攻略(二):Docker+NextCloud+Nginx
- 导入已有的资源和WebDAV使用
外网要访问家庭网络中的设备,需要花费一些精力。
但是折腾好了以后,就相当于有了一个小服务器,用来跑跑测试程序,还是很不错的。准备条件:
1. 树莓派一个
当然,理论上所有计算机都可以,只是树莓派方便一些。
2. 需要有一个公网IP
IP地址分为
公网IP
和私有IP
。公网IP需要给运营商打电话索取,一般情况下,运营商会免费给你家网络分配一个动态的公网IP。如果没有公网IP,那么就比较麻烦了。3. 最好绑定一个域名
运营商给你分配的外网IP是动态的。真正用起来,限制比较多。所以最好绑定一个域名来使用。这个时候只需要在IP变动以后,及时更新域名的解析,就可以完美的解决动态地址带来的不方便。
正文开始
整体思路:利用家里的路由器,映射端口到外网。然后通过域名解析服务API,及时更新动态IP与域名的映射关系。就可以实现外网域名访问家中的设备。
路由器设置
1. MAC地址与IP绑定(非必须)
将家庭网络中的树莓派设置成固定的IP,方便下一步中,端口映射设置。
登录TPLink的管理界面 【应用管理】 --【IP与MAC绑定】
我这里将 树莓派的IP固定为 192.168.0.200
2. 映射端口到外网
登录TPLink的管理界面 【应用管理】 --【虚拟服务器】
将需要映射到外网的端口,添加到列表中。
常见的端口说明:
端口 | 服务 | 说明 |
---|---|---|
21 | FTP | FTP 服务所开放的端口,用于上传、下载文件 |
22 | SSH | SSH 端口 |
23 | Telnet | Telnet 端口 |
80 | HTTP | 用于 HTTP 服务 |
443 | HTTPS | 用于 HTTPS 服务 |
3306 | MySql | MySql对外提供服务 |
5900+ | VNC | 树莓派远程桌面VNC端口 |
6800 | Aria2 | 远程管理Aria2 |
9000 | portainer | portainer默认端口 |
域名与IP映射(关键)
这里有两种方法实现。
方法1(简单):
方法1的思路是,利用tplink路由器提供的DDNS功能,将本地的公网IP映射到 xxx.tpddns.cn(前提是已经有了公网的IP)。
然后将自己的域名,再指向 xxx.tpddns.cn 就可以实现域名访问了。
方法2(复杂):
方法2的实现方式,需要参考购买的域名服务商。
我购买的是万网域名,所以使用阿里云
提供的服务。
进入阿里云API平台
,找到【域名与网站(万网)】--【云解析】--【API文档】
这里详细说明了,如何使用阿里云提供的API,修改域名解析记录的方法。同时可以前往阿里云API平台查看Java、Node.js、Go、PHP、Pythons实例代码,支持填写参数在线调试。并且SDK的支持特别全。
获取外网IP
有了阿里云的API,只需要将自己的公网IP更新上去就好。
利用IP查询网站获取自己的公网IP,然后利用刚才上一步中的API接口,更新域名解析地址就OK了。
这时候,域名已经可以正常访问到家中的树莓派设备了。
我们可以使用Python,写一个简单的爬虫脚本,把查询到的IP解析出来。然后通过上一步的阿里云API,更新域名解析。源码
参考文章:https://blog.csdn.net/mgsky1/article/details/80466840
以及Python实现的源码:https://github.com/mgsky1/DDNS自己使用时候,最好在本地保存一下IP,用来做判断,可以减少阿里API的请求频率。
既然是动态IP,那么它会不定时的变化,所以我们需要在树莓派上,跑一个定时任务,利用定时任务,及时更新我们的IP地址,保障域名可以正常访问。定时任务参考# 每五分钟执行一下IP更新脚本 # 为了减少调用阿里API的频率,最好本地保存一个公网IP值, # 对比以后,只有IP不一致时,再调用API更新IP */5 * * * * /home/pi/ddns/DDNS.py
话外
如果运营商没有给你分派到外网的IP,那么就比较麻烦了。
具体可以参考