NAT(Network Address Translation)
[NATとは]
IPアドレスを変換する技術。
主に内部(LAN)内のホストが外部(インターネット)へ通信する際に
プライベートIPをグローバルIPへ変換する技術として使われる。
※インターネットにアクセスするにはグローバルIPが必要
グローバルIPの取得にはお金がかかる(大体1ipにつき9kくらい?)ことと
そもそもグローバルIPの数に限りがあることからNAT(NAPT)によって
プライベートIPをグローバルIPへ変換しインターネットにアクセスする。
インターネットアクセス以外にプライベートIPの重複回避や
外部からアドレス情報を隠蔽するために使用されるパターンもある。
[NAT用語]
・内部ローカルアドレス(Inside local)
→内部ネットワークのホストに割り当てられるIPアドレス
(つまり変換前のアドレス、LAN内のプライベートIP)
・内部グローバルアドレス(Inside global)
→外部ネットワークから見た、内部ネットワークのホストのIPアドレス。
(つまり変換後のアドレス、グローバルIP)
・外部ローカルアドレス(Outside local)
→内部ネットワークから見た、外部ネットワークのホストのIPアドレス。
・外部グローバルアドレス(Outside global)
→外部ネットワークのホストに割り当てられるIPアドレス。
※内部と外部で考え方が変わるので注意が必要。
・スタティックNAT
→1対1でアドレス変換を行う
・ダイナミックNAT
→1対多もしくは多対多で変換を行う。
[NAT動作]
送信元IPアドレス192.168.1.1を1.1.1.100に変換する
スタティックNATの動作例は下記のとおり。
・192.168.1.1のPCから1.1.1.1のサーバへ通信
・NATルータにより送信元アドレス192.168.1.1を1.1.1.100に変換
・1.1.1.1のサーバがパケット着信。
送信元と送信先アドレスを逆転させ応答パケットを送信。
・NATルータにより送信先アドレス1.1.1.100を192.168.1.1へ変換
・192.168.1.1のPCが応答パケット着信
ポイントは上記のようなInsideSourceでNATを行う場合、
Inside側で着信した場合は送信元アドレス変換、
Outside側で着信した場合は送信先アドレス変換となること。
またInsideから着信した場合とOutsideで着信した場合で
RoutingとNATの処理順序が異なるため注意。
慣れないうちは頭の中でパケットフローを考えると混乱しやすい。
ダイナミックNATも上記と同じような動作をする・
しかしダイナミックNATにも欠点があり、例えばグローバルIPが3つある場合
インターネット向けに通信できるのは3ホストまでとなってしまう。
この制限を回避するため、グローバルIPとポート番号を紐づけて
NAT変換を行う技術をNAPTもしくはPATと呼ぶ。
インターネット接続時はNAPTを使用するのが一般的。
[NATコンフィグ]
スタティックNAT
①1対1でNAT変換する「ローカルアドレス」と「グローバルアドレス」を定義
ip nat [ inside|outside] source static local-ip global-ip
※セグメント毎変換する場合は以下のように「network」コマンドを入れる
ip nat [ inside|outside] source static network local-segment global-segment
②インターフェースに「内部」または「外部」を定義
interface X/X
ip nat [ inside | outside ]
EX)
ip nat inside source static 192.168.1.1 1.1.1.100
interface fa0/0
ip address 192.168.1.254 255.255.255.0
ip nat inside
no shut
interface fa0/1
ip address 1.1.1.254 255.255.255.0
ip nat outside
no shut
end
ダイナミックNAT
①NAT変換後アドレスのプールを作成
ip nat pool pool_name start-ip end-ip [netmask mask | prefix-length length]
※interfaceアドレスへ変換する場合は不要
②NAT対象アドレスの範囲をACLで定義
(standard)access-list number permit source wildcard
(extended)access-list number permit protocol source wildcard [port] destination wildcard [port]
③変換前と変換後のACLとNATpoolを紐づける。
NAPTする場合は末尾にoverloadをつける
ip nat [ inside | outside ] source list X [ pool XXX | interface XXX ] [overload]
④インターフェースに「内部」または「外部」を定義
interface X/X
ip nat [ inside | outside ]
EX)
ip nat pool NAT1 192.168.1.1 192.168.1.254 netmask 255.255.255.0
access-list 101 permit ip 192.168.1.1 0.0.0.255 any
ip nat inside source list 101 pool NAT1
interface fa0/0
ip address 192.168.1.254 255.255.255.0
ip nat inside
no shut
interface fa0/1
ip address 1.1.1.254 255.255.255.0
ip nat outside
no shut
end
※ちなみにダイナミックNATはACLに合致することが
NATテーブル登録のトリガーとなります。
上記の例だと、Inside側から着信した場合はNATが掛かりますが
Outside側からの着信だとACLに引っかからなく、NATテーブルへの
登録が発生しないためNATが掛かりません。
(先日この事象にはまってしまいましたので備忘メモ。。)