ブログタイトルがITインフラ系エンジニアの日記であるのに、ほとんどITに関する記事が無い。今回は久しぶりにIT(ネットワーク)に関する記事を書く。
先日、業務で宛先NATを設定することがあった。かなり手こずったので整理する。
・要件
192.168.1.0/24 と 192.168.2.0/24 のセグメントにあるホストから 172.16.1.11 に対する通信がある(Syslogの送信やファイル共有を行う予定)。
172.16.1.11 への通信は、それぞれ、192.168.1.0/24 のホストからは192.168.1.254、192.168.2.0/24 のホストからは192.168.2.254 で行う(HostA、Bはそれぞれ別のネットワークにも接続しており、また実際は100台近くあるため、端末上にスタティックルートを設定したくない)。
・機器
機器は Cisco 1812J
・構成図
・設定内容
Server
ip address 172.16.1.11 /24
default-gateway 172.16.101
HostA
ip address 192.168.1.1 /24
default-gateway 192.168.1.30
HostB
ip address 192.168.2.1 /24
default-gateway 192.168.2.30
Router
E1
ip address 172.16.1.101 255.255.255.0
ip nat outside
E2
ip address 192.168.1.30 255.255.255.0
ip nat inside
E3
ip address 192.168.2.30 255.255.255.0
ip nat inside
NAT
access-list 1 permit 172.16.1.11 0.0.0.0
access-list 2 permit 172.16.1.11 0.0.0.0
ip nat pool Net1 192.168.1.254 192.168.1.254 netmask 255.255.255.0
ip nat pool Net2 192.168.2.254 192.168.2.254 netmask 255.255.255.0
ip nat outside source list 1 pool Net1 add-route
ip nat outside source list 2 pool Net2 add-route
・結果
① HostA -> Server への通信はOK(ping 192.168.1.254)
② HostB -> Server への通信もOK(ping 192.168.2.254)
しかし、Server側でWiresharkを使ってパケットキャプチャしたところ、①の通信は拾えていたが、②の通信は拾えていなかった。
RouterでNATテーブルを確認(show ip nat translation)すると、以下のようになっていた(実際は横にならんで表示される)。
inside Local :-----
inside Global:-----
outside Local :192.168.1.254
outside Global :172.16.1.11
inside Local :192.168.1.1
inside Global:192.168.1.1
outside Local :192.168.1.254
outside Global :172.16.1.11
NATテーブルでは「192.168.1.254」と「172.16.1.11」の変換しか登録されていなかった。なぜ②HostBからのpingが通ったのかは不明だ。
ファイル共有を試してみたところ、HostAからはできたが、HostBからはできなかった。やはりきちんと通信ができていないようだ。
そこで、HostBからのPingを以下のようにした。
ping 192.168.1.254
これも通った。NATテーブルを確認すると、以下のエントリーが追加されていた。この動きは理解できる。
inside Local :192.168.2.1
inside Global:192.168.2.1
outside Local :192.168.1.254
outside Global :172.16.1.11
また、ファイル共有ができるようになった。
・反省、感想
ルーターで送信元NATはよく行っていたし、Firewallで宛先NATをしたことも多々ある。しかし、ルーターで宛先NATを行う経験は初めてだったかもしれない。
改めて、内部ローカル/グローバル、外部ローカル/グローバルについて整理することができた。
また、特にCiscoの以下のサイトが非常に役にたった。
コマンド アクション ip nat outside source list
外部から内部へ送られる IP パケットの送信元が変換される。
内部から外部へ送られる IP パケットの宛先が変換される。
ip nat inside source list
内部から外部へ送られる IP パケットの送信元が変換される。
外部から内部へ送られる IP パケットの宛先が変換される。
パケットの向きでどちらでも宛先NATができるが、どちらを inside/outside に設定するかでかなり悩んだ。結果として、通信を開始する方をinside とすることとした。
今回の設定では、「192.168.2.0/24」のセグメントにあるホストが複数のネットワークに接続している場合、「192.168.1.254」のルートを設定してあげる必要があるという結果になった。1台や2台であれば問題ないが、100台以上になると厳しい。
やはり理想としては「ping 192.168.2.254」として宛先NATでき、ファイル共有などの通信ができるようにしたい。
結局、ルーターではできないのかもしれないとあきらめ、Firewall(SSG)で設定することにした。