【Cisco】双方向NATとは?~設定例やNATの処理順序について詳しく解説~
初めまして。クレスコ・デジタルテクノロジーズのブルーノです。
2023年に入社し、インフラエンジニアとして金融系システムのネットワーク維持運用業務に1年間携わってまいりました。本記事では私の携わっているシステムでもたびたび設定する機会のある、双方向NATについて紹介します。IPアドレスを変換する機能であるNATを双方向に設定する理由や、具体的な設定例、NATの処理順序についても併せて解説しますので、最後まで目を通していただけましたら幸いです。
■あわせて読まれている資料:
目次[非表示]
- 1.NAT(Network Address Translation)とは?
- 2.双方向NATのメリット
- 3.双方向NATとは
- 4.双方向NATの設定例
- 5.パケットの処理順序
- 6.まとめ
- 7.引用元
NAT(Network Address Translation)とは?
本記事では双方向NATについて解説しますが、そもそもNATとはどのような機能でしょうか。一言でいうとIPアドレスを変換する技術です。
企業ネットワークのようなプライベートアドレスで構築されたネットワーク(LAN)からグローバルアドレスで構築されたインターネット(WAN)に通信を行うことがあると思います。しかしプライベートアドレスのままではグローバルアドレスに対して通信を行うことができません。通信がインターネット(WAN)に出ていく際にプライベートアドレスをグローバルアドレスに変換する必要があります。
このアドレス変換技術をNATと呼びます。
具体的には、図①のようにホストの送信元IPアドレスをプライベートアドレスからグローバルアドレスに変換することでインターネット上での通信を可能にしています。
※図①
このように書くとインターネットに接続する環境でのみNATが使われると思いがちですが、実はインターネットの接続だけでなく、異なるLAN間の通信でアドレスを変換する際にも使うことができます。
一方のネットワークを内部、もう一方のネットワークを外部と見立て、プライベートアドレス同士でもNATによるアドレスの変換を行うことが可能です。
今回はプライベートアドレス同士のネットワークに対して双方向NATを設定して通信を行う場面を想定して紹介します。
双方向NATのメリット
まず初めに、双方向NATを設定するとどのようなメリットがあるのか、大きく分けて2点紹介します。
1点目は、異なるシステム間で通信を行う際に、アドレス情報の漏洩を防ぐことができます。
図②ではA社構築のネットワークとB社構築のネットワークがルータを挟んで繋がっています。このルータに双方向NATを設定すると次のようになります。
ホストAはホストBを別のアドレスであるB.B.B.Bと認識していることで、本当のアドレスであるZ.Z.Z.Zを知らない状態で通信をすることができます。反対にホストBもホストAを別のアドレスであるX.X.X.Xと認識しているため、本当のアドレスであるA.A.A.Aを知らずに通信ができます。
※アルファベットはIPアドレスを表しています。
後ほど細かく紹介しますが、このように双方向NATによってホストが互いのIPアドレスを知らずに通信を行うことができるようになります。そのため、アドレス情報の漏洩を防ぎセキュリティの向上につながります。
※図②
2点目は、責任分界点が明確になります。
責任分界点とは、複数の運用主体(会社など)が構築しているネットワークが相互に接続している環境において、各主体の責任が及ぶ範囲を切り分ける境界を指します。
双方向NATではルータを挟んで内部と外部にネットワークを分け、互いに相手側のネットワーク設計を意識せずNATルータまでのネットワークを構築することで通信が可能です。
図③を見ると図②と同じくA社とB社が構築しているネットワークがルータを挟んでつながっています。このルータに双方向NATの設定をすることで、A社はB社の、B社はA社のネットワークに左右されることなく、それぞれの会社の設計方針に則った構築を行うことができます。つまりNATルータがA社とB社の責任範囲を分けていることになります。
双方向NATによって、NATルータを挟んで内部と外部にネットワークを分けることで、明確に責任分界点を定めることができ、障害発生時などの切り分けを行う際に責任の所在を判断しやすくなるのです。
図③
これらのメリットから、多くのネットワークで双方向NATは使用されているのです。
1点注意しなければならないのは、構築時にNATルータを設定する際の情報の取り扱いです。NATルータにはアドレスの変換設定を入れるため、他社側ホストのアドレスを含めた設定が必要になります。内部、外部関係なくすべてのアドレスを知ることとなるため、情報の取り扱いには大変注意して管理を行わなければなりません。
双方向NATとは
いよいよ本題です。実際に双方向 NATとはどのようなものか見ていきましょう。
双方向NATではアドレス変換を行いたいネットワークを外部ネットワークと内部ネットワークに分けて互いに設定を行います。Cisco機器では以下のように、スタティックNATをinside側とoutside側に設定する2つのコマンドで実現できます。
〇ip nat inside source static A.A.A.A X.X.X.X(内部ネットワークでのNAT変換)
〇ip nat outside source static Z.Z.Z.Z B.B.B.B(外部ネットワークでのNAT変換)
※アルファベット部分はIPアドレスが入ります。
図④は上記設定時のアドレス変換の流れを記載しています。
※図④
inside natでは以下のアドレスを変換します。(画像赤色箇所)
- 内部ホストの送信元アドレス
- 外部ホストの宛先アドレス
outside natでは以下のアドレスを変換します。(画像青色箇所)
- 内部ホストの宛先アドレス
- 外部ホストの送信元アドレス
上記のアドレス変換が行われることで、「内部ホストは外部ホストの実アドレス(Z.Z.Z.Z)をB.B.B.Bと認識して通信する」「外部ホストは内部ホストの実アドレス(A.A.A.A)をX.X.X.Xと認識して通信する」こととなり、内部ホストと外部ホストは互いの実アドレスを知らない状態で通信を行うことが可能です。
私たちが実際にネットワーク構築する際の考え方としては、ホストから見るとNATを設定したルータがそのまま相手ホストであるように見えているというイメージです。ルータをまたいだ相手側のネットワーク状態に左右されずに通信を行うことができるのです。
双方向NATの設定例
以下構成(図⑤)での具体的な設定例をみていきましょう。
※図⑤
<Cisco機器の設定例>
RT(config)#ip nat inside source static 192.168.1.1 172.16.1.100 ←inside nat設定
RT(config)#ip nat outside source static 172.16.1.1 192.168.1.100 ←outside nat設定
RT(config)#interface GigabitEthernet0/0
RT(config-if)#ip address 192.168.1.254 255.255.255.0
RT(config-if)#ip nat inside ←inside側のインターフェースに適用
RT(config)#interface GigabitEthernet0/1
RT(config-if)#ip address 172.16.1.254 255.255.255.0
RT(config-if)#ip nat outside ←outside側のインターフェースに適用
RT(config)#ip route 192.168.1.100 255.255.255.255 GigabitEthernet0/1 ←スタティックルートを設定 ※1
設定の確認はshow ip nat translationsコマンドに表示されます。
RT1#show ip nat translations
Pro Inside global Inside local Outside local Outside global
--- 172.16.1.100 192.168.1.1 --- ---
--- --- --- 192.168.1.100 172.16.1.1
icmp 172.16.1.100 192.168.1.1 192.168.1.100 172.16.1.1
←通信を行うと変換テーブルに追加される(通信をしていないと一定時間で消えるので注意)
※1 inside⇒outsideへのスタティックルートを設定しています。outside⇒insideの設定はしません。詳しくは この後「パケットの処理順序」で解説
パケットの処理順序
先ほどの設定例の最後にスタティックルートの記載がありました。それも内部ホストから見た外部ホストアドレス向けのルートだけが設定されています。なぜこのスタティックルートが必要なのか、NATの設定が入っているルータに着信したパケットの処理順序を見ていくとわかります。
Cisco機器ではNATが設定されている機器におけるパケットの処理順序が決まっています。着信したパケットを以下のような順番で処理しています(Ciscoサイトより引用して表作成)。
ポイントは赤文字部分です。inside側とoutside側で順番が異なることがわかります。
inside側に着信したパケットは先にルーティングを行ってからNAT、outside側に着信したパケットは先にNATを行ってからルーティングと処理順序が異なっています(Cisco機器での例になりますので、他ベンダの機器では都度確認してください)。
スタティックルートの設定が無い場合、先にルーティングが行われるinside側からの通信では、宛先である(192.168.1.100)へのパケットが同じ192.168.1.0/24のセグメントであるinside側のGi0/0から出力しようとしてしまい、通信に失敗してしまいます。(図⑥)
※図⑥
一方で、スタティックルートの設定をしていると、(192.168.1.100)はGi0/1から出力すればよいというルーティングをしたうえでNATによって宛先(192.168.1.100)が(172.16.1.1)に変換され、正しく通信を行うことができます。(図⑦)
※図⑦
外部ネットワークからの通信の流れも見てみましょう。
outside側では先にNATが行われるため、宛先(172.16.1.100)が(192.168.1.1)に変換され、その後ルーティングされます。そのためスタティックルートの設定は不要になります。(図⑧)
※図⑧
まとめ
今回は双方向NATについて解説しました。NATでは送信元アドレス、宛先アドレスの扱いが非常に大切です。パケットの処理の流れをかみ砕いてみたことで理解が深まったのではないでしょうか。
本記事がお役に立ちましたら幸いです。最後まで目を通していただきありがとうございました。
次回以降のDT-blogもお楽しみに!
■サービス資料一覧はこちら↓
引用元
・NAT処理順序
https://www.cisco.com/c/ja_jp/support/docs/ip/network-address-translation-nat/6209-5.html
・責任分界点
https://e-words.jp/w/%E8%B2%AC%E4%BB%BB%E5%88%86%E7%95%8C%E7%82%B9.html
【参考文献】
・NAT
https://www.netvisionacademy.com/column/593/
https://www.infraexpert.com/study/ip10.html
・双方向NAT
https://www.infraexpert.com/study/natz7.html
https://itengine.seesaa.net/article/443067811.html
・図のアイコン
https://www.cisco.com/c/en/us/about/brand-center/network-topology-icons.html