iChatのオーディオおよびビデオ会議を復元する
iChatの音声・ビデオ通話は現存しないAppleのサービスに依存している。本記事では互換性のある代替サービスを構築し、2000年代のMacで通話を再び可能にするために必要な/etc/hostsのエントリとプロトコルの詳細を示すことで、これらの通話機能を復活させる。
日本語
コピー

公開日:2026-09-11 12:36:14、著者 Chris Jones
更新日:2026-10-05 20:15:16 • 読了時間 7分
tl;dr
Leopard か Snow Leopard を動かしている古い Mac の /etc/hosts ファイルに以下を追加すれば(Tiger と Panther では未検証)、iChat の音声・ビデオ通話が再び動くはずだ。ただし、ルーターがポート保持型の NAT を使っている場合に限る(ほとんどはそうなっている)。
157.230.2.213 configuration.apple.com
pfSense や OPNsense のような BSD 系ルーターを使っている場合は、アウトバウンド NAT の設定で送信元ポートの保持を有効にする必要がある。
iChat AV と iSight
かつての私は、最も厄介なタイプの Apple 信者だった。2000 年代初頭、事実がどうであれ Apple は他より優れていると思い込んでいた。ただ、ひとつだけ本当にそうだった分野がある。2000 年代初頭の音声・ビデオ会議だ。
当時、コンシューマー向けビデオ会議の主要プレイヤーは Microsoft の MSN Messenger、Yahoo! の Yahoo! Messenger、そして AOL の AOL Instant Messenger(AIM)だった。そこへ 2003 年 6 月の Apple 世界開発者会議(WWDC)、Apple は G5 プロセッサと OS X 10.3 Panther とともに「iChat AV」を発表した。
合わせて発表されたのが「iSight」——過剰なまでに作り込まれた美しいカメラだった。
当時、私は実際に G4 ノートブックと iSight を持っていた。未来に生きている気分で、それがたまらなく好きだった。この記事は、初期の OS X で iChat のビデオ会議をインターネット越しに再び動かし、当時の楽しさを味わい直すまでの話だ。
最初の挑戦
2023 年初頭、友人(以下「Methodius」)と私は、とりあえず何が起きるか試してみることにした。OS X Leopard で簡単な iChat 音声通話をテストする。このバージョンの iChat は XMPP(Jabber)サーバーに対応していたので、二人で jabb.im にアカウントを作り、緑の通話ボタンを押した。相手側で呼び出し音が鳴り、接続を試みていると表示され、そして……接続に失敗した。
物事はそう単純には進まない。
iChat のデバッグとパケットキャプチャ
tcpdump でトラフィックを見る時だ。幸い当時の OS X にはプリインストールされていたので、余計なものを入れる必要はなかった。キャプチャだけでなく、iChat をデバッグモードで起動もした。ターミナルでこうだ:
/Applications/iChat.app/contents/MacOS/iChat -errorLogLevel 7
iChat のデバッグモードは非常に有用なのに、ほとんどドキュメントがない。だから後で必要になったときのためにここに残しておく。
本来起きるはずだったこと
- iChat が
http://configuration.apple.com/configurations/macosx/ichat/1/snatmap.txtに http リクエストを送り、SNATMAP サーバーのアドレスを取得する。 - iChat がその SNATMAP サーバーに UDP リクエストを送り、自分のグローバル IP アドレスを取得する。
- その後、両端の iChat がそれぞれのテキスト通信チャネル(ここでは XMPP)を通じて、自分のグローバル IP とポートを交換する。
- 続いて両端の iChat がピアツーピアの RTP 接続を確立しようと、先ほど SNATMAP サーバーで得たグローバル IP とポートに向けて互いにパケットを撃ちまくる。NAT の接続はステートフルで、外向きの NAT 接続は要求を出したマシンのために内向きの接続を開けるので、NAT ルーターの背後にいる iChat 同士は、事前の NAT ポート転送設定なしに接続できる。
実際に起きたこと
- iChat が
http://configuration.apple.com/configurations/macosx/ichat/1/snatmap.txtに http リクエストを送ろうとしたが https にリダイレクトされ、OS X の TLS スイートが古すぎて接続できなかった。 - iChat はそのリクエストを完了できず、交換されたのはグローバル IP ではなくプライベート LAN の IP だった。これでは当然 NAT を越えて接続できない。
とはいえ、この記事を書いている時点でもその https URL は生きていて、中身もちゃんとある!
snatmap://snatmap.apple.com:5678
よし、問題ない。自分で簡単な Web サーバーを立ててそのファイルをホストし、OS X の /etc/hosts ファイルを書き換えて configuration.apple.com を自分が選んだ IP に向けた。実行してみると……やはり駄目だった。
Apple の SNATMAP サーバーはもう応答しない。ここで完全に行き詰まった。この SNATMAP サーバーがどう動くのか、iChat がどう通信することを想定しているのか、皆目見当がつかなかったからだ。多くを学んだが、結局は失敗に終わった。
数年後
Methodius と私は 2026 年の夏に再挑戦することにした。今回は LLM の助けが少しある。以前のパケットキャプチャを頼りに、LLM で iChat のビデオ会議フレームワークをリバースエンジニアリングし、SNATMAP サーバーへのリクエストがどんな形で、iChat がどんな応答を期待しているのかを突き止めた。そこから SNATMAP プロトコルの仕様書を生成した。
私は iChat を逆コンパイルできないし、アセンブリも読めない。だが、LLM が生成した仕様書を頼りに、簡単な UDP サーバーを書くことくらいなら学べる。
人生初のサーバー
本業はシステムエンジニア兼管理者だ。サーバーを立てて設定するのは仕事だが、自分でサーバーを書いたことは一度もない。実際のところ、この SNATMAP サーバーは練習台としてこれ以上ない題材だった。
プロトコルは以下のとおり:
- UDP、ポート5678
- リクエストパケットは16バイトで、4つのフィールドを含む。
- Type(リクエストは "1")
- Nonce(ランダムな数値。リクエストとレスポンスの紐付けに使う)
- クライアントのローカルIP(未使用)
- クライアントのローカルポート(未使用)
- レスポンスパケットは16バイトで、4つのフィールドを含む。
- Type(レスポンスは "2")
- Nonce(リクエストと同じランダムな数値)
- UDPリクエストの外部IP
- UDPリクエストの外部ポート
specファイルとSNATMAPサーバーのソースコードへのリンクは文末に。
テスト結果
Methodiusには子どもがいて、自由時間が僕よりずっと少ない。だからiChatが公網でどう動くか、自分一人でテストするしかなかった。独立したISP回線が2本あるわけでもないので、ラボの中に「インターネット」を構築することにした。やり方はこうだ。KVMホスト(Proxmox)上でNATルーター(OpenWrt)の仮想マシンを2台動かし、その間をフラットなネットワーク空間でつなぐ。この空間が「インターネット」の役割を果たす。2台のMacはUSB NICで物理的にKVMホストに接続し、仮想ルーターがそれぞれのNATプライベートLAN内でIPを割り当てる。「インターネット」側では、Jabber(ejabberd)、web(lighttpd)、SNATMAPサーバーが1台のDebian Linux仮想マシン上で動いている。
以下が図と、実際の物理環境の写真:Proxmoxサーバー(Thinkpadノート)と、それに接続された2台のMac。

これで素早くテストして、素早くイテレーションを回せる。
仕様ファイルとソースコード
よければ仕様ファイルを参考に、自分のサーバーを作ってみてほしい。ソースコードは仕様ファイルに沿ってPythonで手書きしたもので、Python 3が動く環境ならほぼそのまま動く。
セルフホスト
セルフホストしたいなら、まずWebサーバーを用意して、configuration.apple.com 宛てのリクエストに応答できるようにし、パス
/configurations/macosx/ichat/1/snatmap.txt
から snatmap.txt を配信するようにする。
snatmap.txt に
snatmap://YOUR_SERVER_IP:5678
と書く。YOUR_SERVER_IP はSNATMAPサーバーを動かしているマシンの公網IPアドレスに置き換える。
楽な方法
あるいは、僕のサーバーをそのまま使ってもらってもいい! この太古のソフトでビデオチャットしたい人が世界にまだ1〜5人くらい残っているので、ずっと動かしている。:D
OS X LeopardかSnow Leopardが動く古いMacで(もっと古いバージョンでも動くかもしれないが、未検証)、/etc/hostsファイルに次の1行を追加する。
157.230.2.213 configuration.apple.com
あとは通話したい友達にも同じことをしてもらう。そして緑の通話ボタンを思いきり押すだけ!
iSightは要らない
本当だ! かなり新しいLogitechのカメラでも使える。僕はOS X Leopard上でLogitech C920を使ってテストした。
最終結果
以下が、Methodiusと僕が本物のインターネット経由でiChat AVを使ってチャットしたときのスクリーンショット。
楽しんで、たくさん喋ろう!