туннель mosh через прокси

16

Я становлюсь поклонником mosh и все чаще использую его, когда у меня ненадежные ссылки Wi-Fi. Я пытаюсь выяснить, как построить туннель через сервер, который находится в демилитаризованной зоне (подключен к Интернету и сети с межсетевым экраном).

Мое текущее решение с ssh состоит в том, чтобы отредактировать .ssh / config, чтобы включить строки как:

Host server-behind-firewall
  ProxyCommand ssh server-in-dmz nc %h %p

Я также выяснил, как я могу использовать ssh, чтобы сделать одну ногу и mosh другой:

ssh -t server-in-dmz mosh server-behind-firewall

Между server-in-dmz и server-behind-firewall я установил сеанс mosh, используя экран.

Но то, что я действительно хотел бы просто использовать mosh из конца в конец. Я предполагаю, что мне нужно было бы настроить server-in-dmz, чтобы прослушивать mosh-сервер. Но на справочной странице mosh-сервера написано: «Он закроется, если ни один клиент не связался с ним в течение 60 секунд».

Короче говоря, вопрос: как построить туннель mosh с несколькими хостами?

speciousfool
источник
см. github.com/marklee77/mosh-proxy
Янус Троелсен

Ответы:

5

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

Вы <---> Камень на сервере в-dmz <---> сервер за брандмауэром

Другими словами, сервер-в-dmz прослушивает порт X для пакетов SSH, которые будут перенаправлены на сервер за межсетевым экраном, а также другой порт, порт Y, для пересылки пакетов UDP на порт 60000 на сервере за межсетевым экраном для мош-сервер.

Вам нужно будет подключиться к mosh с помощью следующей команды:

mosh -p 60000 --ssh='ssh -p PORT_X' server-in-dmz
Hengjie
источник
3
Интересно отметить, что использование приложений-перехватчиков tcp, таких как tsocks или proxychains, не будет работать. Это потому, что они только перехватывают TCP-пакеты, а не UDP (что и использует mosh).
Hengjie
как использовать камень с одним ipv4 и одним адресом ipv6?
Янус Троелсен
0

Вместо перенаправления трафика на прикладном уровне, как предлагает @Hengjie, вы также можете использовать iptables (на сервере в dmz):

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 11559 -j DNAT --to-destination 178.254.55.220:22
iptables -t nat -A PREROUTING -p udp -m udp --dport 60159:60168 -j DNAT --to-destination 178.254.55.220
iptables -t nat -A POSTROUTING -j MASQUERADE
sysctl -w net.ipv4.ip_forward=1

Затем вы подключаетесь с помощью mosh -p 60159 --ssh='ssh -p 11559' server-in-dmz

Замечания:

  • Кажется, нет способа поместить mosh-порт в конфигурационные файлы. :(
  • Я выбрал порты наугад.
  • Возможно, вам понадобится дополнительная конфигурация iptables, если вы сделаете это ...
  • Редактировать: лучше использовать DNAT для целого ряда портов, так как есть хороший шанс, что вы случайно убьете клиент mosh, не взяв с собой сервер. Если вы не перенаправляете диапазон, вам придется подключиться к серверу по протоколу ssh и уничтожить работающий сервер mosh. Может быть немного раздражает, если у вас плохая связь в первую очередь.
  • Мой вариант использования для этого - мошь через йод.
Цезарь
источник