纯nginx+脚本搭建伪ddns服务

2020-03-22  本文已影响0人  leonhooo

需求

一直使用阿里云的域名修改API用作DDNS, 用于访问家用内网, 只是使用域名进行远程连接, 换IP之后域名刷新实在太慢, 心塞... 能否使用一个自己定制的服务端IP获取服务?

环境要求

外网固定IP服务器作为中间站点, 这是必须的, 任何DDNS都需要一个好的接头地点, 何况是"伪"的.

这里使用阿里云ubuntu一台. 已备案可访问域名一个(这里假设为ip.xxx.com).

设计

使用编程语言, 很轻松就可以搞定这个事情, 但需要安装运行环境(openjdk, .netcore ), 感觉太重了. 突发奇想, 是否可以使用nginx直接记录, 而客户端直接获取目标服务器IP.

服务端 → 定时访问中间站点(越短越好, 不然与阿里云修改域名有啥分别) → 记录该服务端IP

客户端 → 访问中间站点 → 获取服务端IP(即时)

实践

nginx在默认情况下, 只能记录日志, 所以我们把日志内容设置为纯IP, 记录这个日志(服务端IP)后, 截取最后一行日志作为最新服务端IP记录

直接上配置, 以下是中间站点相关设置

nginx


#记录IP的格式

log_format ip_log '$remote_addr';

server {

    listen 80;

    server_name ip.XXX.com;

    add_header Content-Type "application/json";



    location /write {

        #简单验证, 防止误刷, 修改token值后服务端调用时需对应

        if ($http_token = 123456) {

            access_log /var/log/remote/ip.log ip_log;

            return 200;

        }

        return 401;

    }



    location /read {

        default_type application/json;

        alias /var/log/remote/;

    }

}

添加crontab设置(定时生成内容脚本), 每一分钟截取最后一行日志作为最新服务端IP记录


*/1 * * * * root tail -n 1 /var/log/remote/ip.log > /var/log/remote/ip.json

以下是需要及时刷新IP记录的服务端配置(依旧以ubuntu主机为例)

添加crontab设置(定时发送请求脚本), 每一分钟访问一次中间站点


*/1 * * * * root curl -X POST -H "token:123456" http://ip.XXX.com/write  

这样就可以记录该服务端的IP了.

访问测试

在本地浏览器或CURL访问 http://ip.XXX.com/read/ip.json 就可以拿到目的服务器的IP了.

拿到了IP, 怎么做都可以了啊...

本文只是一种实现方式, 至于安全等问题, 可以再斟酌斟酌.

收工!

上一篇下一篇

猜你喜欢

热点阅读