科学・技術
iChatのオーディオ・ビデオ会議を復活させる
Resurrecting iChat Audio and Video Conferencing (blog.pipetogrep.org)
要約
この記事は、古いMac OS X(Leopard以降)でiChatのオーディオ・ビデオ会議機能を再びインターネット経由で利用可能にする方法について解説しています。AppleのSNATMAPサーバーが利用できなくなったため、筆者は独自のSNATMAPサーバーを構築し、DNS設定を変更することで、現代のルーター環境でもiChat AVが機能するようにしました。これにより、古いハードウェアとソフトウェアで懐かしいビデオ通話体験を再現しています。
全文翻訳
iChatのオーディオ・ビデオ会議を復活させる
公開日: 2026-09-11 12:36:14 by Chris Jones
更新日: 2026-10-05 20:15:16 • 7 分読書
tl;dr
LeopardまたはShow 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のすべてのものが、真実かどうかに関わらず、他にはない最高のものだと考えていました。しかし、それが真実だった場所が1つありました。それは2000年代初頭のビデオおよびオーディオ会議の領域でした。当時のコンシューマーレベルのビデオ会議の主要プレイヤーは、MSN MessengerのMicrosoft、Yahoo! MessengerのYahoo!、AOL Instant Messenger(AIM)のAOLでした。その後、2003年6月のApple World Wide Developer Conference(WWDC)で、G5プロセッサとOS X 10.3 Pantherとともに、Appleは「iChat AV」を発表しました。それに合わせて、「iSight」と呼ばれる、美しく過剰設計されたウェブカメラも発表しました。私は実際にG4ラップトップとiSightを持っていました。未来に生きているような気分で、それが大好きでした。この記事は、iChatのビデオ会議を初期のOS Xでインターネット経由で再び動作させる方法について、その楽しさを追体験するために書かれています。
最初の試み
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は、SNATMAPサーバーを介して以前に発見されたパブリックIPとポートを、テキスト通信チャネル(この場合はXMPP)経由で交換します。両端のiChatは、SNATMAPサーバーを介して以前に発見されたパブリックIPとポートを、テキスト通信チャネル(この場合はXMPP)経由で交換します。SNATMAPサーバーを介して以前に発見されたパブリックIPとポートを、テキスト通信チャネル(この場合はXMPP)経由で交換します。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
OK、NP。私は独自のシンプルな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サーバーは、練習用の最初のサーバーとして最適であることがわかりました。
プロトコル:
ポート5678でUDP経由で通信します。
リクエストパケットには、16バイトのフィールドが4つ含まれています。
タイプ(リクエストの場合は「1」)
ナンス(リクエストとレスポンスを一致させるために使用されるランダムな番号)
クライアントローカルIP(未使用)
クライアントローカルポート(未使用)
レスポンスパケットには、16バイトのフィールドが4つ含まれています。
タイプ(レスポンスの場合は「2」)
ナンス(リクエストと同じランダムな番号)
UDPリクエストからの外部IP
UDPリクエストからの外部ポート
SNATMAPサーバーの仕様ファイルとソースコードへのリンクは、この記事の最後にあります。
結果のテスト
Methodiusには子供がいるため、私よりも自由な時間がはるかに少ないため、一人でインターネット経由でiChatがどのように機能するかをテストする方法が必要でした。私は2つの別々のISP接続を扱うことができないため、ラボに「インターネット」を構築することにしました。これは、KVMホスト(Proxmox)上で2つのNATルーター(OpenWrt)を仮想マシンとして実行し、それらが「インターネット」として機能するフラットネットワークスペースを通過させることで達成されました。次に、物理KVMホスト(Thinkpadラップトップ)に2台のMacを物理的に接続しました(USB NIC経由)。VMルーターは、NATの後ろにある独自のプライベートLANでIPアドレスを割り当てました。次に、「インターネット」ネットワークで、Debian Linux VMでJabber(ejabberd)、Web(lighttpd)、およびSNATMAPサーバーを実行していました。これは、Proxmoxサーバー(Thinkpadラップトップ)とそれに接続された2台のMacの物理セットアップの写真とともに図示されています。これにより、迅速にテストと反復を行うことができました。
仕様とソースコード
仕様ファイルを使用して、必要であれば独自のサーバーバージョンを作成できます。ソースコードは仕様ファイルからPythonで手書きされており、Python 3を実行できるほぼすべてのOSで実行できます。
仕様ファイル
ソースコード
セルフホスティング
セルフホストしたい場合は、configuration.apple.comへのリクエストに応答するようにWebサーバーを設定し、/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ファイルに入力してください。
157.230.2.213 configuration.apple.com
そして、呼び出したい友人も同様に行ってください。その後、緑色の通話ボタンを連打してください!
iSightは必要ありません
本当です!比較的モダンなLogitechウェブカメラでも使用できます。Logitech C920をOS X Leopardでテストしました。
最終結果
これは、Methodiusと私が実際のインターネット経由でiChat AVでチャットしているスクリーンショットです。楽しんで、ハッピーチャット!
Apple Retro Computing
PowerPC
関連記事
NetBSD & iBooks & Python、ああ!
2004年のPowerPC iBook G4でPythonゲーム開発(pygame)にNetBSDを使用する。
Tha