share facebook facebook2 twitter menu hatena pocket slack

2015.06.29 MON

NAT超えでActiveModeのFTPを使うTIPS

津村 彰

WRITTEN BY津村 彰

にゃんぱすー。

最近、会社でカスタムレイアウトの日本語キーボードを叩きすぎて、キー配置がわからなくなってきました。意外とプログラマのタイピング速度が遅いという話は本当かもしれません。でもHHKBには戻れないなー(主にWindowsキー/Commandキーの都合上…)
ついでに、ブログの書き方忘れてきた。(ぉ

NAT超えでActiveModeのFTPを使うTIPS

00
さて、今回FTPの話です。
一般的にブロードバンドルータ等のNAT Boxを経由する場合、プロトコルの仕様上、必然的にPassiveModeを使用しますが、諸般の事情でActiveModeをどーーーーーーしても使いたい時のTIPSです。

そもそも何が問題なのか

Active Modeでは、以下のフロー図(適当…)のように、ファイルの転送段階でサーバの20/tcpからクライアントの指定されたポートにセッションを張ります。

03
しかし、NATされている場合、(当たり前ですが)NATの内側へセッションを張る事は出来ません。
なので、クライアントからサーバの指定ポートへセッションを張るPassiveModeが一般的に使用されます。

尚、FTPの制御セッション(21/tcp)はtelnetでおしゃべりできます。なかなか楽しい娘ですよ?(ぉ

泣かぬなら噛ませてしまえ。Proxy.

01
さて、2000年頃になりますが、当時はNAT(IPマスカレード)を実装した機器があまり無かったので、PCにProxyツールを入れてルータ代わりにしていました。
そう、Proxyです!!!

ftp.proxy
日本語の解説では、アキバの前佛さんのエントリが詳しいデス。
ftp.proxyでFTPプロキシを立てる方法 – POCKETSTUDIO.JP LOG3

具体的な設置方法については前佛さんのサイトに譲りますが、基本的にrpmのインストールとxinetdの設定だけです。
今回ポート番号は変更しないので、おまじない程度に/etc/servicesに「ftpproxy 21/tcp」と書いておきます。

クライアントからFTPサーバの接続先をNAT BoxのIPアドレスに、ユーザ名を「ユーザ名@FTP ServerのIPアドレス」とするだけで、Active Modeで接続を仲介してくれます。

なんかロードバランサとか使っちゃったら?

さて、仮にこのNAT Boxがロードバランジング等で複数存在した場合、クライアントはどこに繋げば良いのでしょうか。
今回は、DNSラウンドロビンのようなもので、で複数のNAT BOXに接続されたとしましょう。するんだ。すると想え!(by某 智代さん)

02
この場合、クライアントからリーチャビリティのあるセグメントに、VIPを構成する事により、どのNAT BOXに接続されても同一のIPアドレスでアクセスする事が可能です。
例えばVPCの場合、サブネット内に存在するインタンスについてはVPCでルーティングの面倒を観ますが、使っていないアドレスについては特に規程はありません。よって、使ってないアドレスを意図的にVIPにする事により、クライアントからはVPC内のインスタンスにアクセスしているような気分になります。
例えば、192.168.1.4/24, 192.168.1.5/24が実際のインスタンスの場合、末尾の192.168.1.254/32をVIPとして使用します。
具体的には、loopback interface(lo)の追加により、任意のVIPをListenさせます。
これは、主にLVSを構成する際によく使うテクニックです。
参考:ロードバランサ – さくらのサポート情報

おわりに。

なんか、クラウドになってエンジニア同士なんか変に戦ってる気がして、好きになれないなー、と思う今日このごろ。
まぁ、オンプレ系も企業文化アリアリなので、それはそれでどうよ、っていうのはあるのですが。
ただ、なんでしょうね。データセンタのお兄さん・お姉さんと仲良くなったり、隣のラックのエンジニアと仲良くなったりっていうのは無くなりましたね。
むしろ、ユーザ会やんないと顔会わない的な。(苦笑

そういうの含めて、時々昔に戻りたくなります。なんてね。

元記事はこちら

NAT超えでActiveModeのFTPを使うTIPS

津村 彰

津村 彰