
Обратный TCP-туннель позволяет получить доступ к цели за NAT или брандмауэром.
shootback — это реверсивный TCP-туннель, позволяющий получить доступ к цели за NAT или файрволом
反向TCP隧道, 使得NAT或防火墙后的内网机器可以被外网访问.
Потребляет менее 1% CPU и 8 МБ памяти при 800 одновременных соединениях.
slaver — это один файл и зависит только от стандартной библиотеки Python (2.7/3.4+).

Требования:
Скачайте git clone https://github.com/aploium/shootback
(опционально) Если нужен однофайловый slaver.py, выполните python3 build_singlefile_slaver.py
Запустите эти команды
# master слушает :10000 для slaver, :10080 для вас
python3 master.py -m 0.0.0.0:10000 -c 127.0.0.1:10080
# slaver подключается к master и использует example.com как цель туннеля
# прим.: на slaver можно использовать python2, не только py3
python3 slaver.py -m 127.0.0.1:10000 -t example.com:80
# отправьте запрос на master
curl -v -H "host: example.com" 127.0.0.1:10080
# -- некоторый HTML-контент с example.com --
# -- некоторый HTML-контент с example.com --
# -- некоторый HTML-контент с example.com --
Более реалистичный пример (с SSL):
предположим, ваш master находится на 22.33.44.55 (как на схеме выше)
# slaver_local_ssh <---> slaver <--[SSL]--> master(22.33.44.55) <--> Вы
# ---- master ----
python3 master.py -m 0.0.0.0:10000 -c 0.0.0.0:10022 --ssl
# ---- slaver ----
# прим.: опция `--ssl` предназначена для шифрования между slaver и master, не для SSH
python(or python3) slaver.py -m 22.33.44.55:10000 -t 127.0.0.1:22 --ssl
# ---- ВЫ ----
ssh 22.33.44.55 -p 10022
За дополнительной помощью обратитесь к python3 master.py --help и python3 slaver.py --help
Запуск в фоне:
nohup python(or python3) slaver.py -m host:port -t host:port -q &
или:
# screen — команда Linux
screen
python(or python3) slaver.py -m host:port -t host:port
# нажмите ctrl-a d, чтобы открепить screen
# при необходимости используйте "screen -r" для повторного подключения
Любой сервис, использующий TCP, может быть передан через shootback. HTTP/FTP/Proxy/SSH/VNC/...
shootback сам выполняет только передачу, не занимается шифрованием или проксированием.
Однако вы можете использовать сторонний прокси (например, shadowsocks) в качестве цели для slaver.
Например:
shadowsocks_server<-->shootback_slaver<-->shootback_master<-->shadowsocks_client(socks5)
select.select()ValueError: too many file descriptors in select()