2

У меня есть приложение, которое передает незашифрованные данные по сети на заданный порт, скажем, порт 4000. Эти данные для другого приложения, которое работает на моем VPS. Как я мог зашифровать эти данные между моим домашним сервером и VPS. Я думал о туннеле ssh, но не могу понять, как это сделать, так как данные должны идти прямо в другое приложение на VPS. так что это не будет похоже на простое «ssh -D 9000 user @ ip»

3 ответа3

1

Вот команда, которая может быть полезна:

ssh -C -L80:127.0.0.1:80 -L443:127.0.0.1:443 $USER@$VPS

-L$LOCALPORT:$JUMPIP:$REMOTEPORT

$ JUMPIP не обязательно должен совпадать с адресом VPS.

Это не обязательно, если у вас есть полный VPN к вашему VPS.

Если ваше приложение использует эфемерный порт, у вас могут возникнуть некоторые проблемы; Вы не знали бы заранее, какой порт будет использоваться.

1

Я предполагаю, что ваше соединение ясно, от localhost до $VPS:4000 .

Чтобы создать туннель SSH, вы откроете порт в localhost который будет туннелировать трафик к порту 4000 на сервере $VPS .

Следующая командная строка делает это:

ssh -L9000:localhost:4000 user@$VPS

где 9000 - локальный порт, который я выбрал.

Затем вам нужно изменить приложение, чтобы оно больше не подключалось к $VPS:4000 а вместо этого подключалось к localhost:9000 .

Это работает путем подключения к user@$VPS , а затем создания безопасного соединения между localhost:9000 на локальном хосте и localhost:4000 на удаленном хосте.

Таким образом, шифрование прозрачно для вас, и вам не нужно упускать из виду попытки реализовать какой-либо алгоритм шифрования. Или хуже - сделай сам.

Вы должны убедиться , что соединение SSH всегда доступна , когда вам это нужно. Может быть полезно использовать аутентификацию с открытым ключом, если вы не знакомы с ней :)

0

Поскольку вы дали нам немного подробностей, ответ на этот вопрос будет немного сложным.

  1. Если у вас есть VPN-подключение к вашему серверу, в общем, лучшим решением будет использовать его для маршрутизации вашего приложения к его удаленному коллеге, потому что вся работа (маршрутизация и шифрование / дешифрование) уже настроена.

  2. Есть случаи, когда это невозможно сделать. Например, у вас есть маршрутизируемая VPN, и ваше приложение желает использовать необычные сетевые протоколы (NetTalk, IPX, IPv6 ...), или вы должны находиться в том же домене широковещательной рассылки, что и удаленный сервер. Или ваше приложение должно использовать UDP, в то время как ваше VPN использует TCP. Это просто не может быть сделано, и этот же комментарий относится к другим ответам, которые предложили использовать ssh.

Альтернативное решение этого заключается в использовании VPN с мостовым соединением на основе UDP . Первая спецификация позволяет вам принадлежать к одному и тому же широковещательному домену и использовать любой протокол маршрутизации, какой вы пожелаете, вторая спецификация (на основе UDP) позволяет использовать порты UDP.

В общем и целом, самое простое решение - использовать OpenVPN, но это не единственное решение. На дочернем сайте ServerFault вы можете найти этот ответ, объясняющий, как настроить IPSec для туннеля GRE. IPSec обеспечивает шифрование, GRE туннелирует соединение точка-точка. Еще раз, вам рекомендуется запускать IPSec через UDP, а не TCP.

Обращаем ваше внимание, что дискуссии о том, что VPN по UDP являются нестабильными, являются спорными: после отправки TCP-пакета по UDP (или, в данном случае, TCP) VPN, если он потерян, он будет передан повторно (любезно предоставлено слушающим приложением) независимо от того, является ли VPN по UDP или TCP. Другими словами, целостность контента обеспечивается инкапсулированным протоколом, а не протоколом-носителем. Что вы получаете, так это то, что вы также можете пересылать данные по VPN, используя протокол UDP.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .