对于个人研发者来说购买高性能的阿里云等服务器价格偏高,实际利用率也不高,所以最近一直在研究intel nuc。功耗低省电,还能客串家用客厅系统,一举多得。
但是问题来了,我的域名是在万网(被阿里云收购了)购买,家里宽带是联通光线无固定ip。
如何实现动态解析就成了首要问题,本来打算通过dnspod或花生壳这种东西做中转凑副一下,
但这不是我的性格,偶然得知阿里云开通了云解析API并提供了SDK环境,所以说干就干,根据联通宽带的路由方式自己写DDNS算法。
硬件配置如下:
1,联通的光纤虽然是动态分配ip,但是是独享公网ip。这点很重要,有线电视宽带不是独享公网ip,所以本方法不适用。
2,tp-link路由器
3,intel nuc通过路由实现器上网
DDNS程序大体思想如下:
1,轮询当前路由器公网ip是否变更
2,如变更则更新阿域名绑定的 ip 地址
3,如无变更则不做任何操作
4,进入路由器管理页面,选择端口映射,将需要的端口映射到指定ip的指定端口。
具体操作如下:
1.首先你得有个阿里云的域名
2.到阿里云管理控制台申请Access Key
3.下载java sdk,SDK 主要帮我们封装好了一些数据格式转换和对接的方法,能够方便我们快速接入,当然如果你足够牛逼的话,你也完全可以全部自己写。
4.进行接入操作。我的主要思路是运行该程序的时候先去阿里云获取域名绑定的 ip 地址,再跟
当前路由器公网 ip 地址做对比,如果 ip 相同则说明没改变,不需要操作。如果 ip 不同则修改域名绑定的 ip 地址。
5.服务器部署。通过windows的计划任务,每隔一分钟执行一次DDNS程序,修正域名绑定的 ip 地址。
6.进入路由器管理页面,选择端口映射,将需要的端口映射到指定ip的指定端口。
注意:
1.阿里云通过 RecordId 来区分每条域名解析记录,但是他们之前文档上对于这个参数的描述只写了“解析记录的 ID ”,没有写如何获取这条解析记录 ID ,我去我的阿里云控制台上找了好久都没找到,到后来我突然想到 sdk 上有获取域名信息的 api ,我试着用这个果然返回的信息里有这个字段。
下面上代码:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.URL; import java.net.URLConnection; import java.util.Date; import java.util.List; import com.aliyun.api.AliyunClient; import com.aliyun.api.AliyunConstants; import com.aliyun.api.DefaultAliyunClient; import com.aliyun.api.dns.dns20150109.request.DescribeSubDomainRecordsRequest; import com.aliyun.api.dns.dns20150109.request.UpdateDomainRecordRequest; import com.aliyun.api.dns.dns20150109.response.DescribeSubDomainRecordsResponse; import com.aliyun.api.dns.dns20150109.response.UpdateDomainRecordResponse; import com.aliyun.api.domain.Record; public class DemoListDomains { private static AliyunClient client; static { String serverUrl = "http://dns.aliyuncs.com/"; String accessKeyId = ""; String accessKeySecret = ""; client = new DefaultAliyunClient(serverUrl, accessKeyId, accessKeySecret, AliyunConstants.FORMAT_JSON); } public static void main(String[] args) { try { // 获取域名信息 DescribeSubDomainRecordsRequest ddi_req = new DescribeSubDomainRecordsRequest(); ddi_req.setTimestamp(new Date().getTime()); DescribeSubDomainRecordsResponse ddi_resp = new DescribeSubDomainRecordsResponse(); ddi_req.setSubDomain("www.xxxxx.com"); ddi_resp = client.execute(ddi_req); List<Record> list = ddi_resp.getDomainRecords(); for (Record record : list) { String ip = getMyIPOutter();// 获得本机公网IP if (!ip.equals(record.getValue())) { // 根据传入参数修改解析记录 UpdateDomainRecordRequest udr_req = new UpdateDomainRecordRequest(); udr_req.setTimestamp(new Date().getTime()); udr_req.setRecordId(record.getRecordId()); udr_req.setrR(record.getrR()); udr_req.setValue(ip); udr_req.setType(record.getType()); udr_req.settTL(record.gettTL()); udr_req.setPriority(record.getPriority()); udr_req.setLine(record.getLine()); UpdateDomainRecordResponse udr_resp = new UpdateDomainRecordResponse(); udr_resp = client.execute(udr_req); if (udr_resp.getErrorCode() == null) { System.out.println("success"); } else { System.out.println("error"); } } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); System.out.println("error"); } } private static String getMyIPOutter() throws IOException { InputStream ins = null; try { URL url = new URL("http://1212.ip138.com/ic.asp"); URLConnection con = url.openConnection(); ins = con.getInputStream(); InputStreamReader isReader = new InputStreamReader(ins, "GB2312"); BufferedReader bReader = new BufferedReader(isReader); StringBuffer webContent = new StringBuffer(); String str = null; while ((str = bReader.readLine()) != null) { if (str.contains("您的IP是:[")) { webContent.append(str); break; } } int start = webContent.indexOf("[") + 1; int end = webContent.indexOf("]"); return webContent.substring(start, end); } finally { if (ins != null) { ins.close(); } } } @SuppressWarnings("unused") private static String getMyIPLocal() throws IOException { InetAddress ia = InetAddress.getLocalHost(); return ia.getHostAddress(); } }
相关推荐
标题“利用阿里云的API实现动态域名解析”表明我们将探讨如何通过阿里云的API接口动态更新DNS记录,确保即使IP地址改变,用户也能通过同一个域名访问我们的服务。 描述中提到“不使用花生壳”,花生壳是一款常见的...
借助阿里云解析的API实现DDNS
借助阿里云解析的API实现DDNS_aliyun-ddns
公网IP动态绑定阿里云云解析DNS服务。这里的域名是在阿里云购买。用java代码实现了UPDATE,这里是java源代码。‘增删改查’记录,‘改查’实现了目前增有得完善代码,删没删除需求就没添加删的代码。源代码,需要在...
基于阿里云解析服务API的DDNS客户端。将本机IP更新至指-aliyun-ddns-client-csharp
### 利用Python+阿里云实现DDNS动态域名解析的方法 #### 一、引言 在互联网技术领域,DNS(Domain Name System)是基础服务之一,它负责将易记的域名转换成计算机易于处理的IP地址。随着互联网的发展,用户对于...
利用阿里云解析的_API_实现动态域名解析的功能_aliyun-ddns
阿里云和Cloudflare的DDNS服务是动态域名解析(DDNS)在云环境中的应用,它们使得具有动态IP地址的设备能够通过固定域名进行访问。DDNS的主要作用是解决因ISP(Internet Service Provider)分配的IP地址变化而导致的...
阿里云动态域名解析(DDNS)工具是一款专为解决家庭或办公室内设备对外提供服务时,因公网IP地址动态变化而无法稳定访问的问题而设计的软件。通过此工具,用户可以将家中的电脑或服务器与阿里云域名进行绑定,即使...
基于阿里云解析服务API的DDNS客户端。将本机IP更新至指定域名的DNS_A记录,配合定时任务可以_aliyun-ddns-client-csharp
C#,阿里云 DDNS API,动态修改IPV4,IPV6地址,上传到阿里云DNS服务器,解析。主要是IPV6地址,动态更新到DNS服务器后,可以直接解析并连接到IPV6电脑。方便远程桌面连接,网页,数据服务器使用。
阿里云DDNS实现是一种利用阿里云提供的服务来实现实时更新域名解析记录的方法,尤其适用于拥有动态公网IP的用户。DDNS(Dynamic Domain Name System)是动态域名解析系统,它能够将用户的动态IP地址与固定域名绑定,...
该源码主要是通过java StringBoot 项目编写的一个动态修改DDNS的工具类,每隔15秒回去网上... keyword: api #解析-主机记录 accessKeyId: L111r11111111111HyR11WZ accessKeySecret: 1111111111111dy1v1g11111M11Vah
综上所述,阿里云DDNS Windows版本软件是一个实用的工具,对于需要稳定域名解析服务的家庭用户和小企业而言,它可以简化IPv4和IPv6地址管理,提高网络服务的可达性和可靠性。通过合理的配置和使用,用户可以享受到...