【PowerShell模组开发日志】Windows DDNS, 将本机IPv6推送到阿里云DNS
本文是PowerShell模组 PSComputerManagementZp 的使用案例分享。记录了借助 aliyun-cli 工具在Windows上配置DDNS,将本机IPv6推送到阿里云解析的过程。
基本概念与动机
DNS(Domain Name System): DNS 是域名系统的缩写,它是一种用于将易于记忆的域名(比如 www.example.com)映射到计算机网络中的 IP 地址的系统。DNS 提供了一种分布式数据库,允许将域名转换为与之相关联的 IP 地址。通过使用域名而不是直接使用 IP 地址,用户可以更轻松地访问互联网上的资源。
DDNS(Dynamic Domain Name System): DDNS 是动态域名系统的缩写。与传统的静态 DNS 不同,DDNS 允许动态地更新域名与 IP 地址之间的映射。这对于拥有动态 IP 地址的设备非常有用,例如家庭网络中的路由器。DDNS 允许设备在其 IP 地址更改时自动更新与其关联的域名,确保用户可以始终通过域名访问设备而不受 IP 地址变化的影响。
在某些情况下,用户可能需要将本机的公网IP地址推送到域名解析服务商,以实现某些目的。有很多优秀的开源DDNS工具或服务,例如
但是大多依赖于高级的程序语言和对应的运行环境,如python,go等,不够轻量化。当然,也得益于此于此,这些工具可以支持更加灵活且多样性的功能。而本人的日常工作条件,有
将本地IPv6推送到阿里云DNS
需求,且使用的是 Windows
主机。希望有一个更加轻量化,更加直接的方法,对本地IPv6进行DDNS,且只需要推送到阿里云。因此,有了本文的方法与实践案例。
准备工作
本节简述如何配置工具与环境
将PowerShell更新到7.0以上
可以直接从Release of PowerShell · PowerShell/PowerShell (github.com) 下载安装,或者使用 winget-cli:
1 | winget search powershell |
安装 aliyun-cli
1 | winget search aliyun-cli |
配置 aliyun-cli
参考 aliyun/aliyun-cli: Alibaba Cloud CLI (github.com)
建议首先建立RAM用户,并获取对应DNS资源的权限的AccessKey ID
和 AccessKey Secret
。然后通过命令行依次进行配置即可。
1 | aliyun configure |
安全性警告:上述配置会在 ${Home}/.aliyun/config.json
中明文保存密钥,且暂时没有找到官方支持的安全保存方法。因此,切勿在非安全环境下使用。
安装PowerShell模组PSComputerManagementZp
参考 PowerShell Gallery | PSComputerManagementZp 0.1.0:
1 | Install-Module -Name PSComputerManagementZp -Force |
配置DDNS
以管理员权限运行PowerShell,再下面的流程中不要退出该shell窗口。
确保 aliyun-cli 在PowerShell中可用。
1
aliyun --help
确保 PSComputerManagementZp 版本不低于0.0.5
1
(Get-Module -Name PSComputerManagementZp).Version -ge [System.Version]::new("0.0.5")
查看本机IPv6信息。不同的网络提供商,会有不同的IPv6信息。这些信息将用于后面的正则匹配,以便于工具可以正确地实时获取我们需要推送的IPv6地址
1
2
3
4
5
6
7ipconfig
# 以太网适配器 以太网:
# 连接特定的 DNS 后缀 . . . . . . . :
# IPv6 地址 . . . . . . . . . . . . : <ipv6_1>
# IPv6 地址 . . . . . . . . . . . . : <ipv6_2>
# 临时 IPv6 地址. . . . . . . . . . : <ipv6_3>
# 本地链接 IPv6 地址. . . . . . . . : <ipv6_0>以公网IPv6为
240e:
开头,在本机的适配器名称为以太网适配器 以太网
为例,且假设推送到域名为xxx.xxx
的域名解析,主机记录为abc
,那么,可以有如下的命令:1
2
3
4
5
6
7
8
9
10$commands = {
Import-Module PSComputerManagementZp -Scope Local -Force
$ipv6 = (Get-TemporaryIPV6ByPattern -AdapterPattern '以太网' -AdressPattern '^240e:')
Add-OrUpdateDnsDomainRecord4Aliyun -DomainName 'xxx.xxx' -RecordName 'abc' -RecordType AAAA -RecordValue $ipv6
Remove-Module PSComputerManagementZp
}
Register-PwshCommandsAsRepetedSchedulerTask -TaskName 'DDNS' -TaskPath 'PSComputerManagementZp' -LogonType S4U -Commands $commands -RepetitionInterval (New-TimeSpan -Minutes 5) -AtLogon -AtStartup
Stop-ScheduledTask -TaskName "PSComputerManagementZp\DDNS"
Start-ScheduledTask -TaskName "PSComputerManagementZp\DDNS"其中,
$commands
将安装模组、获取对应pattern的IPv6、添加或者更新主机记录、移除模组这四个主要流程进行了打包。用户在自己的环境中使用时,根据上文描述进行修改即可。最终,abc.xxx.xxx
将被解析为本机的IPv6地址。PSComputerManagementZp
模组提供的Get-TemporaryIPV6ByPattern
函数会检测所有符合筛选条件的本机IPv6地址,形成列表,并优先给出最后一条记录。也就是说,一般情况下,优先给出临时IPv6。至于这个特性是否降低了风险,用户可以自己定夺。本文不作评价然后,将
$commands
打包的命令继续借助PSComputerManagementZp
模组提供的Register-PwshCommandsAsRepetedSchedulerTask
函数注册进了Windows任务计划程序库,触发条件为开机或者用户登录后,每隔五分钟,以最高权限运行。因此,实现了DDNS。
打开Windows计划程序检查配置是否完成。具体位置为
计算机管理->系统工具->任务计划程序->任务计划程序库->PSComputerManagementZp->DDNS
:
总结与讨论
本文是PowerShell模组 PSComputerManagementZp 的使用案例分享。记录了借助 aliyun-cli 工具在Windows上配置DDNS,将本机IPv6推送到阿里云解析的过程。本文的方法利弊分明
- 缺点:通用性差。
- 只适用于Windows平台
- 需要PowerShell更新到7.0以上
- 需要安装aliyun-cli
- 只适用于本机IPv6
- 优点:轻量,只需要
- 更新 PowerShell
- 安装 aliyun-cli
- 安装 PSComputerManagementZp模组
- 借助winget, 可以完全在命令行完成操作。
因此,本文的案例,对于刚好符合本文优点条件的用户,十分推荐使用;对于有自己独特需求的用户,除了移步别处,也十分欢迎来此处提出需求。作者本人会考虑是否进行模组上的支持与适配。