克里斯(Chris)曾经是最招人烦的那种苹果(Apple)死忠粉。在21世纪初,他觉得苹果的东西样样都比别家强,不过在音视频会议这块倒是所言非虚。当时消费级视频会议的主流是微软(Microsoft)的MSN Messenger、雅虎(Yahoo!)的Yahoo! Messenger和美国在线(AOL)的AIM。随后在2003年6月的苹果全球开发者大会(WWDC)上,伴随G5处理器与OS X 10.3 Panther,苹果推出了iChat AV。
正文
简要说明
在运行 Leopard 或 Snow Leopard 的老 Mac 上,向 /etc/hosts 加入指定记录(详见后文简单方法),iChat 就能重新音频视频通话(Tiger/Panther 未测)。前提是你路由器做端口保留 NAT(多数支持)。注意如果用 pfSense 或 OPNsense 等 BSD 路由器,需在出站 NAT 设置里启用源端口保留。
iChat AV 与 iSight
我以前是个苹果死忠。2000年代初消费级视频会议那边,微软有 MSN、雅虎有雅虎通、AOL 有 AIM。2003年6月苹果 WWDC 随 G5 和 OS X 10.3 Panther 发布了 iChat AV。

同时发布了搭配的 iSight 摄像头。

我有 G4 笔记本和 iSight,感觉像未来生活。这篇就是讲如何让早期 OS X 的 iChat 视频会议重新联网找乐子。
初次尝试
2023年初,我和朋友 Methodius 在 OS X Leopard 试 iChat 音频呼叫。那版 iChat 支持 XMPP,我们各建了 jabb.im 账号,按绿色呼叫键。响铃、尝试连接、然后失败。
iChat 调试与网络排查
用 tcpdump 抓包(OS X 自带)。终端以调试模式启动:/Applications/iChat.app/contents/MacOS/iChat -errorLogLevel 7。调试模式很有用且极少文档。
理应发生的过程
- iChat 向
http://configuration.apple.com/configurations/macosx/ichat/1/snatmap.txt发请求,获取 SNATMAP 服务器地址。 - iChat 向 SNATMAP 发 UDP 请求,获取自己公网 IP。
- 两端通过文本通道(我们用 XMPP)交换公网 IP 和端口。
- 两端尝试 P2P RTP 连接,向对方公网 IP 端口发包。NAT 有状态,出站连接会开入站通道,所以无需预设端口转发。
实际发生的情况
- iChat 请求被重定向到 https,因 OS X 的 TLS 太旧连不上。
- 请求失败,两端交换了局域网 IP,NAT 下自然连不上。
那个 https 链接现在还活着,内容是:snatmap://snatmap.apple.com:5678
我自建 web 服务器托管文件,改 /etc/hosts 指向,仍没用。苹果的 SNATMAP 服务器已不响应。当时死胡同。
数年后
2026年夏,我和 Methodius 借 LLM 帮忙,用旧抓包逆向 iChat 视频框架,弄清了请求响应格式,生成 SNATMAP 协议规格文件。我虽不会反编译,但能照规格写简单 UDP 服务器。
第一个服务器
我是系统工程师但没写过服务器,SNATMAP 适合练手。
协议:
- 通过 UDP 5678 端口通信
- 请求包 16 字节四字段:
- 类型("1" 请求)
- 随机数 Nonce(匹配请求响应)
- 客户端本地 IP(未用)
- 客户端本地端口(未用)
- 响应包 16 字节四字段:
- 类型("2" 响应)
- Nonce(同请求)
- UDP 请求来的外部 IP
- UDP 请求来的外部端口
规格和源码链接在文末。
测试结果
Methodius 有孩子没空,我需独自测跨互联网。没有两条 ISP,就建实验网:两台 OpenWrt 路由器作虚拟机跑在 Proxmox(KVM) 上,扁平网络当"互联网"。两 Mac 物理连 KVM 主机(USB 网卡),获私网 IP。 "互联网"上跑 ejabberd、lighttpd、SNATMAP(Debian VM)。





藉此快速测试迭代。
规格与源码
自建服务
自建需 web 服务器应答 configuration.apple.com,从路径 /configurations/macosx/ichat/1/snatmap.txt 提供 snatmap.txt,内容:snatmap://YOUR_SERVER_IP:5678(换成服务器公网 IP)。
简单方法
或用我的服务器。旧 Mac(Leopard/Snow Leopard,更老未测)的 /etc/hosts 加:157.230.2.213 configuration.apple.com。叫朋友也加,按绿键即可。
不一定要有 iSight
可用较新的 Logitech 摄像头,我在 Leopard 下测过 C920。
最终结果

评论
这串讨论整体是怀旧情绪压倒技术批判:多数人被这个复活 iChat AV 的项目勾起回忆,并顺势吐槽 FaceTime 的界面退化;只有一条评论真正回答了「当年为什么能打通、现在为什么打不通」的关键技术问题。
认为老 iChat 的连接方式比现在的方案更优雅
- SNATMAP 本质是苹果版的 STUN:先向外网服务器问出自己的公网 IP 和端口,双方在聊天里交换,再同时发包打洞穿过 NAT(较多人)
- 因此端口保留型 NAT 是关键,一旦碰上给每个目标重新分配端口的运营商级 NAT,这套办法就废了;而 iChat 当年没有 TURN 中继可退,所以如果双方主机端都修好了还是连不上,就该查两端是否处于 CGNAT 后面(少数人) > 现代 WebRTC 打不通还能退回 TURN 中继,iChat 没有这个后路。(@mulanroo)
把界面退步当成离开 FaceTime 的理由
- 有人认为现在是视频会议反而能用、新版本 FaceTime 却像先锋艺术实验,技术用户和非技术用户都无从下手(较多人)
- 具体怨气集中在最近通话和联系人列表的混乱,容易在首页位置误拨给多年前的联系人;并预言下个版本会把更多控件藏进一个难以辨认的图标里(少数人) > 我还会毫不犹豫地选那套界面,而不是 Golden Gate。(@JSR_FDED)
以开发者身份确认当年的技术含金量
- 参与者回忆 2004 年加上四方视频会议和 H.264 支持,当时确实走在最前面,靠手写 Altivec 和手工优化让不带 SIMD 的 iMac、iBook 也能跑(少数人) > 那些年通宵很多,手写 Altivec,手工调 H.264,就为了让没有 SIMD 的机器跑起来。(@rajbot)
对这段历史的向往本身
- 有人小时候就想搞懂它怎么工作却始终没头绪,如今看到实现等于梦想成真(较多人)
有价值的补充
- 那台被吐槽过度设计的 iSight 摄像头靠转接一直能用,直到 M1 时代苹果最终移除了驱动;有人当年还真把它接到 Intel MacBook Pro 上开会。
- 也有人说买 iSight 并无实际用途,纯粹因为它是个漂亮的物件——在这条讨论里,硬件作为收藏品的价值和使用价值被明确分开了。