発売日にもらって、少しずつプレーしていますが、実は初日にインターネット経由でプレーできない『006-0612』と言うエラーが出て困っていました。
自宅のルータとしてOpenBlockを使ってるのでiptablesでの設定となりますが結構苦労しましたので忘れないうちに書いておこうと思います。(本当は初日に一気に作業しておいたのですが、ダンプしたパケットの解析などめんどくさくて放置していました)
まず、3DSで使用するポートは
TCP | 53 | DNS | 3DSで使うかは微妙ですが任天堂 WiFi Connectでは開けておくべきポートらしい。DNSのゾーン転送でも使ったりします。 |
TCP | 80,443 | Web(HTTP,HTTPS) | これが開いていないって事は普通ありえない、普通にネットが使えていればこれは気にする必要はない。 |
TCP | 6667,12400,28910,29900,29901,29920 | 任天堂 | 任天堂関連のポートWiFi Connection(DS,3DS,Wii,WiiUなど) |
UDP | 1-65535 | - | 全部 |
TCP側は上記のポートをacceptで処理、その後ポートフォワードの設定をしてみたがつながりません。UDPのすべてのポートを3DSにポートフォワード設定したところ、動作しましたがこれでは他のPCや機器への悪影響は避けられない。実際に使っているポートを調べようとWireshark(tshark)をOpenBlocks上で動作させて該当するパケットを調べたところ50001/UDPが外部との通信に失敗している事がわかりました。これには心当たりがあって、Blackberryで自作したアプリを動作させるため、50000-51000/UDPをDMZで使用していました。結局この設定をiptablesの設定項目から削除したところ正常に動作させることが出来ました。
しかし今度は『ではUDPで外部にポートを公開する場合はどのポート』を使ったら良いのか?という疑問が生まれました。
ざっくり30分ほど(正確には1850秒でした)MH4Gでインターネット経由のプレーを行い、利用されるポートのレンジを調べたところ、UDPは9103~65424までバラバラに使うという結果でした。30分と比較的短い時間でもこれだけのポートを使っているので、外部にUDPでサービスを公開する場合は余裕を持って8000以下あたりのポートを使わざるを得ない感じです。
TCPに関してはポート開放(ポートフォワード)までする必要はなくて、少なくとも53,80,443,667,12400,28910,29900,29901,29920がフィルタリングされていなければ問題なく動作する。
UDPに関しては本当に全部のポートを使用するようだが、実際は8000-65535位のレンジっぽいのでUDPでポートフォワードが必要なら8000以下位のポートを設定する。 こちらもポート開放(ポートフォワード)までは必要なくてフィルタリングされていなければ動作しました。
NATの実装方法にもよるのでポート開放の必要性はケース・バイ・ケースですが、他のPCやゲーム機、WebカメラなどでUDPのポート開放を行っているような場合は『006-0612』のエラーが発生する可能性が高いです。
少なくとも、UDPすべてを使うなどと言った実装を行った任天堂の意図が理解できない。行儀が悪すぎる。