User Tools

Site Tools


Sidebar

Me
Здравствуйте!

Меня зовут Михаил Усик!
Я системный администратор
и наполняю эту wiki,
решая разнообразные IT-задачки.

Я всегда готов помочь Вам
наладить IT-инфраструктуру
за скромное вознаграждение!!

mike@autosys.tk
+7 (977) 887-96-23

linux_faq:http_tunnel

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

С помощью WebRTC

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

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

bridge на ruby

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 не нужен.

bridge - сервер

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

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

bridge - Клиент

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

httptunnel

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

Discussion

Enter your comment. Wiki syntax is allowed:
R D Q M K
 
linux_faq/http_tunnel.txt · Last modified: 2020/01/14 11:02 by admin