FTP active /pasive の疑問

なんか納得がいかない。

実家にftpdサーバを立てた。IISというのを初めて設定したのだ。

実は、ルータのNAT下でftpdサーバを立てるのは初めてである。

で、サーバのlocal IPを192.168.1.210として、

ルータのポートフォワードで

  TCP21 -> 192.168.1.210

とした。

あまり深くは考えなかった・・

普通に外部からftpできるし、自宅NAT下のパソコンからもftpできる。

 

でも、なんか違和感がある。もやもや感

 

ご存じのようにFTPではコマンド用(PORT21)とデータ用の二本立てTCP通信となる。

FTPサーバにport 21 で接続して、交渉して、ポートをサーバから張るか(active)、クライアントから張るか(passive)を決める。その時、接続先ポートも通知する。

 

さて、passiveモードで外部からftpするとする。コマンドポートは問題なくftpdサーバに到達し、通信が確立できる。そこまではわかる。しかし、passiveモードでは、次に、データ転送用に適当なポートへ接続することを要求するのだ。例えば、32451とか。

でもさ、ftpdサーバが所属するルータでは、32451をftpdサーバに流せないじゃないか。

 

問題を切り離すため、レンタルサーバにログインして、

telnet 実家アドレス 21

としてみた。普通に接続できて、

User xx...

Pass xxx..

でもって

PASV

これで

227 Entering Passive Mode(ip,ip,ip,ip,x,y)

要は、ftpdサーバはポート256*x+yへの接続を、データ転送のために要求している。

で、別プロセスで

telnet 自宅アドレス 256*x+y

とやってみると、ちゃんと接続される。

 

 

????どうなってるのだろう?