NAT 뒤에 있는 FTPS 서버를 구성하려고 했습니다. 그래서 내 NAT(TCP+UDP)에서 포트 20, 21과 2120-2180을 열었고 수동 통신에 이 포트를 사용하도록 proftpd를 구성했습니다.
그러나 FileZilla를 사용하여 연결을 시도하면 다음 로그가 표시됩니다. (프랑스어이지만 실제로는 매우 명확함)
Statut : Résolution de l'adresse de heardrones.com
Statut : Connexion à 93.30.208.56:21...
Statut : Connexion établie, attente du message d'accueil...
Réponse : 220 ProFTPD 1.3.5 Server (HEAR Server) [93.30.208.56]
Commande : USER hear_downloader
Réponse : 331 Mot de passe requis pour hear_downloader
Commande : PASS ********
Réponse : 230 Utilisateur hear_downloader authentifié
Commande : OPTS UTF8 ON
Réponse : 200 UTF-8 activé
Statut : Connecté
Statut : Récupération du contenu du dossier...
Commande : PWD
Réponse : 257 "/" est le répertoire courant
Commande : TYPE I
Réponse : 200 Type paramétré à I
Commande : PASV
Erreur : Délai d'attente expiré
Erreur : Impossible de récupérer le contenu du dossier
"PASV" 응답을 보내기도 전에 시간이 초과됩니다! 무엇이 이 문제를 일으킬 수 있습니까? PASV 명령에 대한 응답은 다른 모든 명령(PWD, TYPE ...)과 동일한 포트를 사용하는데, 어디서 올 수 있습니까?
네트워크 디자인은 다음과 같습니다.
Server
Proftpd, no iptables, fix IP 192.168.0.13
-> (Wifi)
ISP Box - French ISP (SFR)
port transfer 20,21,22,2120-2180 to 192.168.0.13
-> (optic fiber !)
Internet
필요한 경우 Box 설정 스크린샷과 proftpd 구성 파일을 제공할 수 있습니다. LAN/로컬호스트에서 연결하면 완벽하게 작동합니다.
답변1
FTP는 끔찍한 프로토콜입니다. 두 개의 포트를 사용합니다. 하나는 명령용이고 다른 하나는 데이터용입니다. 이는 라우터가 명령 채널을 구문 분석하고 이 FTP 대화에 대해 두 번째 연결이 예상되는지 파악해야 하기 때문에 NAT를 매우 어렵게 만듭니다. 그렇게 하는 것은 보기 흉하지만 NAT가 FTP와 작동하도록 하는 유일한 방법이기도 합니다.
FTPS암호화명령 채널에 연결되어 라우터가 패킷을 검사하고 데이터 채널이 어디에 있는지 파악하는 것이 불가능해집니다. 분명히 그것은 그때 그것을 설명할 수 없다는 것을 의미합니다. 따라서 데이터 채널이 클라이언트에 의해 시작되면(PASV의 요구에 따라) NATting 라우터는 이를 어떻게 처리할지 알 수 없습니다. FTP 작동 방식으로 인해 이 문제를 해결할 수 없습니다.
FTP를 거부하고 대신 SFTP 또는 이와 유사한 것을 사용하십시오(SSH 터널을 통해 파일을 전송하므로 하나의 TCP 연결만 필요함). 요즘 대부분의 그래픽 FTP 클라이언트는 SFTP도 지원합니다.