9

是否有人拥有 Apple 推送通知服务使用的所有 IP 地址的完整列表?

我知道 Apple 使用内容交付网络来分发这些请求,并且 DNS 查找将返回靠近请求者位置的服务器 - 我遇到的问题是定位所有这些处理美国内容的服务器。

例如:

$ nslookup gateway.push.apple.com

Non-authoritative answer:
canonical name = gateway.push-apple.com.akadns.net.

Address: 17.172.238.216
Address: 17.172.238.224
Address: 17.172.238.226

等等

每次我查询 DNS 时,此列表都会更改 - 但所有地址似乎都在同一个 17.172.238.x 范围内 - 但不能保证明天或下周我会看到不同的范围。

但是,对于测试推送服务器,我已经在不同的子网中获得了结果。有时我会得到一组地址:

$ nslookup gateway.sandbox.push.apple.com

Non-authoritative answer:
canonical name = gateway.sandbox.push-apple.com.akadns.net.

Address: 17.149.34.66
Address: 17.149.34.65

其他时候,我会得到这些地址:

Address: 17.172.233.65
Address: 17.172.233.66

我将使用 Apple 推送通知服务的服务器将位于公司防火墙后面,我需要为生产和测试网关打开端口 2195 和 2196——但是,我的防火墙团队需要特定的 IP 地址而不是主机名.

我担心如果我只是要求防火墙团队允许我到目前为止看到的 IP 地址,那么当 DNS 服务器决定提供不同的范围时,我的服务器将在一天或一周后停止工作。

如果有人有生产和测试环境的完整列表,我将不胜感激。

更新: 我曾尝试要求防火墙团队打开 Apple 的整个 IP 块 (17.0.0.0/8),但他们不会为我这样做——我需要稍微缩小地址范围。

最终更新 - 2016 年 10 月 16 日

即使这个问题已经结束,我想我会添加一个注释来解释我的最终解决方案 - 这不是任何寻找答案的人想要听到的。我永远无法超越 CDN 使用的不断变化的地址,所以我最终放弃并从 Rackspace 租用了外部服务器。我得到了最小的服务器,唯一运行在它上面的是一个端口转发器,它监听 2195 和 2916 并将连接发送到 Apple。

我在 Rackspace 服务器上使用了一个简单的 iptables 配置,只允许来自公司网关的 2195/2916 连接,然后让我的防火墙团队在外部服务器上打开到静态 IP 地址的路径。防火墙团队很高兴,实现了单一路径,外部服务器可以连接到 Apple 使用的整个 17.0.0.0/8 范围。

4

2 回答 2

24

来自Apple 的文档(强调添加的有趣部分):

推送提供程序、iOS 设备和 Mac 计算机通常位于防火墙后面。要发送通知,您需要打开 TCP 端口 2195。要访问反馈服务,您需要打开 TCP 端口 2196。通过 Wi-Fi 连接到推送服务的设备和计算机需要打开 TCP 端口 5223。

推送服务的IP地址范围可能会发生变化;期望提供商将通过主机名而不是 IP 地址进行连接。推送服务使用负载平衡方案,为相同的主机名生成不同的 IP 地址。但是,整个 17.0.0.0/8 地址块已分配给 Apple,因此您可以在防火墙规则中指定该范围。

17.0.0.0/8 是 17.0.0.1 到 17.255.255.254 的 CIDR 表示法。

于 2012-05-21T16:22:40.437 回答
8

不幸的是,官方的答案是没有官方的答案:)——除非你考虑到苹果公司相当草率的做法,即简单地允许所有流量到 17.0.0.0/8。Apple 开发人员支持在第一个答案中提供了与vcsjones相同的文档链接。

对于我的特殊情况,在过去几周定期检查 DNS 后,我已将 IP 地址缩小到这些范围。请记住,这些仅对美国中西部地区有效,因为 Apple 的 CDN 将返回一组最接近进行查询的服务器的地址。

对于 gateway.push.apple.com,我在防火墙上打开端口 2195 和 2196 用于:

17.149.35.0 / 24
17.172.238.0 / 24

对于 gateway.sandbox.push.apple.com,我在防火墙上打开端口 2195 和 2196 用于:

17.149.34.66
17.149.34.65
17.172.233.65
17.172.233.66

由于这些地址显然会发生变化,因此我为我的应用程序构建了一些监控,以检测何时无法访问 APNS 服务器(并回退到这些地址范围而不是使用 DNS)。这不是理想的解决方案,但它现在可以工作,直到我可以与我的公司网络/防火墙团队一起制定解决方案......

于 2012-05-30T22:36:19.533 回答