【CCNA】NATの仕組みと設定コマンドを徹底解説|スタティックNAT・ダイナミックNAT・PATの違い

目次

NATとは

NAT(Network Address Translation)は、プライベートIPアドレスとグローバルIPアドレスを相互に変換する技術です。

企業や家庭の内部ネットワークではプライベートIPアドレスを使い、インターネットとの通信時にグローバルIPアドレスへ変換することで、限られたグローバルIPアドレスを効率的に利用できます。

NATには大きく2つのメリットがあります。

  • IPアドレスの節約: 複数の内部ホストが少数のグローバルIPアドレスを共有できるため、IPv4アドレスの枯渇問題に対応できる
  • セキュリティの向上: 内部ネットワークのIPアドレスが外部から直接見えなくなるため、外部からの不正アクセスのリスクを軽減できる

NATの方式には「スタティックNAT」「ダイナミックNAT」「NAPT(PAT)」の3種類があり、それぞれ用途と動作が異なります。

内部ネットワーク 192.168.1.10 プライベートIP ルータ NAT変換 外部ネットワーク 203.0.113.1 グローバルIP 送信元IP 192.168.1.10 送信元IP 203.0.113.1 ルータがIPアドレスを変換してから外部へ転送する

NATで使われる4つのアドレス

NATを理解するうえで最も混乱しやすいのが、4種類のアドレスの定義です。覚え方のポイントは「変換前がローカル、変換後がグローバル」「内部か外部かはホストの所属で決まる」の2軸で整理することです。

内部ローカルアドレス

内部ネットワークに所属するホストに実際に割り当てられたIPアドレスです。通常はプライベートIPアドレスが使われます。NATによる変換前のアドレスであり、ルータの内側(inside)でパケットに記載されているアドレスそのものです。

内部グローバルアドレス

外部ネットワークから見たときの、内部ホストのIPアドレスです。ISP(インターネットサービスプロバイダ)から割り当てられたグローバルIPアドレスが該当します。内部ローカルアドレスがNATによって変換された後のアドレスであり、実際にインターネット上を流れるパケットの送信元として使用されます。

外部ローカルアドレス

内部ホストが通信相手として指定する、外部ホストのIPアドレスです。内部ネットワークから見た外部ホストのアドレスであり、通常は外部グローバルアドレスと同じ値になります。外部NATが使われる特殊なケースでのみ異なる値をとります。

外部グローバルアドレス

外部ホストに実際に割り当てられているIPアドレスです。インターネット上で一意に識別されるグローバルIPアドレスそのものです。前述のとおり、一般的には外部ローカルアドレスと同じ値になります。

以下の表で4つのアドレスを整理します。

アドレス名所属変換タイミング具体例
内部ローカル内部ホスト変換前192.168.1.10
内部グローバル内部ホスト変換後203.0.113.1
外部ローカル外部ホスト変換前(内部から見た宛先)8.8.8.8
外部グローバル外部ホスト変換後(実際のアドレス)8.8.8.8

CCNA試験では「内部ローカル」と「内部グローバル」の区別が頻出です。パケットがルータを通過する前後でどのアドレスが変わるかをイメージできるようにしておくと、問題を解きやすくなります。

スタティックNAT

スタティックNATの特徴

スタティックNATは、内部ローカルアドレスと内部グローバルアドレスを1対1で固定的に対応付ける方式です。管理者が手動でマッピングを定義するため、常に同じプライベートIPアドレスが同じグローバルIPアドレスに変換されます。

スタティックNATの重要なポイントは双方向NATであることです。内部から外部への通信だけでなく、外部から内部への通信も可能になります。そのため、内部にWebサーバやメールサーバなど、外部からアクセスされる必要があるホストを設置する場合に使われます。

ただし、1つのプライベートIPアドレスに対して1つのグローバルIPアドレスを消費するため、IPアドレスの節約にはなりません。

スタティックNATの設定コマンド

設定は2ステップです。インターフェースのinside/outside指定と、変換アドレスの定義を行います。

ステップ1:インターフェースの役割を定義する

(config)# interface GigabitEthernet0/0
(config-if)# ip nat inside

(config)# interface GigabitEthernet0/1
(config-if)# ip nat outside

内部ネットワークに接続しているインターフェースにip nat inside、外部ネットワークに接続しているインターフェースにip nat outsideを設定します。この指定はダイナミックNATやPATでも共通です。

ステップ2:変換アドレスを定義する

(config)# ip nat inside source static 192.168.1.10 203.0.113.1

このコマンドで、内部ローカルアドレス192.168.1.10と内部グローバルアドレス203.0.113.1の1対1マッピングをNATテーブルに登録します。スタティックNATのエントリは設定した時点でNATテーブルに常駐し、通信の有無にかかわらず消えません。

ダイナミックNAT

ダイナミックNATの特徴

ダイナミックNATは、あらかじめ用意したアドレスプール(グローバルIPアドレスの範囲)から、通信が発生するたびに動的に内部グローバルアドレスを割り当てる方式です。

スタティックNATと同じく1対1のアドレス変換ですが、どのグローバルIPアドレスが割り当てられるかは通信のタイミングによって変わります。また、ダイナミックNATは1方向NATであり、内部から外部への通信がトリガーとなって初めてNATテーブルにエントリが作成されます。外部から内部への通信を先に開始することはできません。

アドレスプール内のグローバルIPアドレスがすべて使用中の場合、新たな内部ホストは変換できず通信に失敗します。この点がスタティックNATとの大きな違いです。

スタティックNAT(固定・双方向) 192.168.1.10 192.168.1.20 203.0.113.1 203.0.113.2 常に固定(双方向) ダイナミックNAT(動的・1方向) 192.168.1.10 192.168.1.20 192.168.1.30 アドレスプール 203.0.113.1 203.0.113.2 プール枯渇で変換不可 通信発生時にプールから動的に割り当て(1方向のみ)

ダイナミックNATの設定コマンド

設定は4ステップです。インターフェースの定義に加え、ACLとアドレスプールを作成して紐付けます。

ステップ1:インターフェースの役割を定義する

(config-if)# ip nat inside
(config-if)# ip nat outside

ステップ2:変換対象の内部ローカルアドレスをACLで指定する

(config)# access-list 1 permit 192.168.1.0 0.0.0.255

標準ACLを使い、NAT変換の対象となる内部ローカルアドレスの範囲を定義します。ここで指定したアドレスからの通信のみがNAT変換の対象になります。

ステップ3:アドレスプールを作成する

(config)# ip nat pool MYPOOL 203.0.113.1 203.0.113.10 netmask 255.255.255.0

変換先となるグローバルIPアドレスの範囲を定義します。netmaskの代わりにprefix-lengthで指定することも可能です。

ステップ4:ACLとアドレスプールを紐付ける

(config)# ip nat inside source list 1 pool MYPOOL

ステップ2のACLとステップ3のプールを紐付けることで、ダイナミックNATが有効になります。

NAPT(PAT)

NAPTとPATの名称について

NAPT(Network Address Port Translation)とPAT(Port Address Translation)は同じ技術を指します。NAPTはRFC 2663で規定された一般的な名称で、PATはCisco独自の呼び方です。CCNA試験ではPATという名称が使われることが多いですが、どちらで問われても同じものだと判断してください。

NAPTの特徴

NAPTは、複数の内部ローカルアドレスを1つの内部グローバルアドレスに変換する技術です。ダイナミックNATでは1対1の変換しかできないため、内部ホストの数だけグローバルIPアドレスが必要でした。NAPTではポート番号を組み合わせることで、1つのグローバルIPアドレスを多数の内部ホストで共有できます。

仕組みとしては、各通信セッションに異なるポート番号を割り当てることで、同一のグローバルIPアドレスであっても通信を区別します。家庭や企業のインターネット接続で最も広く使われている方式であり、IPv4アドレスの枯渇対策として非常に重要な役割を果たしています。

NAPTはダイナミックNATと同じく1方向NATであり、内部から外部への通信がトリガーとなります。

内部ホスト 192.168.1.10:1025 192.168.1.20:1026 192.168.1.30:1027 NATテーブル .10:1025 → .1:10001 .20:1026 → .1:10002 .30:1027 → .1:10003 変換後 203.0.113.1:10001 203.0.113.1:10002 203.0.113.1:10003 NAPTのポイント 同一のグローバルIPアドレス(203.0.113.1)を共有 ポート番号(10001, 10002, 10003)で各通信を識別 グローバルIPアドレスは1つで済む

NAPTの設定コマンド

NAPTの設定方法は2パターンあります。アドレスプールを使う方法と、外部インターフェースのIPアドレスを直接使う方法です。

パターン1:外部インターフェースのアドレスを使う(最も一般的)

(config)# access-list 1 permit 192.168.1.0 0.0.0.255
(config)# ip nat inside source list 1 interface GigabitEthernet0/1 overload

外部インターフェースに割り当てられたIPアドレスを内部グローバルアドレスとして使用します。グローバルIPアドレスが1つしかない環境(家庭用回線など)で最もよく使われる設定です。

パターン2:アドレスプールを使う

(config)# access-list 1 permit 192.168.1.0 0.0.0.255
(config)# ip nat pool MYPOOL 203.0.113.1 203.0.113.1 netmask 255.255.255.0
(config)# ip nat inside source list 1 pool MYPOOL overload

アドレスプールを指定する場合でも、末尾にoverloadキーワードを付けることでNAPT(PAT)として動作します。overloadを付けなければダイナミックNATとして動作するため、この違いは非常に重要です。

3方式の比較

スタティックNAT、ダイナミックNAT、NAPT(PAT)の違いを表で整理します。

項目スタティックNATダイナミックNATNAPT(PAT)
変換の対応1対1(固定)1対1(動的)多対1
通信方向双方向1方向(内部→外部)1方向(内部→外部)
ポート番号の変換なしなしあり
IPアドレス節約効果なし限定的高い
NATテーブル常時エントリあり通信時に動的作成通信時に動的作成
主な用途サーバ公開部門ごとのアドレス管理インターネット接続全般
設定キーワードstaticpooloverload

CCNA試験では「双方向か1方向か」「overloadの有無」が特に問われます。スタティックNATだけが双方向であること、overloadキーワードの有無でダイナミックNATとPATが切り替わることを確実に押さえておきましょう。

プライベートアドレスとRFC 1918

NATの前提知識として、プライベートIPアドレスの範囲はRFC 1918で定義されています。以下の3つのアドレス空間がプライベートアドレスとして予約されており、インターネット上ではルーティングされません。

クラスアドレス範囲サブネットマスクアドレス数
A10.0.0.0 〜 10.255.255.25510.0.0.0/8約1677万
B172.16.0.0 〜 172.31.255.255172.16.0.0/12約104万
C192.168.0.0 〜 192.168.255.255192.168.0.0/16約6.5万

これらのアドレスは組織内で自由に使用できますが、インターネットと通信するにはNATによるグローバルIPアドレスへの変換が必須です。IPv4のグローバルアドレスは約43億個しかないため、プライベートアドレスとNATの組み合わせでアドレスの枯渇を緩和しています。

NATテーブルの確認と管理

NATテーブルは、現在有効なアドレス変換のマッピング情報を保持しています。トラブルシューティング時にはNATテーブルの確認が基本的な切り分けポイントになります。

NATテーブルの確認

# show ip nat translations

このコマンドで、現在のNATテーブルのエントリを一覧表示できます。出力には内部ローカルアドレス、内部グローバルアドレス、外部ローカルアドレス、外部グローバルアドレスの4つが表示されます。

スタティックNATのエントリは設定が存在する限り常に表示されます。一方、ダイナミックNATやPATのエントリは通信が発生している間だけ表示され、一定時間通信がないとタイムアウトで自動的に削除されます。

NATテーブルの削除

# clear ip nat translation *

NATテーブルのエントリを手動で削除するコマンドです。アスタリスク(*)を指定するとすべてのダイナミックエントリが削除されます。スタティックNATのエントリは設定を削除しない限り消えません。

設定変更後にNATが期待どおりに動作しない場合は、古いエントリが残っている可能性があるため、clear ip nat translation *でテーブルをクリアしてから動作を確認するのが定石です。

NAT統計情報の確認

# show ip nat statistics

NATの統計情報(ヒット数、ミス数、アクティブな変換数など)を確認できます。アドレスプールの使用状況も表示されるため、ダイナミックNATでプールが枯渇していないかの確認にも使えます。

設定コマンド早見表

最後に、各方式の設定コマンドを早見表として整理します。

共通設定(全方式で必要)

(config-if)# ip nat inside    ! 内部ネットワーク側のインターフェース
(config-if)# ip nat outside   ! 外部ネットワーク側のインターフェース

スタティックNAT

(config)# ip nat inside source static <内部ローカル> <内部グローバル>

ダイナミックNAT

(config)# access-list <ACL番号> permit <ネットワーク> <ワイルドカード>
(config)# ip nat pool <プール名> <開始IP> <終了IP> netmask <マスク>
(config)# ip nat inside source list <ACL番号> pool <プール名>

NAPT(PAT):インターフェース使用

(config)# access-list <ACL番号> permit <ネットワーク> <ワイルドカード>
(config)# ip nat inside source list <ACL番号> interface <インターフェース> overload

NAPT(PAT):プール使用

(config)# access-list <ACL番号> permit <ネットワーク> <ワイルドカード>
(config)# ip nat pool <プール名> <開始IP> <終了IP> netmask <マスク>
(config)# ip nat inside source list <ACL番号> pool <プール名> overload

確認・管理コマンド

# show ip nat translations    ! NATテーブルの表示
# show ip nat statistics      ! NAT統計情報の表示
# clear ip nat translation *  ! ダイナミックNATエントリの削除
目次