別のDebianファイアウォールの背後にあるDebianサーバーでvsftpdを使用しています。中身は正しく、外部からftpサーバーに接続できます。ただし、クライアントがPASV
コマンドを発行すると、ftpサーバーは内部IP(192.168.0.19)を返します。
pasv_address
ディレクティブがconfファイル内に設定されているため、「アドレスは接続された着信ソケットから取得されます」( the manual からコピーされます)。外部クライアントがPASV
を発行するとファイアウォールの外部IPアドレスが返され、内部クライアントが接続すると内部FTPサーバーのIPが返されるように思えます。
pasv_address
ディレクティブをファイアウォールの外部IPに追加すると、すべてが外部で機能しますが、内部で機能しなくなります。内部IPアドレスに設定するか、pasv_address
、内部クライアントは機能しますが、外部クライアントは機能しません。
誰か洞察がありますか?
編集1:以下はサーバー側のログファイルです。
Thu Sep 7 10:36:15 2017 [pid 9093] FTP command: Client "x.x.x.x", "USER yyy"
Thu Sep 7 10:36:15 2017 [pid 9093] [yyy] FTP response: Client "x.x.x.x", "331 Please specify the password."
Thu Sep 7 10:36:15 2017 [pid 9093] [yyy] FTP command: Client "x.x.x.x", "PASS <password>"
Thu Sep 7 10:36:15 2017 [pid 9092] [yyy] OK LOGIN: Client "x.x.x.x"
Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP response: Client "x.x.x.x", "230 Login successful."
Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP command: Client "x.x.x.x", "OPTS utf8 on"
Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP response: Client "x.x.x.x", "200 Always in UTF8 mode."
Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP command: Client "x.x.x.x", "PWD"
Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP response: Client "x.x.x.x", "257 "/""
Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP command: Client "x.x.x.x", "CWD /DownloadProduction/"
Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP response: Client "x.x.x.x", "250 Directory successfully changed."
Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP command: Client "x.x.x.x", "TYPE A"
Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP response: Client "x.x.x.x", "200 Switching to ASCII mode."
Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP command: Client "x.x.x.x", "PASV"
Thu Sep 7 10:36:15 2017 [pid 9094] [yyy] FTP response: Client "x.x.x.x", "227 Entering Passive Mode (192,168,0,19,192,27)."
編集2:ProFTPDを使用してこれを機能させることができました。そのためのserverfaultのケースを次に示します。 ファイアウォールの背後にあるProFTPdサーバーがWANおよびLAN接続)の内部IPアドレスを返す
外部ファイアウォールの背後にいる場合、着信接続は実際には外部ファイアウォールから行われます。したがって、サーバーのIPアドレスはその内部IPアドレスです。あなたが説明するのは「正しい」動作です。 FTPサーバーは、ファイアウォールの外部IPアドレスを認識しません(認識できません)。
FTPサーバーに2つのIPアドレスを割り当てることができます。 1つはexternalを使用し、もう1つはinternalを使用します。そして、FTPサーバーがexternal IPアドレス上の接続のファイアウォール外部IPアドレスを返すように構成します。 internal IPアドレス上の接続の内部IPアドレス。
確かではありませんが、vsftpdがそのような構成を許可しているかどうか。 ProFTPDにはあります。
Vsfptdを使用してこれを機能させるために、いくつかのことを行いました。
これにより、既存のサービスは外部接続のみを処理し、新しいvsftpd-internalサービスは内部接続のみを処理します。
confオプションを表示するように編集(コメントでリクエスト)
外部(/etc/vsftpd.conf):
listen_port=2121
pasv_address=x.x.x.x # External IP - port forwarded from FW to this machine
内部(/etc/vsftpd-internal.conf):
# nothing special in this one, mostly default
FTPは、すでに確立されている制御接続でデータ転送を行わないため、頻繁にヘッドレイクを引き起こしますが、データ転送のために追加の接続を開く必要があります。 FTPの最初のバージョンでは、サーバーがクライアントへのこの接続を開く必要がありました。これは、NATが不明な場合がありました。NATでこれを機能させるために、PASVが発明されたため、クライアントが開くことができましたこの2番目の接続。より良いですが、-あなたが経験したように-最適ではありません。
3つのオプションが思い浮かびます。