Я подключаюсь к 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