Туннелирование любого вида трафика TCP через HTTP/s
Я ищу программное обеспечение для туннелирования RDP или другого двоичного трафика TCP через туннель HTTPS. Поскольку многим клиентам разрешен только HTTP/S (в брандмауэре открыты только порты 80 и 443).
Но есть необходимость пересылать RDP (и другие протоколы) с машин в DMZ клиентам.
7 Просмотреть большое описание функции
Существует ли какое-либо программное обеспечение с открытым исходным кодом или корпоративное программное обеспечение для этой проблемы?
Плохие решения
У таких решений, как F5 big ip, есть проблема, связанная с созданием конфигурации соединения с этим программным обеспечением. Если бы это было возможно сделать с помощью API, это было бы хорошим решением. Но я бы предпочел только получить туннельный компонент, не покупая целое программное обеспечение шлюза. Потому что мне нужно создать туннели (1000ds of) из моего собственного программного обеспечения и необходимо ограничить доступ к туннелю разрешенному пользователю (идентифицируется сессионным cookie)
Хорошие решения
http://http-tunnel.sourceforge.net/
Если возможно, что туннельный клиент будет не выделенным сервером, а Java-апплетом флэш-памяти, работающим в клиентском браузере, это будет соответствовать на 100% моим потребностям.
4 ответа
Существует огромное количество проектов, которые туннелируют TCP через HTTP(S). Вам придется проделать небольшую работу, чтобы выбрать тот, который лучше всего соответствует вашим потребностям (и, возможно, слегка его изменить).
SuperTunnel (Java). Выглядит красиво, похоже, они немного подумали, как бороться с прокси с плохим поведением.
JHttpTunnel (Java). Порт GNU httptunnel, я думаю, использует тот же сетевой протокол.
Netty HTTP Tunnel (Java, часть Netty, очень хорошая сетевая библиотека; пример кода). Я думаю, что это требует, чтобы и клиент, и сервер использовали Netty, но помимо этого есть замена для обычных сокетов в Netty.
ProxyChains (C, Unix, очень популярный)
GNU httptunnel (C, поддержка HTTPS отсутствует, вероятно, это дедушка всех http-туннелей)
узел-http-туннель (Node.js), Net:: HTTPTunnel (Perl), nRedir (Python), штопор, htunnel,...
Я думаю, что SuperTunnel и JHttpTunnel могут быть включены в собственный апплет или Java-приложение на стороне клиента, они не должны запускаться в качестве автономных прокси.
Netty также сделает это, но (я думаю) это требует, чтобы ваш сервер также использовал Netty: другими словами, он позволяет вам заменить обычный TCP connect()
на сервер, используя Netty с TCP-over-HTTP connect()
, но не проксирует произвольные соединения с другими серверами (если вы не пишете свой собственный простой прокси).
Если вы находитесь в мире Windows, я настоятельно рекомендую взглянуть на службу Windows 2008/2008R2/2012 SSTP VPN. Он использует порт 443 и может быть размещен совместно с IIS (на 443). В Windows Vista / 7 / 8 это работает как прелесть. Я слышал о решениях для Mac OSX, но пока не слышал.
Однако есть старое доброе решение SSH.
Если на Linux, просто установите openssh-сервер. Если на Windows, получить и установить сервер OpenSSH (например, copSSH из itefix https://www.itefix.no/). Измените порт для использования 443 вместо 22 по умолчанию.
На стороне клиента можно использовать Putty ( http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html) или kitty ( http://kitty.9bis.net/) на Windows или любой другой. вид SSH-клиента в любой ОС для подключения к вашему серверу через порт 443 (где слушает ваш SSH-сервер).
Инструкции по туннелированию через замазку, например, можно найти на нескольких сайтах:
- http://oldsite.precedence.co.uk/nc/putty.html
- http://www.damtp.cam.ac.uk/user/jp107/xp-remote/web-tunnel/
Всегда помните, что вы должны указать на локальный хост, чтобы сделать это.
В Windows также есть MyEnTunnel ( http://nemesis2.qx.net/pages/MyEnTunnel) для упрощения процедуры настройки и обслуживания туннеля.
Эксплуатировать этот туннель в браузере чрезвычайно просто: просто скажите своему браузеру, что у вас есть прокси-сервер socks на локальном порту (например, localhost 8080), который вы только что настроили в своем клиенте (putty, kitty, myentunnel или что-то еще).
Я написал один называется Sshh. http://sourceforge.net/projects/sshh/
Я немного сошел с ума, на самом деле он позволяет вам устанавливать обратные связи через него.
Если вы хотите открыть туннель TCP через WebSocket и браузер в качестве вашей ограниченной среды, и вы просто можете получить доступ к ограниченным веб-сайтам через браузер. Я думаю, что этот туннельный инструмент, который я сделал, может помочь вам решить ваши проблемы.
Кактусовый туннель: https://github.com/jeffreytse/cactus-tunnel
Очаровательный TCP-туннель через WebSocket и браузер.
С его помощью вы можете быстро открыть туннель через браузер и настроить туннель SSH, прокси sock5 и т. д.
Для вашего удобства ниже приведены инструкции по созданию прокси-туннеля SSH socks5 черезcactus-tunnel
- Установить инструмент туннеля
npm i -g cactus-tunnel
- Запустить туннельный сервер
cactus-tunnel server
- Запустите туннельный клиент в режиме моста браузера
cactus-tunnel client -b ws://<your-tunnel-server>:7800 <your-ssh-server>:22
- Создайте прокси socks5 на стороне клиента
ssh -p 7700 -D 1337 -q -C -N <username>@localhost
-
-p 7700
: подключиться к определенному порту SSH7700
-
-D 1337
: открыть SOCKS-прокси на локальном порту1337
-
-q
: тихий режим, ничего не выводить локально -
-C
: сжимать данные в туннеле, экономить пропускную способность -
-N
: не выполнять удаленные команды, полезно только для перенаправления портов