Help us understand the problem. What is going on with this article?

SEILでニンテンドースイッチの「NAT越え」問題を解決する方法

概要

ニンテンドースイッチでオンラインゲームをする場合、しばしは遭遇するのが「NAT越え」問題です。
基本的にはルータがCone NATをサポートしていれば、UDPホールパンチング機能によるNAT越えが使えるため、この問題は起こりません。
しかしながらSEILのNATはSymmetric NATのみをサポートするためUDPホールパンチングは機能しません。
従って、この問題を解決するためにポートフォワード設定が必要です。

スイッチを使えるようにするためのポートフォワード設定(基本)

ニンテンドースイッチでNAT越え問題が発生した際の対処方法として、任天堂の公式サイトでは以下の手順を推奨しています。

  1. スイッチのIPアドレスを固定
  2. WANから入ってくるUDPパケット(ポート1~65535)を全てスイッチのIPアドレスにフォワード

ポートフォワード設定(任天堂公式/英語)

従って、SEILでも同様の設定を施すことで解決できます。
具体的にはnat定義に以下のような1行を足す事で解決できます(スイッチのIPアドレスを"192.168.10.100"に固定した場合)。

nat snapt add protocol udp listen 1-65535 forward 192.168.10.100 1-65535 enable interface pppoe0

ただし、全てのUDPパケットをスイッチにフォワードするのも心情的に宜しくありません。
実際には、40000~65535をフォワードしておけば問題ないようです。
実際、自分は以下のような環境で動作するのを確認しました。

SWITCH-1s.png

スイッチを2台同時に使えるようにする(応用)

ポートフォワードをするとSymmetric NATのみをサポートするSEILでも、スイッチでネット対戦等が問題なくできるようになりますが、ここでもう一つ問題があります。
ポートフォワードはフォワード先のアドレスが固定されるため、同時に2台のスイッチをSEIL配下のLANに繋ぎ、NAT越えさせることができません。
これを解決する一番の方法はSEILを使わない事です。
Cone NAT系、できればポートとアドレス毎にパケットを制御できる「Port Restricted cone NAT」をサポートしているルータに交換する事が最も確実です。

ただし理由は人それぞれでしょうが、SEILを使うにはそれなりの理由があると思います。
以下は「SEILは使いたいけどスイッチも使いたい」と言うワガママな人向けの対応方法です。
環境は限りなく不格好ですが、使う事は出来ると思います。
細かい説明は省きます。まずは以下の図を見てください。

SWITCH-2s.png

構成図の中にルータ(市販のブロードバンドルータ)が1台増えています。
そしてスイッチは、このブロードバンドルータに接続しています。スイッチのIPアドレスは固定でもDHCPでも構いません。
SEILからUDPパケットをブロードバンドルータにフォワードし、こちらで再度NATします。
つまり、自宅LAN内にスイッチ専用のネットワークを組むと言う方法です。

この構成が上手く動作するためには、追加したルータがCone NATをサポートしている必要があります。
こればかりは機種ごとに異なりますのでメーカーへの確認が必要ですが、最近の市販ブロードバンドルータはニンテンドースイッチ等メジャーなゲーム機の対応が出来ていないと売れませんから、最初からCone NATをサポートしているものが多いと思います。
自分はNEC製の安いブロードバンドルータを使いました。

この環境でSTUNnerというスマホアプリで接続中のネットワークのNATタイプを調べると、以下のような結果になりました。
左はSEIL直下のWiFiアクセスポイントにスマホを繋いだ結果で、右がポートフォワードしたWiFiブロードバンドルータにスマホをつないだ時の結果です。
左はSymmetric Cone(Symmetric NAT)なのに対して、右はPort Restricted Cone NATになっている事が分かるでしょう。

switch.png

最後に

因みに、Port Restricted Cone NATで接続されることで、スイッチを2台同時に接続できると思いますが、所有台数の関係で当方は1台しかスイッチの接続を試しておりません。あしからず。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away