コンピューターサイエンス:アルゴリズム / OS / ネットワーク / DB
NAT とプライベートIP
家の中の番号は、外の世界には存在しない
192.168.1.50 は家の中でしか通じない番号です。世界中の家で同じ番号が使われているので、これを宛先に書いた返事は、どの家に届ければいいのか誰にも分かりません。
それでも家の PC はふつうに外のサイトを見られます。誰かが途中で番号を書き換えているからです。その書き換えを NAT と呼びます。
出るときに書き換え、戻るときに戻す
家の Wi-Fi ルーターは、外向きと内向きの 2 つの顔を持っています。外向きの顔には、プロバイダから配られた世界で一意な番号が付いています。
内側の PC が外へデータを出すと、ルーターは差出人の欄を自分の外向きの番号に書き換えてから送り出します。相手から見える差出人はルーターです。返事はルーター宛に返ってきて、ルーターが差出人の欄を元に戻し、内側の PC へ渡します。内側の機器は、自分の番号が途中で書き換わっていることに気づきません。
書き換えは往復のたびに行われるので、ルーターは会話が続いている間ずっと対応を覚えておく必要があります。使われなくなった記録は時間が経つと消えます。長時間なにも送らずに放置した接続が、ある日突然切れているように見えるのは、この記録が先に消えているためです。
3 台が同時に外を見ても混ざらない理由
ここで疑問が出ます。家の中の 3 台が同時に外へ出たら、返事はすべて同じルーター宛に返ってきます。どれがどの機器宛か、どうやって見分けるのでしょうか。
答えは、番号だけでなく、その後ろに付く通し番号も一緒に書き換えることです。ルーターは書き換えの対応表を持っています。
| 内側 | 書き換え後 | 宛先 |
|---|---|---|
192.168.1.50 の 51234 番 | 192.0.2.5 の 62345 番 | サイト A |
192.168.1.51 の 48901 番 | 192.0.2.5 の 62346 番 | サイト B |
192.168.1.52 の 55012 番 | 192.0.2.5 の 62347 番 | サイト C |
外向きの番号は 1 つでも、後ろの通し番号が違うので、戻ってきたデータがどの行のものかを一意に決められます。この方式のおかげで、たった 1 つの世界共通番号に何百台もの機器を相乗りさせられます。IPv4 が枯渇したと言われながら今も現役でいられる最大の理由がこれです。
外からは、中を名指しできない
副作用があります。外から見えるのはルーターの 1 つの番号だけで、その内側にいる機器を名指しできません。外から家の中の PC へ直接つなぐことは、そのままではできないということです。
勝手に踏み込まれないという意味では安全側に働きます。一方で、家でサーバーを公開したいときや、通話アプリのように機器どうしが直接つながりたいときには壁になります。前者は「この番号宛の通信は、この機器へ渡す」という転送設定を手で書いて解決します。後者は、外から見えている自分の番号を仲介役のサーバー経由で教え合い、そこへ向けて互いに接続する、という回り道で解決します。ビデオ会議アプリが裏でやっているのはこの回り道です。
最近は、プロバイダ側でまとめて同じ書き換えを行い、利用者に世界共通の番号を配らない回線も増えています。この場合、転送設定を書く場所そのものが自分の手元にないので、家でサーバーを公開する方法自体が塞がれます。
復習ミニクイズ
NAPT (IP マスカレード) で書き換えられる情報はどれですか