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
とやってみると、ちゃんと接続される。
????どうなってるのだろう?