美文网首页
纯nginx+脚本搭建伪ddns服务

纯nginx+脚本搭建伪ddns服务

作者: leonhooo | 来源:发表于2020-03-22 18:57 被阅读0次

    需求

    一直使用阿里云的域名修改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, 怎么做都可以了啊...

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

    收工!

    相关文章

      网友评论

          本文标题:纯nginx+脚本搭建伪ddns服务

          本文链接:https://www.haomeiwen.com/subject/lrwvyhtx.html