頭文字D / 藤原文太風:NAT
NAT(ナット)の概要
【文太】
なぁ、拓海。お前、NATって知ってるか?
【拓海】
ん?え、あー、名前だけは聞いたことあるけど。それがどうしたんだよ親父?
【文太】
お前も、少しばかりネットワークに興味持ちだしたから、そろそろ押さえておくべきじゃねえかなって思ってな。
【拓海】
親父にしては何か珍しいな。いつも、具体的には教えてくれないのに。
【文太】
まぁ、あれだ。この手の話はなかなか自分で知る機会ってのがないからな。まぁ、あまり畏まらなくても大丈夫だ。お前にも分かるように、話してやるよ。
ところで、お前、家の台所って聞いて、自分ちの台所が思い浮かぶだろ?
【拓海】
ん?何だよ、家の台所の話か?NATじゃないのかよ。
【文太】
まぁ、おちつけ、この「台所」ってのはどこの家庭でも共通の言葉だ。それだけじゃない。「玄関」「洗面所」「トイレ」もな。まぁ、今じゃ「キッチン」とかいろいろと言い方はあるがな。
そして、俺とお前は、俺たちの家の中の「台所」を把握して利用できる。そうだな?
【拓海】
あ、あぁ。
【文太】
つまり、この呼び方でコミュニケーションが取れるのは、個々の家庭内に限られるってことになる。さっき言ったように、俺たちは俺たちの家の事として捉えるってのがいい例だ。しかも、この家庭内での呼び方は、多少の違いはあるものの、全国で共通しているもんだ。
家族の全員が同じ言葉で呼んでるから、誰でもその場所が分かるんだよ。それとよく似たのが「家庭内LAN」とか「社内LAN」っていうもんなんだ。
家庭内のネットワークで使うIPアドレスは、プライベートIPアドレスって呼ばれるもので、内部で使われるアドレスだ。例えば、「台所」が192.168.2.4/24、「トイレ」が192.168.2.7/24、「玄関」が192.168.2.1/24みたいにだな。
でだな、拓海、仮にだが、外部のネットワークに対して、いきなり、「行き先が台所」なんて呼び方をした時、それを聞いたルーターは、どの家の台所のことを言っているのか分かると思うか?
分かるわけねぇんだよ。もっと言えば、外部ネットワークじゃ、発信者がどこなのかってのも分からなくなっちまう。
理由は簡単で、同じ呼び方(アドレス)を使っちまってるからだ。通信の世界には顔のような手がかりはない。だから、分からなくなるんだ。少し堅苦しい言い方をすれば、重複したアドレスは使えないってことなんだ。
ひとこと、断っておくが、重複して利用できないのは外でも内でも同じだ。家庭内LANで利用するローカルIPアドレス(≒プライベートIPアドレス)も、その中では重複できない。
それなのに、仮に、家庭内LANのプライベートIPアドレスが外側で利用されるとなったら、必ずどっかの家のアドレスとぶつかる。(※厳密にはインターネットでは使えないようになっている。)
そこで、登場するのがNATだ。NATってのは、Network Address Translation(ネットワークアドレス変換)っていう言葉を短くしたもんで、ネットワーク上のアドレスを変換するプロセスのことを言う。
主に、ローカルネットワーク内のプライベートIPアドレスをグローバルIPアドレスに変換することを指してるが、逆に外部からのアクセスをローカルネットワークの適切な端末にルーティングすることも行ってる優れもんだ。
グローバルIPアドレスっていうのは外部で利用される重複しないアドレスだ。これは「家の住所」みたいなもんだ。
グローバルIPアドレスはプロバイダーがIANA(インターネット番号管理機関)から取得してルーターに取り付けているんだが、内部ネットワークから外部ネットワークにアクセスするときは、このグローバルIPアドレスが使われるってわけだ。
どうして付け替える必要があるかは色々理由があったんだ。例えばIPv4の枯渇問題解とかな。IPv4を節約するために内部と外部で利用できるアドレスを分けたのさ。何はともあれ、そういう技術が作られた。
そして、その技術で、行先や、どこからの通信なのかを、数に限りがあるアドレスで判別できるようにしたってことだ。こうやって、家の中のアドレス(「台所」みたいな呼び方)と家の外のアドレス(家の住所)を使い分けるんだ。
郵便局員は家の風呂やトイレの位置はわからないが、郵便物は届けてくれるだろ?同じだ。
家の中 ⇔ ルーター ⇔ 外部インターネットの世界
プライベートIPアドレス グローバルIPアドレス 宛先グローバルIPアドレス
【拓海】
あー、よくわかったよ。以外にシンプルなんだな。
【文太】
馬鹿言っちゃいけねえぜ。拓海。これは「SNAT(送信元アドレスの変換)」と「DNAT(宛先アドレスの変換)」って呼ばれる基本中の基本の部分だ。まぁ、今のお前にはちょうどいい教材だ。
NAT(ナット)の設定
【拓海】
親父、今晩、パソコン借りるぜ。シミュレーターでNATを設定してみたいんだ。
【文太】
ん、あぁ。拓海、NATの適用にはスタティックNATとダイナミックNATがある。自分で研究してみな。
【拓海】
な!?。。。たく、聞いてねーよ、そんなん。
CiscoルーターでのNAT設定(WAN: GigabitEthernet0)
前提
- 目的:内部ネットワークの端末からインターネットに出られるようにする(SNAT)
- LAN側のネットワーク:192.168.1.0/24
- LANインターフェース:Vlan 1
- WANインターフェース:GigabitEthernet0(グローバルIPが割り当てられている)
- グローバルIP:例として 203.0.113.1 を使用
! ===============================
! インターフェースの設定
! ===============================
Router(config)# interface Vlan 1
Router(config-if)# ip address 192.168.1.1 255.255.255.0
Router(config-if)# ip nat inside ! LAN側に「inside」を指定
Router(config-if)# no shutdown
Router(config-if)# exit
Router(config)# interface GigabitEthernet0
Router(config-if)# ip address 203.0.113.1 255.255.255.0
Router(config-if) ip nat outside ! WAN側に「outside」を指定
Router(config-if) no shutdown
Router(config-if)# exit
スタティックNAT
【拓海】
えっと、ひとまず、適用前の準備はできたな。じゃ、スタティックNATの方からやってみるか。内部「192.168.1.10(適当に決めたアドレス)」と外部「203.0.113.10」の変換してみるか。
! スタティックNATの設定
Router(config)# ip nat inside source static 192.168.1.10 203.0.113.10
【拓海】
親父、スタティックNATを組んだんだ。見てくれよ。
【文太】
おー、よくできてんじゃねーか。拓海、確認だが、次の意図であってるよな?
- ip nat inside source static: これがスタティックNATの設定で、特定の内部IPと外部IPを1対1で対応付ける。
- 192.168.1.10: これは変換元のIPアドレス、つまり内部ネットワークのIPアドレスだ。このIPが外部ネットワークにアクセスするときに、203.0.113.10という外部IPアドレスに変換される。
- 203.0.113.10: これは変換先の外部IPアドレス。このIPアドレスに対して外部からアクセスが来ると、それが内部の192.168.1.10に転送される。
もう少し詳しく言うと、スタティックNATじゃ、双方向変換(SNATとDNATの両方)が行われる。内部から192.168.1.10が外部にアクセスするときは、常に203.0.113.10に変換され、逆に、外部から203.0.113.10にアクセスがあった場合、必ず内部の192.168.1.10に転送される。これが双方向NAT、つまりSNAT(Source NAT)とDNAT(Destination NAT)が同時に行われるという意味だ。
スタティックNATを使うことで、内部の特定のサーバーなどに外部から直接アクセスできるようにすることができるんだ。
あとは、スタティックNATじゃ、必須ってわけじゃないが、アクセスコントロールリストを定義すると、よりセキュリティがあがるぜぇ。
Router(config)# access-list 10 permit 192.168.1.0 0.0.0.255
それから、注意点だ。
WANインターフェースに設定されているグローバルIPアドレス(203.0.113.1)とスタティックNATのグローバルIPアドレス(203.0.113.10)の違いだが、WANインターフェース に設定されている 「203.0.113.1」 これは、ルーターがインターネットに接続するために使用するIPアドレスだ。GigabitEthernet0 インターフェースに割り当てられた実際の ルーターのグローバルIPアドレスってやつさ。
対して、スタティックNATで指定した 「203.0.113.10」は、内部IPアドレス 「192.168.1.10」 を外部に公開するためのIPアドレスになる。
スタティックNATで使用するグローバルIPアドレスは、必ずしもWANインターフェースのIP(この場合 203.0.113.1)である必要はないんだ。実際、WANインターフェースとは異なるグローバルIPを使用して、特定の内部IPに対してスタティックNATを構成することができる。
どうしてWAN側インターフェースとスタティックNATのIPが違ってもいいのか?
ルーターってのは複数のグローバルIPアドレスを所有していることが多い。当然、ISPから割り当てられた複数のグローバルIPアドレスを使用することができる。そのため、WANインターフェースに設定されているIPアドレスとは別に、スタティックNATの設定で使用するIPアドレスを指定できるってことになる。
もし、ISPから 203.0.113.0/24 というサブネットを割り当てられている場合、ルーターは 203.0.113.1 をインターフェースに設定し、同じサブネット内の他のIP(例えば 203.0.113.10)をスタティックNATで使用することができるんだ。こうやって、異なるIPアドレスで内部ネットワークへのアクセスを制御することが可能になってる。
スタティックNATの目的は、内部ネットワークの特定のホストを外部ネットワークからアクセスできるようにすることだ。スタティックNATでの外部IPは、WANインターフェースに設定されたIPでも、ISPから提供された他のグローバルIPでも構わない。一応、頭に入れておけ。
ダイナミックNAT
【拓海】
次は、ダイナミックNATだ。最初の設定は変わらないから、スタティックNATの削除だけしっかりとしておこう。
! スタティックNATの削除
Router(config)# no ip nat inside source static 192.168.1.10 203.0.113.10
ダイナミックNATはACL(アクセスコントロールリスト)が必要だ。親父がさっき作ったアクセスコントロールリストをそのまま使わせてもらおう。
あとは、プールとダイナミックNATの設定だ。
! プールの作成
Router(config)#ip nat pool trueno 203.0.113.10 203.0.113.13 netmask 255.255.255.248
! ダイナミックNATの設定
Router(config)#ip nat inside source list 10 pool trueno
【拓海】
netmaskの計算、きっつ。ただ、出来なくなはいな。
ポイント1つ目はプールの作成だ。
NATプール trueno に対して、203.0.113.10 から 203.0.113.13 の 4つのIPアドレス (203.0.113.10, 203.0.113.11, 203.0.113.12, 203.0.113.13) をプールとして設定。
ポイント2つ目はサブネットマスクだ。
サブネットマスク 255.255.255.248 は、IPアドレス範囲として 203.0.113.8 から 203.0.113.15 をカバーしている。つまり、この範囲内で 8 つのIPアドレスが利用可能だ(203.0.113.8 ~ 203.0.113.15)。
結果的に、203.0.113.10 ~ 203.0.113.13 の範囲はこのサブネットマスクで問題なく使えるはず。
NATテーブルの確認は「show ip nat translations」コマンドを利用だ。
Router#show ip nat translations
【文太】
お前にしては良くできてるじゃねぇか。
但し、netmaskの部分で割りだしたIPアドレスは用途を区別してるか?内容はこうだ。最初のアドレスはネットワークアドレス、一番最後はブロードキャストアドレスだ。
- ネットワークアドレス: 203.0.113.8
- 利用可能なIPアドレス(ホストIP): 203.0.113.9 ~ 203.0.113.14
- ブロードキャストアドレス: 203.0.113.15
きちんと理解しておきな。
NATは、インターネットを利用する上で欠かせない技術の一つだ。特にIPv4アドレスの枯渇を防ぐためにも重要な役割を果たしている。
それに、ポート番号を利用したポートマッピングを使って、複数の端末からの通信を管理することもできる。これはいいぜ。1つのグローバルIPアドレスを使って、家庭内の複数の端末が同時にインターネットに接続できるんだ。
【拓海】
ポートマッピングって何だよ?
【文太】
ポートマッピングは、NATの応用技術だ。外部から通信が来たとき、ルーターがその通信を特定のプライベートIPアドレスとポート番号に振り分ける仕組みだ。似たようなものにPATがある。これも便利だ。
今日はここまでだ。下にITスクール情報を置いておく。俺は現役の時は夢の中でも秋名の山を走ってた。知識ってのは一日やそこらじゃ身にならね。負けんなよ。


