11.4. LVSクラスタ内のFTP

ファイル転送プロトコル(FTP、File Transport Protocolの略)は、古くからある複雑なマルチポートプロトコルであり、クラスタ環境に別種の課題一式をもたらしています。このような課題の特性を理解するには、まず、FTPが機能する仕組みについて、いくつかの重要な点を理解しておく必要があります。

11.4.1. FTPが機能する仕組み

他のほとんどのサーバクライアント関係では、クライアントマシンがサーバの特定のポートに対する接続をでオープンすると、サーバがそのポートでクライアントに応答します。FTPクライアントがFTPサーバに接続する場合は、FTPクライアントがFTP制御ポート番号21に対する接続をオープンします。続いて、クライアントは、 FTP サーバアクティブ接続を確立するか、パッシブ接続を確立するかを通知します。クライアントが決めた接続のタイプによって、サーバの応答方法と、トランザクションに使われるポートが決まります

データ接続のタイプは、以下の2つです。

アクティブ接続

アクティブ接続を確立する場合、サーバはクライアントに対するデータ接続を、ポート20からクライアントマシンのハイレンジポートにオープンします。サーバからのデータはすべて、この接続上で渡されます。

パッシブ接続

パッシブ接続を確立する場合、クライアントは、FTPサーバにパッシブ接続ポート(10,000より大きい任意のポート番号)を確立するよう要求します。サーバは、この特別なセッション用の大きな番号が付いたポートにバインドし、ポート番号をクライアントに返します。クライアントは、新しくバインドされたポートをデータ接続用にオープンします。クライアントが行う各データ要求は、別のデータ接続になります。ほとんどの最近のFTPクライアントは、FTPにパッシブ接続を確立しようとします。

FTPのクラスタ処理に関連して、注意が必要な重要項目が2つあります。

  1. 接続のタイプを決定するのは、サーバではなく、クライアントです。したがって、FTPを効果的にクラスタ処理するには、管理者がLVSルータを、アクティブ接続とパッシブ接続の両方を処理するように設定する必要があります。

  2. FTPクライアントとサーバの関係は、Piranha 設定ツールとIPVSが認識していない多数のポートをオープンする可能性があります。

11.4.2. LVSルーティングに対する影響

IPVSパケット転送は、クラスタに対する着信接続と発信接続を、認識したポート番号またはファイアウォールマークに基づいて、許可するにすぎません。クラスタの外側からクライアントが、IPVSが処理するよう設定されていないポートのオープンを試みた場合、IPVSは接続を切断します。同様に、リアルサーバが、IPVSが認識していないポートでインターネットに対する応答接続のオープンを試みた場合も、IPVSは接続を切断します。つまり、インターネットに接続しているFTPクライアントからのすべての接続に、同じファイアウォールマークが指定されていなければならない上、FTPサーバからのすべての接続が、ネットワークパケットフィルタールールを使って適切に転送されなければならないということです。

11.4.3. ネットワークパケットフィルタールールの作成

FTPサービスにiptablesルールを指定する前に、 マルチポートサービスと既存のネットワークパケットフィルタ処理ルールの確認方法に関して、項11.3.1の説明を参照してください。

以下に示すのは、FTPトラフィックに同じファイアウォールマーク21を指定するルールです。以下のルールを適切に機能させるには、Piranha 設定ツールVIRTUAL SERVERサブセクションで、Firewall Markフィールドの値を21と 設定することにより、ポート番号21の仮想サーバを設定する必要もあります。 詳細については、項12.6.1を参照してください。

11.4.3.1. アクティブ接続用のルール

アクティブ接続用のルールは、着信接続を受け付けて、ポート番号20(FTPデータポート)の内部浮動IPアドレスに転送するようカーネルに通知します。

iptablesの場合
/sbin/iptables -t nat -A POSTROUTING -p tcp \
               -s n.n.n.0/24 --sport 20 -j MASQUERADE

上記のiptablesコマンドで、n.n.nは、 Piranha 設定ツールGLOBAL SETTINGSパネルで定義した NATインターフェイスの内部ネットワークインターフェイス用の浮動IPアドレスの 先頭から3番目までの部分の値に置き換えてください。 このコマンドにより、IPVSが認識していないリアルサーバからの発信接続をLVSルータが 受け付けることができるようになります。

11.4.3.2. パッシブ接続用のルール

パッシブ接続用のルールは、インターネットからの広範なポート番号(10,000??20,000)上の浮動IPアドレス宛の着信接続に適切なファイアウォールマークを指定します。

警告警告
 

パッシブ接続用のポート番号の範囲を制限している場合、VSFTPサーバが 合致するポート番号の範囲を使用するよう設定する必要があります。 次の行を/etc/vsftpd.confに追加することにより設定できます。

pasv_min_port=10000
pasv_max_port=20000

また、パッシブFTP接続用にサーバーがクライアントへ表示するアドレスも制御する必要があります。 NATルーティングされたLVSシステムでは、次の行を/etc/vsftpd.conf に追加してリアルサーバーのIPアドレスの代わりにVIPにします。 VIPが接続時にクライアントが見るアドレスになります。例えば、

pasv_address=X.X.X.X

X.X.X.XにはLVSシステムのVIPアドレスを入れます。

その他のFTPサーバの設定については、該当のマニュアルをご覧ください。

この範囲は、たいていの場合に十分な幅にする必要があります。ただし、以下のコマンドの10000:200001024:65535に変更することにより、利用可能なすべての標準ポートを含めて、この数値を増やすことができます。

iptablesの場合
/sbin/iptables -t mangle -A PREROUTING -p tcp \
               -d n.n.n.n/32  \
               --dport 21 -j MARK --set-mark 21
/sbin/iptables -t mangle -A PREROUTING -p tcp \
               -d n.n.n.n/32 \ 
               --dport 10000:20000 -j MARK --set-mark 21

上記のiptablesコマンドで、n.n.n.nは、 Piranha 設定ツールVIRTUAL SERVERで定義されている FTP仮想サーバの浮動IPに置き換えてください。これらのコマンドには、浮動IP宛ての該当するポート上のすべてのトラフィックに ファイアウォールマーク21を指定し、その結果としてIPVSによって認識され、 適切に転送されるようにする効果があります。

警告警告
 

上記のコマンドは直ちに反映されますが、システムのリブート後は保持されません。リブート後もネットワークパケットフィルター設定が復元されるようにするには、項11.5を参照してください。

最後に、該当するサービスが適切なランレベルでアクティブに設定されていることを確認する必要があります。これに関する詳細は、項10.1を 参照してください。