| 確認 |
アドレス変換のテクニックを使うと,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〜コマンド(外部送信元アドレス変換)を組み合わせると,こういったこともできるわけです。
|
|