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

мультиплексирование TCP-соединения через тупое соединение оболочки?

Я подключаюсь к VPN, шлюз которой настроен неправильно, поэтому единственное, что я могу с ним сделать, это ssh к конкретному хосту Linux, настроенному для моего использования внутри VPN, а затем использовать этот хост в качестве терминала. (Ни scp ни ssh переадресация портов и ssh проксирование с -D работать должным образом.)

Я хочу использовать это соединение для настройки переадресации портов между другим хостом внутри VPN и моим ноутбуком.

Я смог настроить это с помощью socat:

$ socat TCP4-LISTEN:54321,bind=localhost,fork SYSTEM:"ssh user@linuxhost nc otherhost 54321"

Это создает прослушиватель на моем локальном порту 54321 и перенаправляет новые соединения на удаленный хост посредством ssh и nc. Это некрасиво, но оно работает.

Проблема в том, что для этого требуется новое согласование SSH-соединения для каждого нового подключения к удаленному хосту, что замедляет работу на несколько секунд.

Я пытаюсь выяснить, есть ли способ мультиплексировать несколько слушателей через один ssh подключение. (Что бы это ни стоило, я мог бы бежать socat вместо того nc на удаленной стороне, если необходимо.)

ОБНОВИТЬ: Я обнаружил шаттл, что является отличным решением этой проблемы:

$ sshuttle -r user@linuxhost OTHERHOST_IP 
...
$ nc OTHERHOST_IP PORT   # works via transparent proxy

Я немного подозрительно отношусь к sshuttle, потому что он слишком умен для собственного блага: он пытается делать прокси прозрачно и разрешает доступ к любой порт подсетей, выбранных внутри VPN.

Было бы идеально что-то похожее на sshuttle который представляет собой нечто большее, чем интерфейс переадресации портов ssh:

$ sshuttle -r user@linuxhost -L LOCALPORT:OTHERHOST:PORT
...
$ nc localhost LOCALPORT