NAT / NAPT / DHCP / DNS を整理してみる

Network

はじめに

今回は、ルーター・スイッチ学習の流れの中で、NAT / NAPT / DHCP / DNS について整理してみました。

これまで、ネットワークの基礎として

  • ONU / ルーター / AP / スイッチの役割
  • L2 / L3 / MAC / IP / ゲートウェイ
  • 自宅ネットワークの構成図
  • Linuxでの ip aip route などの確認

を進めてきましたが、その中で改めて気になったのが、

「家庭内の複数端末は、なぜ1つの回線でインターネットへ出られるのか」
「IPアドレスやDNSの設定は、どうやって入っているのか」

という点でした。

普段ネットワークを使っていると当たり前のように通信できていますが、その裏では DHCP や DNS、そして NAT / NAPT が動いています。

今回は、それらを自宅ネットワークの構成とLinuxコマンドの結果に結びつけながら、基礎として整理してみました。


今回の目的

今回の学習で意識したことは次の通りです。

  • NAT と NAPT の違いをざっくり理解する
  • DHCP が何を配っているのかを理解する
  • DNS が名前解決をしていることを整理する
  • 自宅ルーターが何をしているのかをイメージできるようにする
  • Linuxの ip routenslookup と、実際のネットワークの動きをつなげる

これまでは「つながる」「見える」「アクセスできる」という結果を中心に見ていましたが、今回はその裏側にある仕組みを整理するのがテーマでした。


まずは4つを一言で整理してみる

今回の学習では、最初に4つをできるだけシンプルに整理しました。

NAT

IPアドレスを変換する仕組みです。

NAPT

IPアドレスだけでなく、ポート番号も使って複数端末の通信をさばく仕組みです。

DHCP

端末にIPアドレスやゲートウェイ、DNSサーバなどを自動で配る仕組みです。

DNS

ドメイン名をIPアドレスに変換する仕組みです。

こうして一言でまとめるとシンプルですが、自宅ネットワークに当てはめて考えるとかなりイメージしやすくなりました。


自宅ネットワークに当てはめて考えてみる

私の自宅ネットワークは、ざっくり次のような構成です。

  • インターネット
  • ONU
  • ソフトバンク光ルーター
  • Wi-Fiルーター(APモード)
  • PC、スマホ、ノートPC、TV、タブレット、ゲーム機

前回の整理で、Wi-FiルーターはAPモードで動作していることが分かりました。
そのため役割は次のようになります。

  • ソフトバンク光ルーター
    → ルーター
    → DHCP の配布元
    → NAPT を行う中心
  • Wi-Fiルーター(APモード)
    → 無線AP
    → スイッチ
  • 各端末
    → DHCPで設定を受け取る
    → DNSで名前解決する
    → ルーターを通って外へ出る

この整理をしたことで、自宅ネットワークの見え方がかなり変わりました。


DHCP は「自動で配る人」

まず分かりやすかったのが DHCP の役割です。

スマホやPCをWi-Fiにつないだとき、普通は手動でIPアドレスを設定しません。
それでも通信できるのは、DHCP が自動で必要な情報を配っているからです。

DHCP が配るのは、たとえば次のようなものです。

  • IPアドレス
  • サブネットマスク
  • デフォルトゲートウェイ
  • DNSサーバ

つまり、DHCP は

「この端末はこのIPを使ってください。出口はこれです。名前解決はこのDNSを使ってください」

と教えてくれているようなものです。

今までは何となく「自動でつながるもの」と思っていましたが、実際にはこうした情報が配られていると分かると、かなり整理されました。


DNS は「名前を住所に変える仕組み」

次にDNSです。

人間は Webサイトを見るときに、IPアドレスではなくドメイン名を使います。
たとえば google.com のような名前です。

でも、コンピュータ同士が通信するにはIPアドレスが必要です。
その変換をしているのが DNS です。

つまり DNS は、

「名前をネットワーク上の住所に変換する仕組み」

と捉えると分かりやすいです。

Linuxでは次のようなコマンドで確認できます。

nslookup google.com
dig google.com

これまで何度か実行してきたコマンドですが、今回の学習を通して、

「名前解決ができて初めて、その先の通信に進める」

という流れが少し実感できました。


NAT / NAPT は「家庭内の複数端末を外へ出す仕組み」

今回いちばん面白かったのは、この部分でした。

家庭の中には、

  • PC
  • スマホ
  • ノートPC
  • TV
  • タブレット
  • ゲーム機

など、複数の端末があります。
それぞれが家庭内ではプライベートIPを持っています。

でもインターネット側から見ると、家庭全体としては1つのグローバルIPで外へ出ているように見えます。

ここで働いているのが NAT / NAPT です。

特に家庭用ルーターでは、実際には NAPT を使っていることが多いです。
IPアドレスだけでなく、ポート番号も使って、どの通信をどの端末に戻すかを管理しています。

このあたりは、最初は少し抽象的でしたが、たとえば

「マンションの住所は1つでも、部屋番号で住人を区別する」

というイメージで考えると、かなり分かりやすかったです。

  • 建物の住所 = グローバルIP
  • 部屋番号 = ポート番号
  • 各住人 = 家庭内端末

と考えると、NAPT が複数端末をまとめて外へ出す仕組みとしてかなり納得しやすくなりました。


Linuxコマンドとつながった感覚

今回の学習をしていて良かったのは、今まで打ってきたLinuxコマンドが少しずつ現実のネットワーク構成と結びついてきたことです。

たとえば、次のようなコマンドです。

ip a
ip route
cat /etc/resolv.conf

ip a

自分のIPアドレスを確認するためのものです。

ip route

ルーティング情報を見るためのものです。
特に default via ... が、外へ出るための出口(ゲートウェイ) だと理解できるようになってきました。

cat /etc/resolv.conf

DNSの設定を見るときに役立ちます。

今までは「確認コマンド」として見ていたものが、今回の学習を通して、

  • DHCP が配った設定
  • DNS の情報
  • 外へ出るためのゲートウェイ

とつながって見えるようになったのは、かなり大きかったです。


今回学んだこと

今回の学習で特に印象に残ったのは次の点です。

1. 家庭内ネットワークでは複数の仕組みが連携している

DHCP が設定を配り、DNS が名前解決をし、ルーターが NAPT を使って外へ出している、という流れで成り立っていることが整理できました。

2. ルーターは単なる「箱」ではなく、かなり重要な役割を持っている

今までは何となく「インターネットにつなぐ機械」くらいの認識でしたが、実際には

  • IP配布
  • 名前解決先の案内
  • 外への変換処理

など、かなり大事な仕事をしていることが見えてきました。

3. Linuxのコマンド出力は、実際のネットワークの動きとつながっている

コマンドの見方が、少しずつ「意味を持って」読めるようになってきたのは良い収穫でした。


まとめ

今回は、NAT / NAPT / DHCP / DNS を、自宅ネットワークに当てはめながら整理してみました。

今回のポイントをまとめると、次の通りです。

  • DHCP は端末にIPアドレスやゲートウェイ、DNSを自動で配る
  • DNS は名前をIPアドレスに変換する
  • ルーターは家庭内ネットワークの出口になる
  • 複数端末が1つの回線で外へ出られるのは NAPT のおかげ
  • ip routenslookup などのコマンドは、実際のネットワークの仕組みとつながっている

一つひとつは基礎的な内容ですが、こうして自分の環境に当てはめて考えることで、かなり理解しやすくなったと感じています。


今後

次はこの流れで、さらに次のテーマに進みたいと思っています。

  • ルーティングの基本
  • VLAN の考え方
  • ファイアウォールの入口
  • VM環境でのネットワークの違い

ネットワークは言葉だけだと少し難しく感じますが、自宅構成やLinuxコマンドと結びつけながら学ぶと、少しずつ腹落ちしていく感じがあります。

これからも、できるだけ 「自分の環境に当てはめて理解する」 ことを意識しながら進めていきたいです。