はじめに
IOS-XE のルータでは NAT FTP 利用時に以下のように FTP Passive モードで通信する場合、
"ip nat service list <ACL> ftp tcp port <port number>" の設定にある ACL 制御の設定では FTP Client を Permit しないと、
FTP 通信失敗の事象が報告されています。
![キャプチャNAT.PNG キャプチャNAT.PNG](/t5/image/serverpage/image-id/77797iB4D0D1D4422A69E3/image-dimensions/749x156?v=v2)
事象解説
"ip nat service list <ACL> ftp tcp port <port number>" は NAT FTP の ALG 対象となるポート番号を指定するコマンドです。合わせて設定された ACL の Permit にマッチするトラフィックが着信した場合 NAT エントリ生成とともに FTP の ALG が有効化されます。
FTP Passive モードの場合、データコネクションを確立する際に、まず FTP Client 側より FTP パケット (TCP SYN) 送信して FTP サーバー側に接続します。その発信元となる FTP Client の IP アドレスが "ip nat service list <ACL> ftp tcp port <port number>" の ACL の Permit にマッチすれば、NAT エントリの生成とともに FTP の ALG が有効化されますので、それ以降の FTP 通信が可能です。
一方、"ip nat service list <ACL> ftp tcp port <port number>" の ACL にて FTP Client の IP アドレスが Permit にマッチしない場合、NAT エントリの生成の際 FTP の ALG が有効化されないことによって以降の FTP 通信ができません。
CLI における確認ポイント
NAT エントリでは FTP の ALG が有効されているかどうかは以下が確認するポイントとなります。
# show ip nat translation verbose
(もしくは "show ip nat translation inside/outside <IP アドレス> verbose" 等、パラメータ追加で特定 NAT エントリに対して確認)
<NAT エントリ生成時は FTP の ALG が有効化されている場合の出力例>
Router#show ip nat translation verbose
(抜粋)
tcp 2.2.2.2:21 1.1.1.254:21 2.2.2.254:XXXXX 2.2.2.254:XXXXX
create: XX/XX/XX XX:XX:XX, use: XX/XX/XX XX:XX:XX, timeout: XX:XX:XX
Map-Id(In): 1
Flags: unknown
Appl type: ftp <<<<< FTP の ALG 有効
<NAT エントリ生成時は FTP の ALG が有効化されていない場合の出力例>
Router#show ip nat translation verbose
(抜粋)
tcp 2.2.2.2:21 1.1.1.254:21 2.2.2.254:XXXXX 2.2.2.254:XXXXX
create: XX/XX/XX XX:XX:XX, use: XX/XX/XX XX:XX:XX, timeout: XX:XX:XX
Map-Id(In): 1
Flags: unknown
Appl type: none <<<<< FTP の ALG 有効ではない