我在工作时有一台 Mac,位于防火墙后面,其 IP 地址和主机名通过 DHCP 分配。
如果我有主机名和/或 IP 地址,我可以使用 ssh 或 vnc 客户端访问机器(如果我激活了工作场所 vpn)。这很好用;不需要打开其他端口。
但是,由于 DHCP 租约,这些可能至少偶尔会发生变化。有没有什么方法可以跟踪它们?
该计算机连接到各种云服务,但似乎都不知道正确的 IP 地址。(并且不清楚他们是否有通过 vpn 穿过防火墙的正确地址)。
- iCloud 不会在任何明显的地方报告 IP 地址。Dropbox 的情况类似。
- 我以为 Edovia屏幕连接客户端可能会有所帮助,但它似乎没有相关信息。
- Backblaze报告与计算机关联的 IP 地址,但它似乎不正确(可能是因为防火墙?)。
我也考虑过 ddns 提供商,但我不确定是否希望在我的设备上运行所需的客户端软件。macOS 通过“RFC 3007”支持安全远程 ddns,但我不确定是否有任何(免费?)ddns 提供商提供此功能。
我目前的想法(尚未实现)是:
- 创建一个脚本,将输出写入文件
host $(hostname)
。(注:是通过 vpn 进行远程连接的正确地址。 - 将该文件放在通过 iCloud Drive 共享的位置
- 通过 定期运行脚本
launchd
。
这应该可行,但仍然需要手动监控该文本文件。
还有其他更好的想法吗?
答案1
首先我要说的是,我不是 macOS 专家,但这并不是真正依赖于平台的,所以我会回答。
大多数 DDNS 提供商都提供 API,允许使用单个 HTTP 请求更改 DNS 指针。您可以编写一个非常简单的 shell 脚本,该脚本要么使用 hostname 命令(假设它实际上是由 DHCP 服务器分配的并且是准确的 - 但不能保证),要么使用 ifconfig 命令获取 IP 地址(使用 grep、cut、sed、awk 等解析输出),然后使用 wget 或 curl 直接修改 DDNS 记录(如果需要),而无需通过任何云驱动器。
使用任务调度程序(在 macOS 中,我认为是 launchd)每隔几分钟启动一次该脚本。您的脚本可以记录它找到的最后一个 IP 地址,并且仅在 IP 地址发生变化时才发送更新请求,这样您就可以避免更新请求垃圾邮件。
答案2
然而,由于 DHCP 租约,这些至少偶尔会发生变化。
DHCP 客户端会续订租约。在 DHCP 服务器正常运行的情况下,租约可能仅在设备断开连接的时间足够长以致旧租约到期(或操作员手动删除租约)时才会更改。因此,如果您的办公室网络发布 7 天甚至 1 天的租约,并且您的计算机全天候开机,那么它应该能够连续数年续订相同的租约而不会发生变化。
我也考虑过 ddns 提供商,但我不确定是否想在我的设备上运行所需的客户端软件。
在大多数情况下,“所需的客户端软件”可以用一些相当通用的软件来替代——ddclient
支持几种流行的协议,但大多数动态 DNS 服务使用基于 HTTP 的基本 API,可以用 2-3 行 Python 或 Bash 来实现。
但请注意,您不需要使用“动态的DNS”提供商——您可以使用任何提供任何形式 API 的 DNS 托管服务。例如,如果您拥有一个域并将其 DNS 数据托管在 Digital Ocean 上,则可以使用 DO API 让计算机更新其自己的 DNS 条目。(只需将 TTL 设置为较短的值...)
macOS 通过“RFC 3007”支持安全远程 ddns,但我不确定是否有任何(免费?)ddns 提供商提供此功能。
这似乎是 RFC 2136 中描述的“UPDATE”DNS 操作与 TSIG 和/或 SIG(0) 身份验证的集合——以前有提供商支持此功能,但更常见的是使用RFC 2136
和/或TSIG
关键字来命名该功能。DynDNS 在停止提供免费服务之前曾经提供过此功能。
如果您拥有一个域名,您可以使用 BIND 或 Knot 设置支持 RFC 2136 的 DNS 服务器。
答案3
您的建议的原则是正确的:您的笔记本电脑通常是获取有关 DHCP 信息的唯一地方。因此让它共享此信息是有意义的。
您的笔记本电脑的 IP 可能是私有的(参见 RFC1918,3. 私有地址空间192.168.X.X
),以或开头172.16-31.X.X
。此类 IP 无法在您的本地网络之外访问,包括 vpn。互联网通过您的防火墙访问,并使用转换或伪装,更改用于访问外部服务的 IP。这解释了为什么此类服务不会为您提供正确的信息。
一些评论:
- DHCP 服务器可以配置为始终提供相同的 IP(永久租约)。在这种情况下,您无需解决问题,只需依赖此特定 IP;
- 防火墙可以配置为允许传入流量。在这种情况下,您甚至不需要 vpn。这会让安全团队感到紧张,而且在公司环境中很少发生。在这种情况下,您将连接到防火墙管理员提供的公共特定 IP:端口;
- 除了共享文件之外,还可以使用动态 DNS 服务,例如动态域名系统。在这种情况下,您可以通过 API 调用提供与固定名称相对应的 IP 地址
dansslaptop.dyndns.com
,例如此类服务在私有 IP 的情况下可能无法使用以及一些 DNS 提供商不得正确转发此类答案; - 其他共享方式可能是拥有您自己的网络服务器,您可以在其中输入名称并检索它,但您只需将您的依赖关系替换为网站提供商的文件共享服务。