给ipv6插上翅膀(域名和DDNS)

现在大多数家庭宽带已支持公网ipv6, 但是是动态的, 而且不好记忆, 本文分享如何使用域名和实现动态域名解析DDNS

先分享个ipv6的使用方式:

假如你的ip是 fe80::f66d:2fff:feaa:28ff
如果想要浏览器访问, 和ipv4相比在ip首尾多了[] . 而且需要浏览器支持, 目前大多数浏览器已支持
输入: http://[fe80::f66d:2fff:feaa:28ff]:80

如果要smb访问, 和ipv4相比结尾多了".ipv6-literal.net" , 而且需要把所有的":"转换成"-"
输入: \\fe80--f66d-2fff-feaa-28ff.ipv6-literal.net\share

1. 域名的注册和使用

以阿里云为例, 先注册个阿里云账号, 然后花1大洋(新用户才有)购买个域名. 地址: https://wanwang.aliyun.com/domain/1yuan

选择域名

创建模板

勾选模板并购买

然后在这里就可以看到自己购买的域名了
https://dns.console.aliyun.com/#/dns/domainList
需要实名后才能正常使用,但是可以提前配置, 实名过程跳过

在这里可以看到自己未实名域名数量并点击数字进入实名
https://dc.console.aliyun.com/next/index#/overview

点击 "解析设置"进行域名的配置

添加记录

配置完以后等模板实名了就可以通过域名查找的自己配的ip了, 即可以通过域名访问自己的ip了

比如我配置了test

2. DDNS

有了域名后我们就可以很方便的通过域名访问我们的ipv6地址了, 但是存在一个问题, 我们的ip是动态的, 每次变化后需要手动去控制台修改配置, 这时DDNS就排上用场了.在本地循环获取设备ip, 当ip变化后通过代码修改配置
修改方式: https://api.aliyun.com/api-tools/sdk/Alidns?version=2015-01-09&language=java-tea

主要用到了3个接口:
查询: client.describeDomainRecords
更新: client.updateDomainRecord
添加: client.addDomainRecord

示例代码:
implementation "com.aliyun:alidns20150109:3.0.8"

package com.yzh.ddns;

import com.aliyun.alidns20150109.Client;
import com.aliyun.alidns20150109.models.*;
import com.aliyun.teaopenapi.models.Config;

/**
 * 作者:yzh
 * <p>
 * 创建时间:2023/11/15 00:08
 * <p>
 * 描述:
 * <p>
 * 修订历史:
 */
public class DDNSMain {
    public static void main(String[] args) throws Exception {
        System.out.println("=======================sssssssssssssssssssssssssstart=================");

        Config config = new Config();
        // 您的AccessKey ID
        config.accessKeyId = "***************";
        // 您的AccessKey Secret
        config.accessKeySecret = "***************";
        // 您的可用区ID
//        config.regionId = "cn-hangzhou";
        // Endpoint 请参考 https://api.aliyun.com/product/Alidns
        config.endpoint = "alidns.cn-hangzhou.aliyuncs.com";

        Client client = new Client(config);
        String domainName = "yzhtest.com";
        String RR = "www";
        String recordType = "AAAA";
        String newHostIP = "fe80::f66d:2fff:feaa:28ff";

        checkAndAdd(client, domainName, RR, recordType, newHostIP);
        System.out.println("=======================eeeeeeeeeeeeeeeeeeeeeeeeeeeend=================");
    }

    private static void checkAndAdd(Client client, String domainName, String RR, String recordType, String newHostIP) throws Exception {
        System.out.println("-------------checkAndAdd:");
        DescribeDomainRecordsRequest describeRequest = new DescribeDomainRecordsRequest();
        // 主域名
        describeRequest.domainName = domainName;
        // 主机记录
        describeRequest.RRKeyWord = RR;
        // 解析记录类型
        describeRequest.type = recordType;
        DescribeDomainRecordsResponse describeResponse = client.describeDomainRecords(describeRequest);

        if (describeResponse.statusCode != 200) {
            System.out.println("error describeResponse.statusCode: " + describeResponse.statusCode);
            return;
        }
        System.out.println("describeResponse.body.totalCount: " + describeResponse.body.totalCount);
        if (describeResponse.body.totalCount > 0) {
            for (DescribeDomainRecordsResponseBody.DescribeDomainRecordsResponseBodyDomainRecordsRecord record : describeResponse.body.domainRecords.record) {
                System.out.println("-------------change?-------------");
                System.out.println("record = recordId: " + record.recordId
                        + " status: " + record.status
                        + " locked: " + record.locked
                        + " weight: " + record.weight
                        + " line: " + record.line
                        + " remark: " + record.remark
                        + "\nRR: " + record.RR
                        + " domainName: " + record.domainName
                        + " type: " + record.type
                        + " value: " + record.value);
                System.out.println();
                if (!newHostIP.equals(record.value)) {
                    System.out.println("change newIp: " + newHostIP);
                    // 修改解析记录
                    UpdateDomainRecordRequest updateRequest = new UpdateDomainRecordRequest();
                    // 主机记录
                    updateRequest.RR = RR;
                    // 记录ID
                    updateRequest.recordId = record.recordId;
                    // 将主机记录值改为当前主机IP
                    updateRequest.value = newHostIP;
                    // 解析记录类型
                    updateRequest.type = recordType;
                    UpdateDomainRecordResponse updateResponse = client.updateDomainRecord(updateRequest);
                    System.out.println("updateResponse.statusCode: " + updateResponse.statusCode);
                }
            }
        } else {
            System.out.println("-------------add-------------");
            System.out.println("add newIp: " + newHostIP);
            AddDomainRecordRequest addRequest = new AddDomainRecordRequest();
            // 主域名
            addRequest.domainName = domainName;
            // 主机记录
            addRequest.RR = RR;
            // 将主机记录值改为当前主机IP
            addRequest.value = newHostIP;
            // 解析记录类型
            addRequest.type = recordType;
            AddDomainRecordResponse addResponse = client.addDomainRecord(addRequest);
            System.out.println("addResponse.statusCode: " + addResponse.statusCode);
        }
    }

}

AccessKey ID和AccessKey Secret获取方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值