【NAT】生存タイムアウト時間(Ciscoルータ)について

NAT テーブルのエントリーには、生存時間(タイムアウト)があります。通信がないまま時間がたつと、エントリーは NAT テーブルから消えます。タイムアウトの値は、ICMP や TCP などのプロトコルや、TCP の状態によって変わります。この記事では、Cisco ルータで、プロトコルごとにタイムアウトがどう変わるかを確認します。

この記事でわかること
  1. ICMP のエントリーのタイムアウトは 60 秒
  2. TCP のエントリーは、3 ウェイ ハンドシェイクが完了すると 24 時間、FIN や RST で残り 60 秒になること
  3. show ip nat translations verbose でタイムアウトと残り時間を読む方法

検証構成

前回の スタティック NAT の構成をもとに検証します。R3 は、R2 の 192.168.23.2 を 192.168.34.3 に変換します。

Inside Outside R2 R3 R4 Lo 2.2.2.2/32 Lo 4.4.4.4/32 192.168.23.0/24 192.168.34.0/24 .2 .3 .3 .4 Fa0/0.23 Fa0/0.34 ip nat inside ip nat outside 送信元192.168.23.2宛先192.168.34.4 送信元192.168.34.3宛先192.168.34.4 R3 はスタティック NAT で 192.168.23.2 を 192.168.34.3 に変換する
図1 検証構成(スタティック NAT)

ICMP 通信のタイムアウト

ICMP のエントリーのタイムアウトは 60 秒です。R2 から R4 へ ping を実行し、R3 の NAT テーブルを show ip nat translations で確認します。

R2

R2#ping 192.168.34.4
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.34.4, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 16/26/40 ms

R3

R3#sh ip nat translations
Pro Inside global      Inside local       Outside local      Outside global
icmp 192.168.34.3:6    192.168.23.2:6     192.168.34.4:6     192.168.34.4:6
--- 192.168.34.3       192.168.23.2       ---                —

プロトコルが icmp のエントリーが登録されました。show ip nat translations verbose で、このエントリーのタイムアウトを確認できます。

R3

R3#sh ip nat translations verbose 
Pro Inside global      Inside local       Outside local      Outside global
icmp 192.168.34.3:6    192.168.23.2:6     192.168.34.4:6     192.168.34.4:6
    create 00:00:08, use 00:00:00 timeout:60000, left 00:00:59, 
    flags: 
extended, use_count: 0, entry-id: 10, lc_entries: 0
--- 192.168.34.3       192.168.23.2       ---                ---
    create 00:49:58, use 00:00:08 timeout:0, 
    flags: 
static, use_count: 1, entry-id: 1, lc_entries: 0
表示意味
create 00:00:08エントリーが作られてからの時間
use 00:00:00最後に使われてからの時間
timeout:60000タイムアウトの値。単位はミリ秒で、60000 = 60 秒
left 00:00:59エントリーが消えるまでの残り時間(時:分:秒)
extendedプロトコルと番号まで含む、通信ごとのエントリー
static / timeout:0スタティック NAT の設定によるエントリー。タイムアウトせず、消えない

このままこの通信がなければ、残り 59 秒でこのエントリーは削除されます。

TCP 通信のタイムアウト

TCP のエントリーは、状態によってタイムアウトが変わります。SYN を見て作られたばかりのエントリーは 60 秒で、3 ウェイ ハンドシェイクが完了すると 24 時間になります。その後、セッションが終了(FIN)したり、リセット(RST)されたりすると、残り時間が 60 秒になります。

SYN を受信 3 ウェイ ハンドシェイク中 60 秒 ハンドシェイク完了 通信中 24 時間 FIN・RST を受信 セッション終了 残り 60 秒 残り時間(left)が 0 になると、エントリーは NAT テーブルから消える
図2 TCP のエントリーのタイムアウトの変化

3 ウェイ ハンドシェイクの完了

R2 から R4 へ Telnet してみます。

R2

R2#telnet 192.168.34.4
Trying 192.168.34.4 ... Open

User Access Verification

Password:

パスワードを聞かれているので、TCP の 3 ウェイ ハンドシェイクは完了しています。R3 の NAT テーブルを確認します。

R3

R3#sh ip nat translations         
Pro Inside global      Inside local       Outside local      Outside global
tcp 192.168.34.3:44717 192.168.23.2:44717 192.168.34.4:23    192.168.34.4:23
--- 192.168.34.3       192.168.23.2       ---                —

R3

R3#sh ip nat translations verbose 
Pro Inside global      Inside local       Outside local      Outside global
tcp 192.168.34.3:44717 192.168.23.2:44717 192.168.34.4:23    192.168.34.4:23
    create 00:00:10, use 00:00:10 timeout:86400000, left 23:59:49, 
    flags: 
extended, use_count: 0, entry-id: 15, lc_entries: 0
--- 192.168.34.3       192.168.23.2       ---                ---
    create 02:16:44, use 00:00:10 timeout:0, 
    flags: 
static, use_count: 1, entry-id: 1, lc_entries: 0

timeout:86400000(ミリ秒)は 24 時間です。残り時間も 23:59:49 で、タイムアウトが 24 時間になっていることが確認できます。

セッションの終了(FIN)

R2 から R4 へ Telnet し、パスワードを3回まちがえます。これでセッションが終わり、R4 から TCP の FIN パケットが送られます。

パケットキャプチャ(Wireshark):Telnet のセッション終了画面イメージ
SourceDestinationProtocolLengthInfo
192.168.34.4192.168.34.3TCP6423 → 22696 [FIN, PSH, ACK] Seq=116 Ack=38
192.168.34.3192.168.34.4TCP5822696 → 23 [ACK] Seq=38 Ack=117 Win=4013 Len=0
192.168.34.3192.168.34.4TCP5822696 → 23 [FIN, PSH, ACK] Seq=38 Ack=117
192.168.34.4192.168.34.3TCP6423 → 22696 [ACK] Seq=117 Ack=39 Win=4091 Len=0
図3 R4 から FIN が送られ、セッションが終わる(実際の画面ではなく、表示内容のポイントを示したイメージです)

R4(192.168.34.4)が先に FIN を送り、R2 側(変換後の 192.168.34.3)も FIN を返して、セッションが終わっています。R3 の NAT テーブルを確認します。

R3

R3#sh ip nat translations         
Pro Inside global      Inside local       Outside local      Outside global
tcp 192.168.34.3:40543 192.168.23.2:40543 192.168.34.4:23    192.168.34.4:23
--- 192.168.34.3       192.168.23.2       —

R3

R3#sh ip nat translations verbose 
Pro Inside global      Inside local       Outside local      Outside global
tcp 192.168.34.3:40543 192.168.23.2:40543 192.168.34.4:23    192.168.34.4:23
    create 00:00:09, use 00:00:01 timeout:86400000, left 00:00:58, 
    flags: 
extended, timing-out, use_count: 0, entry-id: 18, lc_entries: 0
--- 192.168.34.3       192.168.23.2       ---                ---
    create 02:28:45, use 00:00:09 timeout:0, 
    flags: 
static, use_count: 1, entry-id: 1, lc_entries: 0

timeout:86400000 は 24 時間のままですが、残り時間は 58 秒(left 00:00:58)になっています。flags にも timing-out(タイムアウト待ち)が表示されています。TCP のセッションが終了すると、エントリーの残り時間が 60 秒に変わります。

セッションのリセット(RST)

セッションが終了したときと同じように、TCP のセッションがリセットされたときも、残り時間が 60 秒に変わります。R2 から R4 へ、ポート 80 番を指定して Telnet します。R4 は TCP 80 番を受け付ける設定をしていないので、TCP のセッションはリセットされます。

R2

R2#telnet 192.168.34.4 80
Trying 192.168.34.4, 80 ... 
% Connection refused by remote host

パケットキャプチャを見ると、R2 側の SYN に対して、R4 から TCP の RST が送られています。

パケットキャプチャ(Wireshark):80 番への接続のリセット画面イメージ
SourceDestinationProtocolLengthInfo
192.168.34.3192.168.34.4TCP6226246 → 80 [SYN] Seq=0 Win=4128 Len=0 MSS=536
192.168.34.4192.168.34.3TCP6480 → 26246 [RST, ACK] Seq=1 Ack=1 Win=0 Len=0
図4 SYN に対して R4 が RST を返す(実際の画面ではなく、表示内容のポイントを示したイメージです)

R3 の NAT テーブルを確認します。

R3

R3#sh ip nat translations         
Pro Inside global      Inside local       Outside local      Outside global
tcp 192.168.34.3:46791 192.168.23.2:46791 192.168.34.4:80    192.168.34.4:80
--- 192.168.34.3       192.168.23.2       ---                ---

R3

R3#sh ip nat translations verbose 
Pro Inside global      Inside local       Outside local      Outside global
tcp 192.168.34.3:46791 192.168.23.2:46791 192.168.34.4:80    192.168.34.4:80
    create 00:00:01, use 00:00:01 timeout:86400000, left 00:00:58, 
    flags: 
extended, timing-out, use_count: 0, entry-id: 22, lc_entries: 0
--- 192.168.34.3       192.168.23.2       ---                ---
    create 02:47:03, use 00:00:01 timeout:0, 
    flags: 
static, use_count: 1, entry-id: 1, lc_entries: 0

残り時間が 58 秒(left 00:00:58)になっています。TCP のセッションがリセットされると、エントリーの残り時間が 60 秒になります。

タイムアウトの既定値と変更

Cisco ルータの NAT のタイムアウトの既定値は次のとおりです。ip nat translation コマンドで変更できます。

コマンド対象既定値
ip nat translation timeoutoverload なしのダイナミック NAT のエントリー86400 秒(24 時間)
ip nat translation icmp-timeoutICMP60 秒
ip nat translation syn-timeoutSYN を見た直後の TCP60 秒
ip nat translation tcp-timeoutTCP86400 秒(24 時間)
ip nat translation finrst-timeoutFIN・RST を見た後の TCP60 秒
ip nat translation udp-timeoutUDP300 秒(5 分)
ip nat translation dns-timeoutDNS60 秒
TCP の 24 時間に注意

3 ウェイ ハンドシェイクが完了した TCP のエントリーは、FIN や RST が来ない限り、通信がなくても 24 時間残ります。端末が FIN を送らずに電源を切ったときなどは、使われないエントリーが長く残ります。PAT でエントリーが多くなる環境では、tcp-timeout を短くすることも検討します。

まとめ

通信タイムアウト
ICMP60 秒
TCP(SYN の直後)60 秒
TCP(ハンドシェイク完了)24 時間
TCP(FIN・RST の後)残り 60 秒(timeout の値は 24 時間のまま、left が 60 秒から減る)
スタティック NATタイムアウトしない(timeout:0)

タイムアウトと残り時間は show ip nat translations verbose で確認できます。timeout の単位はミリ秒、left は時:分:秒です。

コメント