なぜNATループバックは明示的に設定を別個投入しないといけないのか

結論

ルータが、ポート開放(静的マスカレード)の設定を参照せずに、自分自身にパケットを送ってしまうから。


詳細

NATループバックという事象について説明する。これが問題になるのは、例えばニンテンドースイッチでスプラトゥーンの対戦をする場合、LAN内にあるサーバをグローバルIPで公開する場合である。

図1で示したように、LAN内で102号室のコンピュータ(192.168.100.21)を静的マスカレードによって、203.0.113.1 : 8888 などとしてインターネットに向けて公開する状況を考える。

図1.ヘアピンNATの動作(YAMAHA HPから引用

このとき、仮に101号室のコンピュータ(192.168.100.11)から、203.0.113.1 : 8888に向けてアクセスをしても、102号室のパソコンには到達しない。パケットはルータで止まってしまう。

ローカルにあるコンピュータから、203.0.113.1(102号室のパソコン)へとアクセスするとき、ルータは静的マスカレードの設定は参照しない。自身の8888ポートを確認してそこから応答しようとする。本来であれば8888ポートが102号室のコンピュータ(192.168.100.21)にリダイレクトされていることを認識しないといけないのだが、localからWANインターフェースにアクセスしたとき、デフォルトではそのような挙動はしない仕様なのである。

ルータに「静的マスカレードの設定までちゃんと読め」と言いたくなるかもしれないが、これは歴史的に仕方ない事情があるのだ。古の時代、全部の機器にIPアドレスが振られていた頃には「LAN内からWAN側のインターフェースへアクセスし、そこからLAN内の機器へアクセスする」という挙動は想定されていなかったのである。

このため、NATループバックについては、人間がルータへ明示的に、接続設定とは別個にconfigを投入する必要があるという事になったのである。


おまけ:ループバックアドレスとの違い

ループバックアドレスというのは所謂Windowsでいうところの”Localhost”というやつでしょうか。127.0.0.1/8 みたいなやつです。名前だけ見ると “NATループバック” と関係が深そうなんですが、全くの別物です。


参考文献

ヘアピンNAT機能がないルータだとなぜLAN内から、グローバルIP経由のルートでLAN内のサーバにアクセスできないのか|Yahoo! 知恵袋
【図解】ループバックアドレスの仕組みとメリット,使い方,ループバックインタフェースとの違い|SEの道標
パケットとフレームは何が違う?|日経XTECH

作成者: rarafy

2013年くらいからUnityを触っているかもしれません。 特に書くこともありませんが、趣味は部屋の掃除です。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です