Использование Redis через защищенное соединение

У меня есть удаленный компьютер с Linux, на котором работает сервер Redis, прослушивающий открытый порт. Я хотел бы зашифровать трафик, но Redis не поддерживает SSH. Предлагаемое решение — использовать туннель SSH, но у меня мало опыта в этом.

Я попытался подключить объект RedisClient (ServiceStack.Redis) к локальному порту, который перенаправляется через туннель SSH (SSH.NET) на удаленный ящик Linux:

static void Main(string[] args)
    {
        using (var client = new SshClient("example.org", "sshuser", "sshpassword"))
        {
            client.Connect();
            var port = new ForwardedPortLocal("localhost", 1234, " example.org ", 1234);
            client.AddForwardedPort(port);
            port.Exception += (sender, e) => Console.WriteLine(e.Exception.ToString());
            port.Start();
            using (var redisClient = new RedisClient("localhost", 1234, "redispassword"))
            {
                var values = redisClient.As<string>();
                const string dansFord = "Dan's Ford Mustang";
                values.Store(dansFord);
                Console.WriteLine("Redis has " + values.GetAll().Count + " entries");
                values.GetAll().ToList().ForEach(Console.WriteLine); 
            }
            Console.ReadLine();
            port.Stop();
            client.Disconnect();
        }
    }

Это не работает, поскольку RedisClient не может подключиться к несуществующему серверу на локальном хосте, и переадресация, похоже, не работает. Мои вопросы:

  1. Можно ли использовать SSH-туннель SSH.NET для RedisClient?
  2. Я просто неправильно использую SshClient?
  3. Есть ли более простой способ установить зашифрованное соединение с удаленным сервером Redis?

Я не могу применять какие-либо настройки уровня ОС, поэтому решение должно быть чисто .NET до 4.5.1. Решение опубликовано здесь требуется коммерческая библиотека, а мне приходится полагаться на бесплатные.

Спасибо!


person marce    schedule 09.01.2014    source источник
comment
См. stackoverflow.com/questions /16789727/ для примера с использованием Java.   -  person Didier Spezia    schedule 10.01.2014


Ответы (1)


Ответы:

  1. Можно ли использовать SSH-туннель SSH.NET для RedisClient? Да
  2. Я просто неправильно использую SshClient? Да
  3. Есть ли более простой способ установить зашифрованное соединение с удаленным сервером Redis? Я так не думаю. Redis предлагает использовать SSL-прокси, но это кажется более сложным

Кстати, ваш код работает после нескольких изменений.

  • использовал «127.0.0.1» вместо «localhost».

Использование localhost может вызвать проблемы, поскольку localhost может разрешаться в IPv6-адрес, который может не поддерживаться переадресацией портов..?

  • перенаправление портов должно быть настроено следующим образом:

порт var = новый ForwardedPortLocal ("127.0.0.1", 42421, "127.0.0.1", 6379);

42421 — это порт на вашем локальном компьютере. Он должен быть доступен. Весь трафик, отправленный на этот порт, будет перенаправлен.

6379 — это порт на вашем удаленном сервере, где сервер Redis прослушивает.

  • при подключении к клиенту Redis используйте адрес IPv4:

вар redisClient = новый RedisClient ("127.0.0.1", 42421)

42421 — это тот же порт, который вы использовали выше для переадресации.

person Chris    schedule 16.01.2014
comment
Я думал, что пробовал все, но не очевидное, конечно. Спасибо, в любом случае ;) - person marce; 17.01.2014