web-dev-qa-db-ja.com

Memcachedは選択したインターフェースでリッスンします

Memcachedを、eth0(パブリック)とeth1(プライベート)の2つのインターフェースを持つDebianサーバーにセットアップしています。

Memcachedでeth1とlo(ループバック)の両方をリッスンして、プライベートネットワークがダウンしてもeth0(パブリック)がダウンしていなくてもアクセスできるようにしたいと思います。

man page からmemcachedの場合、-lオプションは、1つのIPアドレスのみを取ることができます。ローカル接続にUNIXソケットを使用することを考えましたが、マニュアルページには

-s
リッスンするUNIXソケットパス(ネットワークサポートを無効にします)。

私が知っている他の唯一の方法は、IPTablesを使用してeth0経由の接続をブロックすることです。ファイアウォールを利用しない他のソリューションはありますか?

9
A.Jesin

インターフェイスを一覧表示してバインドされたアドレスをすべて取得するほど便利ではありません。また、インターフェイスにバインドされたすべてのアドレスを知る必要がありますが、それは可能です。 (発見したように、単一のインターフェース、すべてのインターフェース、またはIPのリストのように、一部のインターフェースのみをリストすることはできません。)

-lオプションは、インターフェイス、INADDR_ANY(すべてのインターフェイス上のすべてのアドレスを意味する)、またはIPアドレスのコンマ区切りリストを使用できます。 IPアドレスには、オプションのポート指定がある場合があります。したがって、たとえば

memcached -l 127.0.0.1:11211,127.0.0.1:11212,10.1.2.3

memcachedは、ポート11211と11212の127.0.0.1でのみlo0をリッスンし、-pまたは-Uで設定されたポートのアドレス10.1.2.3(どちらのインターフェースでも)をリッスンします。

バインドするすべてのアドレスを知っている/持っている必要があります。これは、おそらくlo0とIPのリストの間の大きなギャップです(memcachedのデフォルトの内部リソース制限により、そのインターフェイスの〜2 ^ 24アドレスへのバインドが許可されないため)

8
Eric Towers

受け入れられた回答で指摘されているように、新しいバージョンはそれをサポートしています:

memcached -l 127.0.0.1:11211,127.0.0.2:11211  

または

memcached -l 127.0.0.1:11211 -l 127.0.0.2:11211  

古いバージョン(CentOS 6.5以前に同梱)はまだサポートしていません。allインターフェイス、単一のIPアドレス、またはソケットのいずれかでリッスンできます。
これらの組み合わせはありません。

これを解決する唯一の方法は、すべてのインターフェースにバインドし、パブリックインターフェースをファイアウォールで保護するか、127.0.0.1のみにバインドして、リクエストをiptables経由でeth1:11211からlo0:11211に転送することです。

10
faker