Redis-リモートサーバーに接続


122

Ubuntu 10.10サーバーにhttp://redis.io/topics/quickstartのクイックスタートガイドの指示に従って、Redisを正常にインストールしました。私はdameonとしてサービスを実行しています(そのため、init.dで実行できます)

サーバーは、内部IPと外部IPを持つRackspace Clusterの一部です。ホストはポート6379で実行されています(Redisの標準)

以下に示すように、iptablesに行を追加して、ポート6379からの着信接続を許可します。

 ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:6379 

別のサーバーのPHPコードで、ここで新しいRedisサーバーに接続しようとしています。

$this->load->helper("iredis");

$hostname = "IP ADDRESS HERE";

$redis = new iRedis(array('hostname' => $hostname, 'port' => 6379));

これを実行したら、常に接続が拒否されます。私のredis.confファイルでは、ローカルバインドコマンドをコメントアウトしているので、localhost IP以外でリッスンしているはずです。別のサーバーではなく、ローカルマシンのデータベースに接続できます。私は運が悪いのに外部と内部のIPを試しました。

これを機能させるための提案はありますか?


Redisコマンドラインツールを使用して接続できますか?redis-cli -h hostname
jlundqvist 2011

サーバー障害には、接続拒否に関する標準的な質問があります
Raedwald

回答:


129

まず、期待どおりのIPでリッスンしていることを確認します。

netstat -nlpt | grep 6379

起動/停止の方法によっては、意図したとおりにインスタンスを実際に再起動していない可能性があります。netstatは、あなたが思っているところを聞いているかどうかを教えてくれます。そうでない場合は、再起動して、必ず再起動してください。再起動しても期待どおりにリッスンしない場合は、構成ファイルを確認してください。

アクセスを確立する必要があるリモートノードから、期待どおりの場所でリッスンしていることを確認した後:

redis-cli -h REMOTE.HOST ping

ローカルホストからそれを試すこともできますが、ホスト名またはローカルホストの代わりに、リッスンしていると予想されるIPを使用できます。どちらの場合も、応答としてPONGが表示されます。

そうでない場合は、ファイアウォールがブロックしています。これは、ローカルIPTablesまたはノード間のファイアウォールのいずれかになります。ロギングステートメントをIPtables構成に追加して、6379を超える接続をログに記録し、何が起こっているかを確認できます。また、ローカルと非ローカルから同じIPにpingを再試行することは、実例となるはずです。ローカルでは応答するがリモートでは応答しない場合、ノード上のIPテーブルルールの複雑さに応じて、ファイアウォールの介在に頼ります。


16
SO、明確に言うと、あなたは投稿された問題への回答に反対票を投じているのです。私はあなたの解決策を投稿することに同意しますが、あなたの問題が異なっていたために正解を反対票を投じるのは適切なことではないようです。とは言っても、OPには複数のIPがあり、それらすべてをリッスンする必要がないため、ソリューションは質問には適していません。OPは質問の構成ファイルのバインドセクションを具体的に参照しました。したがって、あなたの解決策は尋ねられた質問に対処しません。
リアルビル

2
さて、私はもう一度質問を読みましたが、OPがこの「バインド」行に正しいconfを設定したことは、私にはそれほど明白ではなかったようです。また、彼のケースにファイアウォールが関与していることはわかりません。とにかく、失礼だと思われる場合は、-1を削除できます。私はちょうどあなたの答えは完全にオフトピックであることがわかった、それがユーザーの大半は非常に一般的な問題...(バインドデフォルトパラメータ)をここに来るために非常に有用ではないだろうと
Orabîg

1
OPは、システムのすべてのアドレスにバインドするようにredisに指示するローカルバインドルールをコメントアウトしたと言いました。私は-1を失礼とは呼びません、ただ不適切です。OPは、IPtablesルールが適切に設定されていると具体的に述べているため、尋ねられた質問にはファイアウォールルールが適切に設定されていることは明らかです。ファイアウォールの明記された存在と構成内のローカルバインドの削除を考えると、答えは正しくないか、尋ねられた質問に関連していません。
リアルビル

うん、あなたは正しい、ごめんなさい。私はネイティブの英語ではないので、「コメントアウト」動詞を誤って解釈しました... OPがコメントを「削除」したと思いました。(あなたがあなたの投稿を編集するまで、残念ながら、私は、私の-1を削除することはできません)
Orabîg

心配する必要はありません。必要な場所で実行されていることの検証に関する説明を追加しました。それが将来の読者のためにそれを明確にするのに役立つことを願っています。
リアルビル

327

私は同じ問題に悩まされており、前述の回答は私には役に立ちませんでした(ただし、よく書かれています)。

解決策はここにあります:/etc/redis/redis.confを確認し、デフォルトを必ず変更してください

bind 127.0.0.1

bind 0.0.0.0

次に、サービスを再起動します(service redis-server restart

次に、redisが非ローカルインターフェースでリッスンしていることを確認します。

redis-cli -h 192.168.x.x ping

(192.168.xxをあなたのIPアドレスに置き換えてください)

重要な注意:複数のユーザーが述べたように、インターネットに公開されているサーバーでこれを設定するのは安全ではありません。自分のニーズに合った手段でredisが保護されていることを確認する必要があります。


1
ここでも同じですが、ファイアウォールの設定やネットワークの問題について考える前に、まずRedisサーバーからのリモート接続を許可する必要があります。Orabigに感謝
securecurve

これは明らかに正しい答えです。上記のものには、多くのテクニカルsysadmin "dark-arts" mumbo jumbo ...がありますが、まったく役に立ちません:)
Henley Chiu

7
この問題はOPと同じではありません。OPは、必要な構成ファイルにすでに変更を加えていると明確に述べています。OPが設定ファイルに変更を加えたので、あなたが行いました。いいえ、それらは2つの別個の問題です。与えられた答えは、提供された問題に対処しました。すべての問題に対処することではありませんでした。1つだけ尋ねました。それは何かが間違っていることを認めることではなく、あなたの問題が違うことに気づくことです。それは誰かが彼らの車が始動しないと言っているようですが、彼らはそれにガスを持っています、そしてあなたは彼らに彼らはガスが必要だと言っています。
リアルビル

1
IPv4とIPv6のデュアルスタックを指定する方法も知っていますか?:私は、次のことを試してみましたbind 0, ::bind 0, [::]bind 0\nbind6 ::(ここで、\ nは改行である)とbind 0 [::]が、働く唯一のものは持っていないbindすべての設定でラインを。デフォルトでは0(または0.0.0.0/0)と[::]をリッスンするので問題はありませんが、一度必要になった場合の適切な方法を知りたいのですが。どこにも文書化されていないようです。
Luc

7
この答えは、Redisサーバーが世界中からアクセスできるようにすることです。これは大きなセキュリティリスクです。これを行う場合は、RedisにAUTHパスワード追加したり、iptables許可されていないクライアントをブロックするようにファイアウォール(など)を構成したりするなど、他の方法でRedisサーバーをロックダウンしてください。
sffc 2014

14

Orabîgによって与えられた優れた答えに加えて:

bindセクションを完全に削除してに設定protected-modeすることで、この問題を解決しましたno

#bind 127.0.0.1
protected-mode no

公開されているサーバーでは、このメソッドを使用しないでください。


1
安全でない方法を使用している人へ:Redisサーバーを保護してください!! または、すべてのファイルが失われます:(Redisサーバーをセキュリティで保護していないため、サーバーが危険にさらされています。攻撃者は私にある程度の金額(私にとって十分な大きさ)を支払うことを望んでいます。攻撃者は次のようなものです:duo.com/ブログ/…
MonkimoE 2017年

4

Orabigは正しいです。

Ubuntu(VirtualBox)で 10.0.2.15をバインドし、ホストからゲストUbuntuにポート転送を行うことができます。

/etc/redis/redis.conf

bind 10.0.2.15

次に、redisを再起動します。

sudo systemctl restart redis

それはうまくいくでしょう!


4

私は数日間Redisへのリモート接続に苦労していました。やっとできました。接続するために従うために私がまとめた完全なチェックリストは次のとおりです。いくつかの解決策が上記の回答に示されています。それでも私は自分の答えが主題に関するナノwikiであることを望みました:)いくつかの有用なリンクも追加しました。

redisがローカルで動作する場合:

$ redis-cli
127.0.0.1:6379>ping
PONG
127.0.0.1:6379>

パスワードが設定されていない場合

/etc/redis/redis.confconfigを参照してください(これはUbuntu 18.04のデフォルトの場所です。別の場所にある場合があります)。

# The following line should be commented
# requirepass <some pass if any>

保護モードが構成で「いいえ」に設定されている場合:

# The following line should be uncommented
protected-mode no

構成でインターネットからのアクセス用にIPバインディングが開いている場合:

# The following line should be commented
# bind 127.0.0.1 ::1

Linuxファイアウォールで接続が許可されている場合

(ここではUbuntu 18.04です)受信インターネットトラフィックがポート6379(Redisのデフォルトポート)に移動できることを確認します

# To check if it the port is open
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
...
6379/tcp                   ALLOW       Anywhere
6379/tcp (v6)              ALLOW       Anywhere (v6)
...

# To open the port
$ sudo ufw allow 6379/tcp

Redisサービスを再起動します

変更を有効にするには、Redisサービスを再起動して実行していることを確認してください。

$ sudo systemctl restart redis.service
$ sudo systemctl status redis

リモートサーバーとして機能するかどうかを確認する

コマンドラインから、redis-cliRedisサーバーがリモートサーバーにあるかのように使用します。

$ redis-cli -h <your-server-ip>
<your-server-ip>:6379> ping
PONG
<your-server-ip>:6379> exit
$

リモートサーバーとして接続されているインターネットサーバー経由でRedisサーバーにping-PONGできる場合、リモートRedis接続は機能しません。

セキュリティ警告

上記のすべてにより、Redisデータはインターネットから誰でも完全にオープンになります。

Redisの構成requirepassprotected-mode yes設定(上記を参照)を基本的に保護し、危険なRedisコマンド(上記のリンクを参照)をブロックするには、この記事Redisサイトのセキュリティセクションをご覧ください。

役立つリンク

ヘルプへのリンクインストールとUbuntu 18.04上でのRedisを確保する方法セットアップのUbuntu 18.04ファイアウォールにする方法

それが役に立てば幸い。


2
  • 自分でredisをダウンロードして(apt-get install redis-serverではなく)、上記の提案を使用してredis.confを編集した場合は、次のような設定でredis 開始してください。./src/redis-server redis.conf

    • また、Windowsでvirtualbox vmに接続している場合は、redisに接続するための仮想ボックス設定のスクリーンショットを含めています。

ここに画像の説明を入力してください


0

サーバーのredis構成でtcp-keepaliveを60(0に設定されていた)に設定すると、この問題の解決に役立ちました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.