Назад | Перейти на главную страницу

Создание цепочки туннелей SSH

Я нашел решение здесь. http://chrisjordan.ca/post/15052405906/chaining-ssh-tunnels. Почему это правильный ответ? Зашифрованы ли соединения между A, B, C, D, E? Насколько я понимаю, зашифровано только соединение между localhost и A.

 ssh -NL 6000:B:22 -o TCPKeepAlive=no -o ServerAliveInterval=15 A &
 ssh -NL 6001:C:22 -o TCPKeepAlive=no -o ServerAliveInterval=15 localhost -p 6000 &
 ssh -NL 6002:D:22 -o TCPKeepAlive=no -o ServerAliveInterval=15 localhost -p 6001 &
 ssh -NL 6003:E:22 -o TCPKeepAlive=no -o ServerAliveInterval=15 localhost -p 6002 &
 ssh localhost -p 6003
 Welcome to E!

Решение, о котором я подумал:

ssh A 
ssh B
...

предполагая, что каждый сервер имеет открытый ключ предыдущего сервера в цепочке.

Есть ли разница между двумя вышеуказанными решениями?

С помощью решения от chrisjordan.ca каждое соединение зашифровано. Это означает, что каждый пакет от A-> E зашифровывается и дешифруется 4 раза. Он также подвержен нескольким уровням накладных расходов по туннелю ssh, что может снизить производительность сверх затрат ЦП на шифрование. Видеть HPN SSH для получения информации о негативных последствиях отправки вашего трафика через ssh-соединение.

Вы начинаете с некоторого хоста перед A, назовем его 0.

0-A трафик шифруется первым ssh, который создает туннель через ssh-соединение. Этот туннель выходит из ssh в A и перенаправляет любой трафик без дальнейшего шифрования (по крайней мере, не с помощью этого конкретного SSH) в B.

Трафик 0-B шифруется вторым ssh. Этот ssh проходит первый туннель ssh от 0-A, выходит из туннеля и затем завершается на B. Этот ssh также создает второй туннель. Трафик, использующий этот туннель, проходит через ssh-соединение 0-B, выходит из ssh в точке B и перенаправляется без дальнейшего шифрования на C.

Трафик 0-C, аналогично, проходит через туннель 0-B, затем выпадает, переходит к C, где он завершается. Он создает еще один туннель.

Точно так же трафик 0-D и, наконец, 0-E пересылается через все больше туннелей ssh.

Так в чем разница между этим и методом, который вы предлагаете?

1) у вас нет нескольких уровней шифрования и туннелирования, поэтому ваш метод должен быть быстрее. Потенциально намного быстрее.

2) С другой стороны, ваш метод требует, чтобы вы доверяли каждому хосту по пути трафик, который вы отправляете между 0 и E. Решение блога предотвращает это, потому что самое внутреннее соединение ssh шифрует весь трафик между 0 и E.

3) аналогично решение для блога создает прозрачное ssh-соединение между 0 и E, поэтому вы можете выполнять такие действия, как запуск scp / sftp от начала до конца.

Если вас беспокоит производительность, но вы хотите сохранить сквозное шифрование, используемое между 0 и E, вы, вероятно, могли бы построить туннель поэтапно с отдельными ssh-соединениями. Что-то вроде (непроверено):

0%  ssh -L6000:localhost:6000 A
A%  ssh -L6000:localhost:6000 B
B%  ssh -L6000:localhost:6000 C
C%  ssh -L6000:E:22 D

Потом в отдельном окне ...

0% ssh localhost:6000
E%