需求
一直使用阿里云的域名修改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, 怎么做都可以了啊...
本文只是一种实现方式, 至于安全等问题, 可以再斟酌斟酌.
收工!
网友评论