重複アドレスの変換
・内部送信元アドレス変換(PAT)と外部送信元アドレス変換の二つを実行して,重複しているアドレスにアクセスできるようにする
・外部送信元アドレス変換を実行したときに,RouterAがDNSの動作を利用することを確認する
ネットワーク構成(画像を別ウインドウで表示)
RouterAのコンフィグ
!
version 12.2
no service single-slot-reload-enable
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname RouterA
!
interface Ethernet0
ip address 10.1.1.4 255.255.255.0
ip nat inside ←NATの内側インタフェースに指定する
!
interface Serial0
ip address 192.168.1.4 255.255.255.0
ip nat outside ←NATの外側インタフェースに指定する
clockrate 500000
!
ip nat pool outsidelocal 172.16.1.1 172.16.1.255 netmask 255.255.255.0 ←172.16.1.0/24のアドレス郡をoutsidelocalという名前でプール
ip nat inside source list 1 interface Serial0 overload ←内部アドレス変換(PAT)
ip nat outside source list 1 pool outsidelocal ←外部アドレス変換

ip classless
ip route 0.0.0.0 0.0.0.0 192.168.1.5
ip http server
!
access-list 1 permit 10.1.1.0 0.0.0.255 ←10.1.1.0/24のアドレス郡をアクセス・リスト1番として定義
!
!
line con 0
transport input none
line aux 0
line vty 0 4
login
!
end
RouterBのコンフィグ
!
version 12.2
no service single-slot-reload-enable
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname RouterB
!
interface Ethernet0
ip address 192.168.0.254 255.255.255.0
!
interface Ethernet1
ip address 10.1.1.10 255.255.255.0
!
interface Serial0
ip address 192.168.1.5 255.255.255.0
no fair-queue
!
ip classless
ip http server
!
!
line con 0
transport input none
line aux 0
line vty 0 4
login
!
end
確認
アドレス変換のテクニックを使うと,LANと重複したアドレスにアクセスできます。
例えば,LANにグローバル・アドレスを割り当てたまま,インターネットにアクセスできます。
今回の例では,10.1.1.0/24というアドレス郡を割り当てたLANを,インターネットにアクセスできるようにします。
ただ,インターネット上に10.1.1.1というWebサーバーが存在し,LANのアドレスと重複しています。
そうしたアドレスにもアクセスできるようにします。

まずは,作戦を考えましょう。

●作戦
上の目的を達成するために,以下の三つの作戦を実行します。
・作戦その1…LANからインターネットにアクセスするときに送信元アドレスを変換する
・作戦その2…インターネット上の重複アドレス(10.1.1.0/24)からLANにアクセスが来たら,送信元アドレスを変換する
・作戦その3…作戦その2を実現するために,DNSの返信アドレス(名前解決のアドレス)が10.1.1.0/24に当てはまっていたら,それを172.16.1.0/24に変換する

作戦その1は,ip nat inside source〜コマンドを使います(内部送信元アドレス変換)。
作戦その2は,ip nat outside source〜コマンドを使います(外部送信元アドレス変換)。
作戦その3は,ip nat outside source〜コマンドを入れると自動的に実行されます。

●事前準備
今回の例ではDNSサーバーが必要なのでその準備をします。
DNSサーバーは,ヤマハのRTA54iというブロードバンド・ルーターの簡易DNSサーバー機能を使いました。
RTA54iはシスコ・ルーターのようにコマンドを入力できるようになっています。
今回入力したコマンドは二つ。
・dns static a www.example.jp 10.1.1.1
 (www.example.jpと10.1.1.1を対応付けるAレコードを設定)
・ip route 192.168.1.0/24 gateway 192.168.0.254
 (192.168.1.0/24あてのゲートウエイを192.168.0.254に設定)

事前準備はこれで完了です。

●設定の確認
上に設定コマンドがありますが,あらためて設定コマンドを見てみましょう。
作戦その1(IPマスカレード)の設定は,以下の二つのコマンドです。

ip nat inside source list 1 interface Serial0 overload
access-list 1 permit 10.1.1.0 0.0.0.255

これで,LAN上の10.1.1.1/24のマシンからインターネットにアクセスがあったら,送信元アドレスをSerial0に割り当てられたアドレス(192.168.1.4)に変換して送信します。

作戦その2(外部送信元アドレス変換)は,以下の三つのコマンドです。
ip nat pool outsidelocal 172.16.1.1 172.16.1.255 netmask 255.255.255.0
ip nat outside source list 1 pool outsidelocal

access-list 1 permit 10.1.1.0 0.0.0.255

これで,インターネット上の10.1.1.0/24のマシンからLANにアクセスがあったら,送信元アドレスを172.16.1.0/24のいずれかに変換して送信します。
外部アドレス変換では,このいずれかってのが問題になります。
最初のアクセスはあくまでもLAN側からなので,LANのパソコンがアクセスする時点で,インターネット上の10.1.1.0/24のアドレスを172.16.1.1〜254のどのアドレスに対応付けるのかを決めておかないといけません。

これを決めるのが,作戦その3の作業です。
これには,DNSのしくみを使います。
LANのパソコンがDNSで名前解決をしたときに,ルーターがDNS応答パケットの中身をチェックし,応答アドレスがLANと重複したアドレス(10.1.1.0/24)だったら,172.16.1.1〜254に変換しちゃいます。
DNSサーバーが「www.example.jpは10.1.1.0だよ」と答えたのを,ルーターが「172.16.1.1だよ」と変換してパソコンに教えるわけです。
以降そのパソコンは,www.example.jpにアクセスするときは,172.16.1.1(という仮アドレス)あてにアクセスするようになるというわけです。
この機能は,ip nat outside source〜コマンドを設定すると自動的にオンになります。
シスコ・ルーターってこんな機能があるんですね〜。びっくりしました。

●動作検証
作戦どおりに動作しているか,検証してみましょう。
RouterAでNATのデバッグをオンにします。

RouterA#debug ip nat

HostAからwww.example.jpあてにWebアクセスしてみます。
無事にアクセスできるはずです。
そして,以下のような表示が出ます。

03:13:27: NAT: s=10.1.1.1->192.168.1.4, d=192.168.0.1 [10080]
03:13:27: NAT: DNS resource record 10.1.1.1 -> 172.16.1.1
03:13:27: NAT: s=192.168.0.1, d=192.168.1.4->10.1.1.1 [24928]
03:13:27: NAT: s=10.1.1.1->192.168.1.4, d=172.16.1.1 [10081]
03:13:27: NAT: s=192.168.1.4, d=172.16.1.1->10.1.1.1 [10081]

DNSの応答パケットの中身を見て,www.example.jpのアドレスを10.1.1.1から172.16.1.1に変換しています。
NATテーブルを見てみましょう。

RouterA#show ip nat translations
Pro Inside global    Inside local   Outside local Outside global
tcp 192.168.1.4:1348 10.1.1.1:1348 172.16.1.1:80  10.1.1.1:80
--- ---          ---       172.16.1.1    10.1.1.1
udp 192.168.1.4:1347 10.1.1.1:1347 192.168.0.1:53 192.168.0.1:53


DNSによって10.1.1.1が172.16.1.1に対応付けられています(赤字の部分
そして,この対応を使ってWebアクセスが実行されています(青時の部分
ちなみに,一番下のUDPのエントリは,DNSのパケットが行き来したときに出来たエントリです,これは普通のIPマスカレードです。

青時のエントリに注目して,アドレス変換の内容を見てみましょう。
前半の二つの行が,内部送信元アドレス変換の対応です。
10.1.1.1を192.168.1.4に変換しているのがわかります。

Inside global    Inside local   
192.168.1.4:1348 10.1.1.1:1348

後半の二つの行が,外部送信元アドレス変換の対応です。
10.1.1.80を172.16.1.1に変換しているのがわかります。

Outside local Outside global
172.16.1.1:80 10.1.1.1:80

ip nat inside source〜コマンド(内部送信元アドレス変換)と,ip nat outside source〜コマンド(外部送信元アドレス変換)を組み合わせると,こういったこともできるわけです。

NATラボ
スタティックNAT
ダイナミックNAT
PAT(IPマスカレード)
重複アドレスの変換
あて先アドレスの分散変換