元ITインフラ系エンジニアの日記

元ITインフラ系エンジニアがITのことや投資のこと、コンサルのこと等を綴ります。

宛先NATの設定と反省

 

ブログタイトルが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

 

・構成図

f:id:ring_bell:20150930220349j:plain

 

・設定内容

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 への通信もOKping 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の以下のサイトが非常に役にたった。

www.cisco.com

 

コマンドアクション

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)で設定することにした。