当前位置:首页 > 技术文章 > 正文内容

github 项目:动态域名解析aliyun-ddns

arlanguage4个月前 (12-30)技术文章46

https://github.com/yyqian/aliyun-ddns

利用阿里云解析的 API 实现动态域名解析的功能(类似花生壳,例如定时地将自己的域名解析更新为家中当前的 IP 地址)。

没有 npm 依赖, 只用了三个原生 Node.js 的模块: http, crypto, url

目前该工具分为两种模式的版本:

  • client-mode,这种模式下只需要在客户端定时执行一个 Node.js 程序,当前地址的公网 IP 是借助访问公共的 API 来获取的
  • server-mode,这种模式需要在服务端部署一个 Node.js 程序,并且在客户端定时请求服务端以使得服务端获知当前客户端所在地址的公网 IP
  • client-mode 推荐使用该模式,部署更为简单,无需云服务器资源,但要求客户端有 Node.js 的执行环境。

    server-mode 适合一些客户端无法安装 Node.js 环境的场景(例如路由器)

    使用前提

  • 域名是由阿里云/万网托管的
  • 如果要将 IP 设置为客户端所在的公网 IP, 要确保客户端被当地 ISP 分配的不是大内网的 IP(如果是大内网的 IP, 可以给客服打电话要求更换)
  • Client Mode

    使用场景

  • 在本地(例如家里的 NAS、树莓派等)定时执行客户端,通过公共 API 获取当前网络环境的公网 IP,然后更新 aliyun 中的 DNS 记录
  • 客户端部署(crontab 定时调用)

    1. 复制 client-mode/config-sample.json 并命名为 client-mode/config.json
    2. 修改 client-mode/config.json 中的内容, 参数说明见下面
    3. 参照 client-mode/client.sh 写个 shell script
    4. 让脚本可运行: chmod 775 client-mode/client.sh
    5. 编辑 crontab: crontab -e
    6. 添加记录, 让脚本 5 分钟调用一次: */5 * * * * /path/to/client-mode/client.sh
    7. 重启 cron 服务

    client-mode/config.json 参数说明

  • AccessKeyId 和 AccessKeySecret 在阿里云的控制台获取, 注意保密
  • hostnames 是待更新的多个 DNS (子)域名

  • Server Mode

    使用场景

  • 部署本服务在阿里云、AWS 等公有云上
  • 在本地(例如家里的 NAS、路由器、树莓派等)设定定时任务:访问服务端,以更新当前本地的 IP 地址
  • 服务器端程序部署

    1. 复制 server-mode/config-sample.json 并命名为 server-mode/config.json
    2. 修改 server-mode/config.json 中的内容, 参数说明见下面
    3. 用 pm2 或其他方式启动 server-mode/app.js;如果运行环境有 Docker,也可以直接 docker-compose up 来启动服务
    4. 进行必要的网路配置(譬如 Nginx 反向代理, 防火墙等), 确保应用服务能在公网中被访问到

    config.json 参数说明

  • AccessKeyId 和 AccessKeySecret 在阿里云的控制台获取, 注意保密
  • clientIpHeader 属性和反向代理有关(例如在 Nginx 后面), 用于从 header 中获取客户端的 IP,如果无反响代理,可以不填
  • path 是自定义的访问路径, 默认为 /hack
  • port 是自定义的服务器端监听的端口
  • 客户端手动调用

    调用的原理和花生壳类似, 假设在 config.json 中 path 属性是默认的 /hack, 有两种调用方法:

    1. 在客户端调用 /hack?hostname=foo.bar.com 来设定 foo.bar.com 解析为当前客户端的公网 IP
    2. 在客户端调用 /hack?hostname=foo.bar.com&ip=xxx.xxx.xxx.xxx 来设定 foo.bar.com 解析为 xxx.xxx.xxx.xxx

    客户端 crontab 定时调用

    1. 参照 server-mode/client.sh 写个 shell script
    2. 让脚本可运行: chmod 775 server-mode/client.sh
    3. 编辑 crontab: crontab -e
    4. 添加记录, 让脚本 5 分钟调用一次: */5 * * * * /path/to/server-mode/client.sh
    5. 重启 cron 服务

    安全事项

    由于在 server-mode 中,服务端暴露的 API 未加任何身份验证措施,相当于是把阿里云解析的修改、添加 API 暴露在了外界,所以一定要注意入口地址的隐藏。

    扫描二维码推送至手机访问。

    版权声明:本文由AR编程网发布,如需转载请注明出处。

    本文链接:http://www.arlanguage.com/post/580.html

    分享给朋友:

    “github 项目:动态域名解析aliyun-ddns” 的相关文章

    nginx多站点的配置

    一、多站点配置的引入文件/etc/nginx/nginx.conf 中引入文件夹/etc/nginx/conf.d中的站点配置文件。引入的代码为:include /etc/nginx/conf.d/*.conf;二、nginx的配置文件1、查看nginx进程systemctl status ngin...

    Nginx Lua编程基础

    Lua是一门脚本动态语言,并不太适合做复杂业务逻辑的程序开发,但是,在高并发场景下,Nginx Lua编程是解决性能问题的利器。Nginx Lua编程主要的应用场景如下:API网关:实现数据校验前置、请求过滤、API请求聚合、AB测试、灰度发布、降级、监控等功能,著名的开源网关Kong就是基于Ngi...

    nginx+spring boot 微服务实现负载均衡

    环境准备项目 JDK1.8 以上版本准备好 nginx 环境nginx 配置nginx 的配置文件在/usr/local/nginx/conf 目录下,配置文件 nginx.conf配置信息如下:upstream web_app { server 192.168.226.150:8089 ma...

    学习Java需要掌握哪些技能?

    想要找到Java工程师的工作,必须具备Java岗位要求的相关技能,应该有夯实的Java基础知识,熟练掌握、JavaSE开发、JavaWEB与数据库高级编程、企业级框架、大型企业级项目实战等相关的开发技能。01 Java基础知识Java入门、变量,基本表达式、流程分支、单层循环、双层循环、数组入门等。...

    Nginx 转发时的一个坑,运维居然让我背锅

    最近遇到一个 Nginx 转发的坑,一个请求转发到 Tomcat 时发现有几个 http header 始终获取不到,导致线上出现 bug,运维说不是他的问题,这个锅我背了。新增的几个 header 是这样的:accept_signaccept_token…反复检查代码,确定这些 header 是传...

    linux和nginx,https配置实战精辟总结

    文章目录前言1.linux服务器常用安装:1.1通过yum安装rz和sz命令:1.2 yum安装docker:2. nginx安装:2.1 nginx配置文件:2.2 服务配置https文件:2.3 总结3.结尾:前言现在我们如果自己想弄点东西,需要买自己的云服务器、域名,整一个https的域名进行...