基于阿里云API实现简单DDNS

2019-02-28 作者:

This is a post talking about using Aliyun Domain Control API (and python sdk as well) to script a simple, self-own ddns service, with only one assumption – a public ip over WAN port of your router.

 

原始状态

光猫 <—> R7000主路由 <—> 需要出门的母鸡+小鸡们

 

设计思路

  • 办法1:破解光猫,将光猫与R7000桥接。
    • 优势:内网只有一层,简洁明了。
    • 劣势:打N通电话,下N多工具,还要将独立IPTV信道映射或proxy到R7000的某个LAN口。
  • 办法2:硬件不做任何变动,添加两层映射。
    • 优势:实施安全性高。
    • 劣势:理论上,走ddns经双层转发,传输性能受影响。
  • 总结:人老色衰,首选安全方案。

 

网络拓扑

第一步:确定你拥有的是公网IP

  • 如果最接近外网的是光猫,那么登录光猫看WAN IP #1。
  • 如果最接近外网的是路由器,用路由器PPPoE拨号,那么拨通后看路由器WAN IP #1。
  • 用内网任何一台计算机访问ifconfig.me,拿到PUBLIC IP #2。
  • 如果#1和#2两个IP一致,恭喜,进入下一关。【注】重启光猫/路由器WAN IP会变化,是OK的;唯一要求是#1和#2永远保持一致。
  • 二者不一致,要么至此放弃,要么电话运营商客服,要求给自己账户提供公网IP。

 

第二步:将光猫与R7000间的映射打通

  • 先找到R7000在光猫上的LAN口IP,建议R7000使用固定IP。
  • 然后把两侧端口一对一映射起来,端口号建议两两一致(因为之后再设定第二层转发时不容易忘),也可完全不对应,看自己需求。

 

第三步:将R7000与内网计算机之间的映射打通

  • (操作原理和方法同上)
  • 内网2层的IP及端口号,对应内网计算机服务地址和端口号。

 

第四步:先不谈域名,看公网IP双层转发能否正常工作。

  • 浏览器(或其他服务客户端)验证公网IP+公网端口号,浏览器顺利访问到PVE母鸡。

 

第五步:使用阿里云API实现DDNS。【注】听说dnspod也可以。

  • 前提:在阿里云(万网)买了域名,尽可能做过备案。不过不备案应该也ok,因为个人网络得到的公网IP,理应不可能从80端口提供服务。
  • 在阿里云的解析页面,先手动设置公网IP,等10分钟,用域名+公网端口号,验证域名生效;剩下的就是实现自动更新。
  • 根据阿里云文档,编写IP自动更新脚本思路(不想自行开发的,可以github撸现成;也可留言call我)。
    • 先去阿里云账户申请key和secret,作为API调用的身份凭据。【注】阿里云现在建议使用RAM账户,可以只给域名操作权限,不给ECS、RDS等其他产品操作权限,万一泄露,损失可控。
    • 使用curl或者python requests去ifconfig.me(有json格式)拿到新的公网IP #1。
    • 根据阿里云文档获取解析记录列表,传入一级域名,拿到所有二级域名(RR)的解析记录。遍历之,找到我们需要的RR,所对应的IP #2。
    • 判断#1和#2是否一致,一致则退出。不一致,根据阿里云文档修改解析记录,对相应RR进行修改,传入RR和新IP #1,将原来的IP替换掉,对API返回结果进行确认,完成退出。【注】实在不放心可以再一次获取解析列表,确认替换成功。
    • 等待大概6~10分钟,用浏览器确认新IP是否生效。【注】想要新的公网IP,可以通过重启光猫来得到。
    • 给requests和aliyunsdk加上try-except容错机制,比如timeout等。
    • 给脚本添加适当的log机制。
  • 将脚本注册到内网计算机的crontab上,频率建议10分钟一次。
  • 再次重启光猫验证,同时可与阿里云控制台解析日志对照。

 

第六步:enjoy your ddns,比如在外网靠域名播放内网file server存储的视频,访问私有云host/guest,远程备份电脑/手机等。

原创文章,转载请注明: 转载自渔人小径

本文链接地址: 基于阿里云API实现简单DDNS

文章的脚注信息由WordPress的wp-posturl插件自动生成

    分享到:

最近文章

分享

暂无评论

引用

  1. 论VT-d对虚拟化家用文件服务器之价值 | Fisherworks Photography (渔人小径) - […] 加上前篇所述基于阿里云API实现简单DDNS,无法更完美!!! […]

发表评论

电子邮件地址不会被公开。 必填项已用*标注