用阿里云域名远程连接 Mac
想在外面访问家里的 Mac,不必每次都查找和输入一长串 IPv6 地址。准备一个阿里云域名,用 ddns-go 自动更新解析,再开启 Mac 自带的屏幕共享,就可以通过固定的域名发起远程连接。
下面按照“购买域名 → 配置 AccessKey → 安装 ddns-go 并开启屏幕共享 → 检测连接 → Finder 访问”的顺序操作。教程中的 example.com 是示例根域名,mac.example.com 是用于远程连接的子域名,请替换成你自己的域名。
开始前需要准备什么
- 一台作为被控端的 Mac,保持开机、联网,并有可从外部访问的公网 IPv6 地址。
- 另一台作为控制端的 Mac。按本文的 IPv6 直连方式连接时,控制端也需要可用的 IPv6 网络。
- 一个阿里云账号,以及由阿里云 DNS 托管解析的域名。
这套方案不需要另外购买云服务器。阿里云负责域名和解析,ddns-go 运行在被控 Mac 上,屏幕共享负责远程桌面。
1
2
3
4
5
6
7
被控 Mac 的 IPv6 地址变化
↓
ddns-go 更新阿里云的 AAAA 解析记录
↓
控制端通过 mac.example.com 找到被控 Mac
↓
连接屏幕共享并完成账号认证
DDNS 只负责更新地址,不负责内网穿透或放行防火墙。长期使用远程桌面,建议通过 VPN 或 SSH 隧道接入;如果选择公网直连,应限制 TCP 5900 的访问来源,不要关闭防火墙或对全网长期开放。
下文配图展示操作入口和填写方式,敏感信息已遮挡。界面以 macOS 15.6.1、ddns-go 6.17.7 为例,不同版本的选项位置可能略有变化。
第一步 购买域名并确认解析位置
购买一个域名
登录阿里云,进入“域名与网站”,在“注册域名”中查询想要的名称。确认可注册后,选择注册年限和已实名的信息模板,核对订单并完成购买。除了首年价格,也要看清续费价格;已有域名可以跳过这一步。

图 1 查询想要注册的域名。
购买后进入“域名列表”,确认域名状态正常。

图 2 在域名列表中查看域名状态。
确认域名使用阿里云 DNS
打开“云解析 DNS → 公网权威解析”,找到准备使用的域名,进入解析设置。

图 3 从“公网权威解析”进入目标域名的解析设置。
域名在阿里云购买,不等于解析一定由阿里云管理。 如果域名的 DNS 服务器已经改到其他平台,需要在实际托管解析的平台配置 DDNS,或先完整迁移已有记录,再切换回阿里云 DNS。
建议专门使用一个子域名,例如 mac.example.com,不要改动网站、邮箱正在使用的解析记录。
第二步 创建专用 RAM 用户并获取 AccessKey
AccessKey ID 和 AccessKey Secret 是阿里云的接口访问凭证。ddns-go 使用它们更新 DNS 记录,并不是用它们登录 Mac。
创建 RAM 用户
进入“RAM 访问控制 → 身份管理 → 用户”,点击“创建用户”。可以将用户命名为 ddns-mac,专门用于这台 Mac 的动态解析。

图 4 RAM 用户创建入口。
按页面提供的方式配置程序访问。只做 DDNS 时,不需要额外开启控制台登录;如果创建页面提供“使用永久 AccessKey 访问”,可在这里配置,也可创建用户后进入“凭证管理”。

图 5 填写用户信息,选择需要的访问方式。
只授予需要的 DNS 权限
不要直接使用主账号密钥,也不要给 DDNS 用户授予整个云账号的管理权限。
在用户的“权限管理 → 新增授权”中,可以搜索 DNS 权限策略。AliyunDNSFullAccess 是管理云解析 DNS 的系统策略,范围较大;更合适的做法是创建只允许操作目标域名的自定义策略。

图 6 DNS 策略搜索入口。图中的系统策略不是单个域名的最小权限策略。
进入“权限策略 → 创建权限策略”,在 JSON 编辑方式中参考以下配置。它对应 ddns-go 6.17.7 使用的查询、新增和更新记录操作。将 example.com 换成自己的根域名,不是 mac.example.com。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"alidns:DescribeSubDomainRecords",
"alidns:AddDomainRecord",
"alidns:UpdateDomainRecord"
],
"Resource": "acs:alidns:*:*:domain/example.com"
}
]
}
创建策略后,回到 ddns-mac 用户的“权限管理 → 新增授权”,选择并绑定该策略。这个范围覆盖指定域名下的解析记录,并非只允许修改 mac 这一条;使用其他版本时,请结合实际调用和阿里云权限文档核对。
保存 AccessKey
进入该用户的“凭证管理 → AccessKey”。如果创建用户时已经生成了一对密钥,直接使用,不要重复创建;尚未生成时,再点击“创建 AccessKey”。

图 7 在专用 RAM 用户下管理 AccessKey。
保存好 AccessKey ID 和 AccessKey Secret。Secret 通常只在创建时展示,之后不能从列表中再次查看。稍后直接在本机 ddns-go 管理页填写它们,不要发给 AI,也不要放进公开截图、文章或 Git 仓库。
第三步 配置 ddns-go 和 Mac 屏幕共享
以下操作都在被控 Mac上完成。
下载 ddns-go
打开 ddns-go 官方仓库的 Releases,下载与 Mac 芯片匹配的安装包:
| Mac 类型 | 安装包标识 |
|---|---|
| Apple 芯片 | darwin_arm64 |
| Intel 芯片 | darwin_x86_64 |

图 8 选择对应芯片的 Mac 发行包,并核对官方校验值。
不确定架构时,在终端执行:
1
uname -m
如果电脑上已经有 ddns-go,先检查现有进程、配置和启动项,不要重复安装或覆盖:
1
2
command -v ddns-go
lsof -nP -iTCP:9876 -sTCP:LISTEN
安装为开机启动服务
首次安装时,先解压经过校验的发行包。在包含 ddns-go 文件的目录打开终端,将程序安装到固定位置,并为配置创建受保护的目录:
1
2
3
sudo install -d -m 0755 /usr/local/lib/ddns-go
sudo install -m 0755 ./ddns-go /usr/local/lib/ddns-go/ddns-go
sudo install -d -m 0700 /usr/local/etc/ddns-go
然后安装服务:
1
2
3
sudo /usr/local/lib/ddns-go/ddns-go -s install \
-l 127.0.0.1:9876 \
-c /usr/local/etc/ddns-go/config.yaml
这些参数分别表示:
-s install:安装后台服务。-l 127.0.0.1:9876:管理页面只监听本机,不对外提供访问。-c:指定配置文件位置。配置包含密钥,不要放在共享目录中。
以上方式对应系统级启动服务。用户级 LaunchAgent 只在登录后运行,不能和“系统启动后运行”混为一谈。安装后应重启检查;开启 FileVault 的 Mac,冷启动还可能需要先解锁磁盘。
填写阿里云和 IPv6 配置
在被控 Mac 浏览器打开:
1
http://127.0.0.1:9876
设置管理用户名与强密码,选择 DNS 服务商“阿里云”,再填写专用 RAM 用户的 AccessKey ID 和 AccessKey Secret。

图 9 选择阿里云并填写凭证。截图里的 TTL 是已有设置,请按自己的 DNS 套餐选择。
按下面的说明配置解析:
| 配置项 | 填写方式 |
|---|---|
| IPv4 | 本文只使用 IPv6,可不启用 |
| IPv6 | 启用 |
| 获取 IP 方式 | 选择实际联网的网卡,或通过接口查询;核对结果确实属于被控 Mac |
| IPv6 Domains | 填完整域名,例如 mac.example.com |
| TTL | 使用阿里云 DNS 套餐支持的值,以云端实际记录为准 |
不要选择 fe80:: 开头的链路本地地址或以 fd 开头的唯一本地地址。使用代理或 VPN 时,也要检查查询到的是否是出口地址,而不是被控 Mac 的可达地址。

图 10 启用 IPv6,并填写完整的远程访问域名。
管理页面保持本机访问,并启用“禁止公网访问”作为额外保护。Webhook 不是远程连接的必填项,不需要通知时可以留空。

图 11 管理访问设置入口。截图中的“禁止公网访问”尚未勾选;Webhook 地址若带令牌,不应公开。
保存配置,打开“日志”,查看是否成功更新解析。如果某个查 IP 接口报错,检查后续接口是否仍能获取正确地址;如果出现授权错误,先核对 AccessKey、策略和目标域名,不要直接扩大到全云权限。

图 12 日志可用于排查接口访问和解析更新问题,图中包含接口异常示例。
确认 AAAA 记录正确
回到“云解析 DNS → 公网权威解析 → 目标域名”,核对记录:
| 字段 | 应有内容 |
|---|---|
| 主机记录 | mac |
| 记录类型 | AAAA |
| 记录值 | 被控 Mac 实际可达的 IPv6 地址 |
| TTL | 套餐支持的值 |
如果 ddns-go 已自动创建记录,就不必再手动添加。需要手动填写时,可以参考下面的表单。DNS 记录值只填 IP,不填 vnc://,也不加 :5900。

图 13 AAAA 记录填写示例。2001:db8::1234 是文档示例地址,不能用于真实连接。

图 14 检查云端记录。截图使用的是另一主机记录名,按本文操作时应核对自己的 mac 记录。
开启屏幕共享
打开“系统设置 → 通用 → 共享”,开启“屏幕共享”,点击右侧详情按钮,设置允许访问的用户。建议选择“仅这些用户”,不要默认允许所有人。

图 15 屏幕共享入口。其他共享项目不需要跟着截图开启。
两端都是 Mac 时,使用被控 Mac 上被允许访问的账号登录即可,不必额外启用通用 VNC 密码。然后检查屏幕共享端口:
1
sudo lsof -nP -iTCP:5900 -sTCP:LISTEN
公网直连还需要 Mac 防火墙、路由器的 IPv6 入站规则和运营商网络允许连接。只为被控 Mac 的 TCP 5900 放行必要的可信来源,不要开放 ddns-go 的 9876 管理端口,也不要关闭整个防火墙。
第四步 检测域名和远程桌面端口
配置完成后,先确认域名解析,再检查网络和端口。Ping 通不等于远程桌面可以连接。
检查域名解析
在控制端 Mac 打开终端,将示例域名替换后执行:
1
dig +short AAAA mac.example.com
返回的 IPv6 地址应与被控 Mac 当前使用的地址一致。如果不同,先检查 ddns-go 日志、权威 DNS 和缓存,不要急着排查 VNC。
使用 ITDOG 测试 IPv6
打开 ITDOG 的 IPv6 Ping 页面,填写自己的域名。也可以替换下面地址中的示例域名后访问:
1
https://www.itdog.cn/ping_ipv6/mac.example.com

图 16 输入域名后运行单次 IPv6 Ping 测试。配图为输入示例。
ITDOG 会获得待测域名及解析地址,只测试自己拥有或获授权的目标。不愿向第三方提交地址时,可用自己的外部设备测试。
单独检查 TCP 5900
在 ITDOG 的 IPv6 TCPing 页面明确输入:
1
mac.example.com:5900

图 17 指定 :5900。不填写端口时,该页面默认测试 80。
也可以直接在控制端 Mac 测试:
1
2
3
4
5
# 检查 IPv6 Ping
ping6 -c 4 mac.example.com
# 检查 TCP 5900,-G 5 表示 macOS 下连接超时为 5 秒
nc -6 -vz -G 5 mac.example.com 5900
如果防火墙只允许你的控制端,ITDOG 节点连接失败可能是正常的。此时从允许访问的控制端测试即可,不要为了让检测结果全绿而对全网开放端口。通过 VPN 或 SSH 隧道接入时,也不要求公网 5900 可达。
第五步 使用 Finder 连接 Mac
在控制端 Mac 打开 Finder,选择“前往 → 连接服务器…”,或按快捷键 Command + K。
输入自己的域名和端口:
1
vnc://mac.example.com:5900

图 18 Finder“连接服务器”中的地址填写示例。
点击“连接”,在屏幕共享的认证窗口中输入被控 Mac 上允许访问的账户。这里使用的不是阿里云密码,也不是 AccessKey。认证成功后,即可查看和操作目标桌面。
如果采用 VPN,使用 VPN 内可达的地址;采用 SSH 端口转发时,使用本地转发端口。vnc:// 本身不是加密保证,使用第三方 VNC 客户端时尤其要确认传输保护方式。
连接不上时先检查什么
| 现象 | 优先检查 |
|---|---|
| 查不到 AAAA 记录 | 域名是否由阿里云 DNS 托管,ddns-go 是否成功更新 |
| 解析地址不正确 | IP 获取方式是否选错,是否取得了代理或 VPN 出口地址,DNS 是否仍有缓存 |
| IPv6 Ping 不通 | 两端 IPv6 路径、路由器规则及运营商限制;也可能只是 ICMP 被限制 |
| Ping 通但 5900 不通 | 屏幕共享是否开启,服务是否监听,Mac 和路由器是否允许 TCP 5900 |
| 5900 能连接但登录失败 | 是否使用被控 Mac 的账号,该用户是否被允许共享屏幕 |
| 合盖或重启后连接失败 | Mac 是否睡眠或断网,ddns-go 是否启动,FileVault 是否等待解锁 |
最后用另一条已授权的外部网络完整测试一次:核对域名地址、连接屏幕共享、完成认证,并尝试操作桌面。重启被控 Mac 后再检查一次,才能确认日常使用时不需要手动启动 ddns-go。