概要

シンプルなNATの設定について、設定ミスの切り分けと修正を行います。

ネットワーク構成

下記のネットワーク構成で、プライベートアドレスのHOSTからインターネット(200.1.1.0/24)へパケットを送信できるように、R1でNATの設定を行っています。

図 NAT 設定ミスの切り分けと修正 Part1 ネットワーク構成
図 NAT 設定ミスの切り分けと修正 Part1 ネットワーク構成

設定概要

R1、ISP、HOSTでのIPルーティングおよびNATの設定概要は次の通りです。

R1

interface Ethernet0/0
 ip address 192.168.54.94 255.255.255.224
 ip nat outside
!
interface Serial1/0
 ip address 192.0.2.225 255.255.255.252
 ip nat inside
!
ip route 0.0.0.0 0.0.0.0 192.0.2.226
!
ip nat pool test 202.18.231.33 202.18.231.38 netmask 255.255.255.248
ip nat inside source list 1 pool test overload
!
access-list 1 permit 192.168.64.64 0.0.0.31

ISP

interface Loopback0
 ip address 200.1.1.1 255.255.255.0
!
interface Serial0/0
 ip address 192.0.2.226 255.255.255.252
!
ip route 202.18.231.32 255.255.255.248 192.0.2.225

HOST

no ip routing
!
interface Ethernet0/0
 ip address 192.168.54.65 255.255.255.224
!
ip default-gateway 192.168.54.94

トラブルの症状

HOSTから200.1.1.1へPingを実行してもまったく応答が返ってきません。HOSTからインターネットへの接続ができない状態です。

HOST Ping

HOST#ping 200.1.1.1

Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 200.1.1.1, timeout is 2 seconds:
.....
Success rate is 0 percent (0/5)

R1からは200.1.1.1のPingの応答は返ってきます。また、HOSTからR1へのPingの応答は返ってきます。そのため、R1やISPでのルーティングそのもののには問題がないと考えられます。R1でのNATの設定に問題があると想定できます。R1でのNATの動作を確認するために、次のshowコマンドを実行しました。

  • show ip nat translation
  • show ip interface E0/0
  • show ip interface S1/0
  • show ip access-list

R1 showコマンドの結果

R1#show ip nat translation

R1#show ip interface E0/0
Ethernet0/0 is up, line protocol is up
  Internet address is 192.168.54.94/27
  Broadcast address is 255.255.255.255
  Address determined by non-volatile memory
  MTU is 1500 bytes
  Helper address is not set
  Directed broadcast forwarding is disabled
  Outgoing access list is not set
  Inbound  access list is not set
  Proxy ARP is enabled
  Local Proxy ARP is disabled
  Security level is default
  Split horizon is enabled
  ICMP redirects are always sent
  ICMP unreachables are always sent
  ICMP mask replies are never sent
  IP fast switching is enabled
  IP fast switching on the same interface is disabled
  IP Flow switching is disabled
  IP CEF switching is enabled
  IP CEF Feature Fast switching turbo vector
  IP multicast fast switching is enabled
  IP multicast distributed fast switching is disabled
  IP route-cache flags are Fast, CEF
  Router Discovery is disabled
  IP output packet accounting is disabled
  IP access violation accounting is disabled
  TCP/IP header compression is disabled
  RTP/IP header compression is disabled
  Policy routing is disabled
  Network address translation is enabled, interface in domain outside
  BGP Policy Mapping is disabled
  WCCP Redirect outbound is disabled
  WCCP Redirect inbound is disabled
  WCCP Redirect exclude is disabled
R1#show ip interface S1/0
Serial1/0 is up, line protocol is up
  Internet address is 192.0.2.225/30
  Broadcast address is 255.255.255.255
  Address determined by non-volatile memory
  MTU is 1500 bytes
  Helper address is not set
  Directed broadcast forwarding is disabled
  Outgoing access list is not set
  Inbound  access list is not set
  Proxy ARP is enabled
  Local Proxy ARP is disabled
  Security level is default
  Split horizon is enabled
  ICMP redirects are always sent
  ICMP unreachables are always sent
  ICMP mask replies are never sent
  IP fast switching is enabled
  IP fast switching on the same interface is enabled
  IP Flow switching is disabled
  IP CEF switching is enabled
  IP CEF Feature Fast switching turbo vector
  IP multicast fast switching is enabled
  IP multicast distributed fast switching is disabled
  IP route-cache flags are Fast, CEF
  Router Discovery is disabled
  IP output packet accounting is disabled
  IP access violation accounting is disabled
  TCP/IP header compression is disabled
  RTP/IP header compression is disabled
  Policy routing is disabled
  Network address translation is enabled, interface in domain inside
  BGP Policy Mapping is disabled
  WCCP Redirect outbound is disabled
  WCCP Redirect inbound is disabled
  WCCP Redirect exclude is disabled
R1#show ip access-list
Standard IP access list 1
    10 permit 192.168.64.64, wildcard bits 0.0.0.31

ここまでの情報に基づいて、トラブルの原因を突き止めてください。

問題

  • なぜHOSTからインターネット(200.1.1.1)への通信ができないのですか。
  • HOSTからインターネットへの通信ができるようにするためには、どのように設定を修正すればよいですか。

解答

なぜHOSTからインターネット(200.1.1.1)への通信ができないのですか。

NATの設定が間違っているため、アドレス変換が行われないから。NATの内部ネットワークと外部ネットワークの指定が逆になっている。また、NAT対象パケットを指定するアクセスリストの設定が間違っている。

HOSTからインターネットへの通信ができるようにするためには、どのように設定を修正すればよいですか。

R1

interface Ethernet0/0
 ip nat inside
!
interface Serial1/0
 ip nat outside
!
no access-list 1 permit 192.168.64.64 0.0.0.31
access-list 1 permit 192.168.54.64 0.0.0.31

ワンポイント

  • NATによるアドレス変換は、内部ネットワークと外部ネットワーク間で転送されるNAT対象パケットに対して行う
  • アクセスリストやルートマップによって、NAT対象パケットを指定する

解説

NATの基本的な設定についての設定ミスです。ワンポイントに挙げているNATの基本動作をしっかりと把握しておきましょう。

【NATの基本動作】

まずは、NATの基本動作のおさらいです。NATのアドレス変換は、内部ネットワークと外部ネットワーク間で転送されるNAT対象パケットに対して行います。NATの内部ネットワークと外部ネットワークの指定は、インタフェースコンフィグレーションモードで次のコマンドを使います。

(config-if)#ip nat {inside|outside}

そして、どのようにNATでアドレス変換をするかの設定がip nat inside sourceコマンドです。ip nat inside sourceコマンドの中でアクセスリストやルートマップによって、NATの対象パケットを指定することができます。アドレス変換は、ip nat inside sourceというコマンドのとおり、内部ネットワークのインタフェースで受信したNAT対象パケットの送信元IPアドレスを変換します。送信元IPアドレスをNATプール内のアドレスまたは、ルータのインタフェースのアドレスへと変換します。変換した内容は、show ip nat translationで確認できるNATテーブルに保持されます。

そして、自動的に逆方向の変換も行われるようになります。NAT変換したパケットが戻ってきた場合に元のアドレスに戻す必要があるからです。外部ネットワークで受信したパケットの送信先IPアドレスを変換します。そのときは、NATテーブルに保持されているアドレス情報に基づいて変換します。NATテーブルにないアドレスは、NATの変換を行いません。

【設定ミスの概要】

今回の設定ミスは、以下の2点です。

  • 内部ネットワーク、外部ネットワークの設定ミス
  • NAT対象パケットを指定するアクセスリストの設定ミス

【内部ネットワーク、外部ネットワークの設定ミス】

R1の設定でNATの内部ネットワーク、外部ネットワークは次のようになっています。

内部ネットワーク-S1/0
外部ネットワーク-E0/0

HOSTから送信されたパケットは、R1の外部ネットワークで受信します。すると、NATテーブルに何も情報がないので、NATの変換は行われずにそのままルーティングされます。ISPでそのパケットに返事をしようとすると、送信先IPアドレスは192.168.54.65です。ISPには、内部のプライベートアドレスのルート情報を登録していないので、ルーティングできません。ISPでdebug ip packetをしながら、HOSTからPingを実行するとその様子がよくわかります。

ISP debug ip packet

ISP#debug ip packet 
IP packet debugging is on
ISP#
*Mar  1 02:13:18.415: IP: tableid=0, s=192.168.54.65 (Serial0/0), d=200.1.1.1 (Loopback0), routed via RIB
*Mar  1 02:13:18.419: IP: s=192.168.54.65 (Serial0/0), d=200.1.1.1, len 100, rcvd 4
*Mar  1 02:13:18.423: ICMP: echo reply sent, src 200.1.1.1, dst 192.168.54.65
*Mar  1 02:13:18.423: IP: s=200.1.1.1 (local), d=192.168.54.65, len 100, unroutable
*Mar  1 02:13:20.391: IP: tableid=0, s=192.168.54.65 (Serial0/0), d=200.1.1.1 (Loopback0), routed via RIB
*Mar  1 02:13:20.395: IP: s=192.168.54.65 (Serial0/0), d=200.1.1.1, len 100, rcvd 4
*Mar  1 02:13:20.399: ICMP: echo reply sent, src 200.1.1.1, dst 192.168.54.65
*Mar  1 02:13:20.399: IP: s=200.1.1.1 (local), d=192.168.54.65, len 100, unroutable
*Mar  1 02:13:22.399: IP: tableid=0, s=192.168.54.65 (Serial0/0), d=200.1.1.1 (Loopback0), routed via RIB
*Mar  1 02:13:22.403: IP: s=192.168.54.65 (Serial0/0), d=200.1.1.1, len 100, rcvd 4
*Mar  1 02:13:22.407: ICMP: echo reply sent, src 200.1.1.1, dst 192.168.54.65
*Mar  1 02:13:22.407: IP: s=200.1.1.1 (local), d=192.168.54.65, len 100, unroutable
*Mar  1 02:13:24.371: IP: tableid=0, s=192.168.54.65 (Serial0/0), d=200.1.1.1 (Loopback0), routed via RIB
*Mar  1 02:13:24.375: IP: s=192.168.54.65 (Serial0/0), d=200.1.1.1, len 100, rcvd 4
*Mar  1 02:13:24.379: ICMP: echo reply sent, src 200.1.1.1, dst 192.168.54.65
*Mar  1 02:13:24.379: IP: s=200.1.1.1 (local), d=192.168.54.65, len 100, unroutable
*Mar  1 02:13:26.411: IP: tableid=0, s=192.168.54.65 (Serial0/0), d=200.1.1.1 (Loopback0), routed via RIB
*Mar  1 02:13:26.415: IP: s=192.168.54.65 (Serial0/0), d=200.1.1.1, len 100, rcvd 4
*Mar  1 02:13:26.419: ICMP: echo reply sent, src 200.1.1.1, dst 192.168.54.65
*Mar  1 02:13:26.419: IP: s=200.1.1.1 (local), d=192.168.54.65, len 100, unroutable

HOSTからISPあてのパケットがNAT変換されるように、R1で内部ネットワーク、外部ネットワークを正しく設定します。

R1

interface Ethernet0/0
 ip nat inside
!
interface Serial1/0
 ip nat outside

【NAT対象パケットを指定するアクセスリストの設定ミス】

内部ネットワーク、外部ネットワークを正しく設定しても、まだNAT変換が行われません。R1でNAT対象パケットを指定するためのアクセスリストの設定が間違っています。R1でNATの設定と関連づけているアクセスリストを確認すると、次のようになっています。

R1

R1#show run | include nat
 ip nat inside
 ip nat outside
ip nat pool test 202.18.231.33 202.18.231.38 netmask 255.255.255.248
ip nat inside source list 1 pool test overload
R1#show ip access-lists 
Standard IP access list 1
    10 permit 192.168.64.64, wildcard bits 0.0.0.31

NAT対象パケットとして、アクセスリスト1を関連づけています。アクセスリスト1の中身が送信元IPアドレス 192.168.64.64 ~ 192.168.64.95 をpermitしています。HOSTのIPアドレスは192.168.54.65なので、アクセスリスト1にマッチせずNAT変換されません。R1で次のようにアクセスリストを修正する必要があります。

R1 アクセスリストの修正

no access-list 1 permit 192.168.64.64 0.0.0.31
access-list 1 permit 192.168.54.64 0.0.0.31

アクセスリストを修正して、HOSTから送信されたパケットがNAT対象パケットになれば、NAT変換が正しく行われるようになります。HOSTからISPまでの通信ができるようになります。R1でdebug ip natをしながらHOSTからPingを実行すると、次のような出力になります。また、NATテーブルにも変換したアドレス情報が登録されていることが確認できます。

R1 debug ip nat/show ip nat translations

R1#debug ip nat 
IP NAT debugging is on
R1#
*Mar  1 02:28:55.675: NAT*: s=192.168.54.65->202.18.231.33, d=200.1.1.1 [20]
*Mar  1 02:28:55.763: NAT*: s=200.1.1.1, d=202.18.231.33->192.168.54.65 [20]
*Mar  1 02:28:55.775: NAT*: s=192.168.54.65->202.18.231.33, d=200.1.1.1 [21]
*Mar  1 02:28:55.803: NAT*: s=200.1.1.1, d=202.18.231.33->192.168.54.65 [21]
*Mar  1 02:28:55.815: NAT*: s=192.168.54.65->202.18.231.33, d=200.1.1.1 [22]
*Mar  1 02:28:55.819: NAT*: s=200.1.1.1, d=202.18.231.33->192.168.54.65 [22]
*Mar  1 02:28:55.823: NAT*: s=192.168.54.65->202.18.231.33, d=200.1.1.1 [23]
*Mar  1 02:28:55.827: NAT*: s=200.1.1.1, d=202.18.231.33->192.168.54.65 [23]
*Mar  1 02:28:55.835: NAT*: s=192.168.54.65->202.18.231.33, d=200.1.1.1 [24]
*Mar  1 02:28:55.835: NAT*: s=200.1.1.1, d=202.18.231.33->192.168.54.65 [24]
R1#show ip nat translations 
Pro Inside global      Inside local       Outside local      Outside global
icmp 202.18.231.33:5   192.168.54.65:5    200.1.1.1:5        200.1.1.1:5

【設定ミスのまとめ】

NATのトラブルでの設定ミスをまとめたものが次の図です。

図 NAT 設定ミスの切り分けと修正 Part1 設定ミスのまとめ