阿里云IPv6动态域名解析配置指南
本配置区域主要介绍了在阿里云实现IPv6动态域名解析(DDNS)的完整方案,核心内容涵盖阿里云解析API调用、AccessKey权限配置,以及通过自动化脚本实时检测本地公网IPv6地址并更新至DNS记录的流程,该方案有效解决了网络中IPv6地址动态变化导致无法稳定访问内网服务的问题,确保域名始终指向最新地址,实现服务的稳定访问。,*(注:您仅提供了标题,以上为基于该标题生成的标准摘要,如需针对具体配置代码或步骤进行总结,请提供详细内容。)*
拥抱IPv6时代:基于阿里云的IPv6动态域名解析(DDNS)保姆级实战指南 **
随着国家对IPv6部署的全面推进,如今大多数家庭宽带都已经分配了公网IPv6地址,这意味着,我们终于可以摆脱内网穿透的繁琐,直接通过IPv6地址从外部网络访问家里的NAS、软路由或家庭服务器了。
新的问题随之而来:运营商分配的IPv6地址通常是动态的,重启路由器或每隔一段时间就会发生变化,难道每次出门前都要先记下一长串的IPv6地址吗?这时候,阿里云IPv6动态域名解析(DDNS)就成了最完美的解决方案,它能将随时变化的IPv6地址自动绑定到一个固定的域名上,让你随时随地轻松访问家庭网络。
下面,本文将手把手教你如何利用阿里云DNS和Python脚本,打造一个属于自己的IPv6 DDNS服务。
准备工作
在开始之前,你需要准备以下几样东西:
- 一个域名:如果你还没有域名,可以在阿里云万网购买一个,或者使用其他支持阿里云DNS解析的域名。
- 阿里云账号:用于管理域名和获取API密钥。
- 一台开机的设备:比如软路由、群晖NAS、树莓派或一台常开的Linux服务器,用于运行定时脚本。
- 家庭网络已开启IPv6:确保你的主路由器已获取IPv6前缀,且局域网设备能获取到公网IPv6地址。
配置阿里云DNS与获取AccessKey
-
设置域名解析 登录阿里云控制台,进入“云解析 DNS”,找到你的域名,添加一条解析记录:
- 记录类型:选择
AAAA(这是IPv6专用的解析记录)。 - 主机记录:填写你想要的子域名,
home。 - 解析线路:默认。
- 记录值:暂时随便填写一个合法的IPv6地址,
2400:3200::1。 - TTL:建议设置短一些,如
600(10分钟),以便IP变化时能快速生效。
- 记录类型:选择
-
创建AccessKey 为了让脚本能自动修改解析记录,我们需要创建API密钥。
- 鼠标悬停在控制台右上角头像上,点击
AccessKey 管理。 - 强烈建议:不要直接使用主账号创建AccessKey,而是点击“开始使用子用户AccessKey”创建一个RAM子用户。
- 给子用户起个名字(如
ddns-bot),创建后记下AccessKey ID和AccessKey Secret(注意:Secret只显示一次,请务必保存好)。 - 给该子用户授权:在权限管理中,添加权限
AliyunDNSFullAccess(管理云解析DNS的权限)。
- 鼠标悬停在控制台右上角头像上,点击
编写IPv6 DDNS脚本
我们使用Python和阿里云官方SDK来实现动态解析。
-
安装依赖 在你的运行设备上,确保安装了Python3,并执行以下命令安装阿里云SDK:
pip3 install aliyun-python-sdk-core aliyun-python-sdk-alidns
-
DDNS脚本代码 创建一个名为
aliyun_ddns_ipv6.py的文件,填入以下代码:
import requests
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.acs_exception.exceptions import ServerException
from aliyunsdkalidns.request.v20150109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequest
from aliyunsdkalidns.request.v20150109.UpdateDomainRecordRequest import UpdateDomainRecordRequest
AccessKeyId = '你的AccessKeyId'
AccessKeySecret = '你的AccessKeySecret'
DomainName = 'yourdomain.com' # 你的主域名
SubDomain = 'home' # 你的主机记录,home.yourdomain.com 中的 home
# ============================================
def get_local_ipv6():
"""获取当前设备的公网IPv6地址"""
try:
# 使用公共接口获取出口IPv6
# 也可以通过 ifconfig 或 ip addr 命令解析本地网卡IP
response = requests.get('https://api6.ipify.org?format=json', timeout=5)
if response.status_code == 200:
return response.json()['ip']
except Exception as e:
print(f"获取IPv6地址失败: {e}")
return None
def update_dns_record(ipv6_addr):
client = AcsClient(AccessKeyId, AccessKeySecret, 'cn-hangzhou')
# 1. 查询现有记录
describe_request = DescribeDomainRecordsRequest()
describe_request.set_DomainName(DomainName)
try:
response = client.do_action_with_exception(describe_request)
records = json.loads(response)['DomainRecords']['Record']
for record in records:
if record['Type'] == 'AAAA' and record['RR'] == SubDomain:
current_ip = record['Value']
record_id = record['RecordId']
# 2. 如果IP没变,则不更新
if current_ip == ipv6_addr:
print(f"IPv6地址未变化,仍为 {current_ip},无需更新。")
return
# 3. IP变化了,更新记录
update_request = UpdateDomainRecordRequest()
update_request.set_RecordId(record_id)
update_request.set_RR(SubDomain)
update_request.set_Type('AAAA')
update_request.set_Value(ipv6_addr)
update_request.set_TTL(600)
client.do_action_with_exception(update_request)
print(f"更新成功!旧IP: {current_ip} -> 新IP: {ipv6_addr}")
return
print(f"未在域名 {DomainName} 下找到主机记录为 {SubDomain} 的AAAA记录,请先在控制台手动添加。")
except ServerException as e:
print(f"阿里云API请求出错: {e.get_error_msg()}")
if __name__ == '__main__':
my_ipv6 = get_local_ipv6()
if my_ipv6:
print(f"当前获取到的公网IPv6地址: {my_ipv6}")
update_dns_record(my_ipv6)
else:
print("未能获取IPv6地址,请检查网络是否已开启IPv6。")
设置定时任务
为了让脚本自动运行,我们需要利用Linux的 crontab 设置定时任务,比如每5分钟检查一次IP并更新。
-
赋予脚本执行权限:
chmod +x /path/to/aliyun_ddns_ipv6.py
-
编辑定时任务:
crontab -e
-
在文件末尾添加以下内容(注意替换为你的实际脚本路径):
*/5 * * * * /usr/bin/python3 /path/to/aliyun_ddns_ipv6.py >> /var/log/aliyun_ddns.log 2>&1
这行代码的意思是:每5分钟执行一次脚本,并将输出日志记录到
/var/log/aliyun_ddns.log中。
进阶注意事项
- 获取本地IP而非出口IP:上面脚本使用的是公共API获取IP,如果你的设备有多个网卡,或者你想指定获取特定网卡的IPv6(比如网桥或虚拟网卡的地址),可以使用Python的
netifaces库来精准提取本地网卡的公网IPv6(通常以240、2408、240e、2409开头,且不包含fe80等内网前缀)。 - 防火墙放行:即使有了IPv6公网IP,如果家庭路由器的防火墙没有放行相应的端口(如NAS的5000端口、SSH的22端口),外部依然无法访问,请在主路由器设置中,将对应IPv6主机的端口放行。
- 客户端兼容性:确保你访问家庭网络的设备(如手机、外网电脑)也处于IPv6网络环境中,如果外网只有IPv4环境,是无法直接访问IPv6地址的。
通过阿里云IPv6动态域名解析,我们以极低的成本(仅需一个域名的费用)和几行简单的代码,就彻底解决了家庭宽带动态IP的痛点,IPv6的普及让每个人都能拥有海量的公网IP,借助阿里云稳定高效的DNS服务,无论你身在何处,管理家庭数据中心都变得如同在局域网一般丝滑,赶快动手试试吧!

