Я растущий поклонник мош и я все чаще использую его, когда у меня ненадежные соединения Wi-Fi. Я пытаюсь понять, как построить туннель через сервер, который находится в DMZ (подключенном к Интернету и сети с брандмауэром).
Мое текущее решение с ssh - отредактировать .ssh / config включить такие строки, как:
Host server-behind-firewall
ProxyCommand ssh server-in-dmz nc %h %p
Я также понял, как можно использовать ssh, чтобы делать одну ногу, а другую - сглаживать:
ssh -t server-in-dmz mosh server-behind-firewall
Между сервером в dmz и сервером за брандмауэром я настроил сеанс mosh с использованием экрана.
Но что очень хотелось бы, просто использовать mosh от начала до конца. Я предполагаю, что мне придется настроить server-in-dmz для прослушивания mosh-сервера. Но на странице руководства mosh-server указано: «Он выйдет, если ни один клиент не связался с ним в течение 60 секунд».
Короче говоря, возникает вопрос: как построить mosh-туннель с несколькими хостами?
Вы можете попробовать камень, который является повторителем пакетов TCP и UDP. По сути, это означает, что у вас может быть следующая конфигурация:
Вы <---> Stone on server-in-dmz <---> server-behind-firewall
Другими словами, пусть сервер-в-DMZ прослушивает порт X для пакетов SSH, которые будут перенаправлены на сервер за брандмауэром, а также другой порт, порт Y, для перенаправления пакетов UDP на порт 60000 на сервере за брандмауэром для мош-сервер.
Вам нужно будет подключиться к mosh с помощью следующей команды:
mosh -p 60000 --ssh='ssh -p PORT_X' server-in-dmz
Вместо пересылки трафика на уровне приложения, как предлагает @Hengjie, вы также можете использовать iptables (на server-in-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
Примечание: