linux_faq:http_tunnel

https://en.wikipedia.org/wiki/Web-based_SSH

С помощью WebRTC

с использованием метода CONNECT

Без использования метода CONNECT (только PUT и GET)

https://github.com/luizluca/bridge
На всякий случай утащил к себе: bridge-master.zip
Данная утилита (не моя) - скорее просто proof-of-concept. Она работает, но ей много чего не хватает (например - аутентификации).
Протестировал на чистом контейнере Ubuntu 19.10.
Продвинутая версия с BasicAuth (нашел среди форков) - https://github.com/puochan/bridge
Добавлен HTTPS - https://github.com/vadimkim/bridge
Вот мой вариант - https://github.com/MikeQ123/bridge.git. Это форк от puochan с обработкой перенаправлений при установке соединения и добавлением к запросам cookie OpenDNS. Нужно бы добавить ssl, хотя, если внутри всегда ssh, то ssl не нужен.

Сервер может быть настроен где угодно (не обязательно внутри сети, куда нам нужно попасть).

apt-get install ruby git
git clone https://github.com/MikeQ123/bridge.git
sudo cp ./bridge/http_bridge /usr/bin/

Запускаем сервер

sudo http_bridge server 80 /some-path user:password

Сервер будет принимать подключения на порту 80, URN /some-path и аутентифировать пользователя по логину user и парою password.

/etc/systemd/system/http-bridge-server.service

Для автоматического запуска сделаем юнит сервиса:

[Unit]
Description=Setup a secure tunnel to remote server
After=network.target

[Service]
ExecStart=/usr/bin/http_bridge server 80 /some-path user:password
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

Уведомляем systemd, включаем сервис и запускаем его:

systemctl daemon-reload
systemctl enable http-bridge-server.service
systemctl start http-bridge-server.service
apt-get install ruby git
git clone https://github.com/MikeQ123/bridge.git
sudo cp ./bridge/http_bridge /usr/bin/

Запускаем клиент:

sudo bash -c 'http_proxy=http://proxy-server:3128 http_bridge client 222 http://tunnel.server/some-path some.ssh-server.com 22 user:password'

Всё. Теперь на клиентской машине на порту 222 у нас доступен порт 22 хоста some.ssh-server.com.

Для автоматического запуска клиента при старте сессии ssh нужно добавить в ~/.ssh/config такие директивы:

Host mysshserver.com
    ProxyCommand /usr/bin/http_bridge client - http://tunnel.server/some-path %h %p user:password

или в случае с proxy-сервером:

Host mysshserver.com
    ProxyCommand bash -c 'http_proxy=http://proxy.server:3128 /usr/bin/http_bridge client - http://tunnel.server/some-path %h %p user:password'

И теперь при выполнении:

ssh user@mysshserver.com

автоматически будет запускаться bridge (повышение привилегий в этом случае не нужно).

/etc/systemd/system/http-bridge-client.service

Для автоматического запуска клиента сделаем юнит сервиса:

[Unit]
Description=HTTP Tunnel Client Service 
After=network.target

[Service]
Environment="http_proxy=http://proxy_server:3128"
ExecStart=/usr/bin/http_bridge client 222 http://tunnel.server/some-path some.ssh-server.com 22 user:password
RestartSec=10
Restart=always

[Install]
WantedBy=multi-user.target

Уведомляем systemd, включаем сервис и запускаем его:

sudo systemctl daemon-reload
sudo systemctl enable http-bridge-client.service
sudo systemctl start http-bridge-client.service

https://github.com/larsbrinkhoff/httptunnel
Можно найти в репозиториях многих дистрибутивов.
Пишут, что испоьзует чистые PUT и GET запросы, то есть должен проходить большинство PROXY.

Enter your comment. Wiki syntax is allowed:
A A O​ R Z
 
  • linux_faq/http_tunnel.txt
  • Last modified: 2020/01/14 11:02
  • by admin