
リバースTCPトンネルを使用すると、NATやファイアウォールの内側にあるターゲットにアクセスできます
shootbackは、NATやファイアウォールの背後にあるターゲットにアクセスできるようにするリバースTCPトンネルです。
リバースTCPトンネルにより、NATやファイアウォール内側のマシンに外部からアクセスできます。
800同時接続時、CPU使用率1%未満、メモリ8MB未満を消費します。
slaverは単一ファイルで、Python(2.7/3.4+)標準ライブラリのみに依存します。

必要条件:
ダウンロード: git clone https://github.com/aploium/shootback
(オプション)単一ファイルのslaver.pyが必要な場合: python3 build_singlefile_slaver.py を実行
以下のコマンドを実行
# master listen :10000 for slaver, :10080 for you
python3 master.py -m 0.0.0.0:10000 -c 127.0.0.1:10080
# slaver connect to master, and use example.com as tunnel target
# ps: you can use python2 in slaver, not only py3
python3 slaver.py -m 127.0.0.1:10000 -t example.com:80
# doing request to master
curl -v -H "host: example.com" 127.0.0.1:10080
# -- some HTML content from example.com --
# -- some HTML content from example.com --
# -- some HTML content from example.com --
より実践的な例(SSL使用):
masterが22.33.44.55であると仮定(上の図の通り)
# slaver_local_ssh <---> slaver <--[SSL]--> master(22.33.44.55) <--> You
# ---- master ----
python3 master.py -m 0.0.0.0:10000 -c 0.0.0.0:10022 --ssl
# ---- slaver ----
# ps: the `--ssl` option is for slaver-master encryption, not for SSH
python(or python3) slaver.py -m 22.33.44.55:10000 -t 127.0.0.1:22 --ssl
# ---- YOU ----
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 is a linux command
screen
python(or python3) slaver.py -m host:port -t host:port
# press ctrl-a d to detach screen
# and if necessary, use "screen -r" to reattach
TCPを使用するサービスはすべてshootbackに対応可能です。 HTTP/FTP/Proxy/SSH/VNC/...
shootback自体は転送のみを行い、暗号化やプロキシ処理は行いません。
ただし、slaverのターゲットとしてサードパーティのプロキシ(例:shadowsocks)を使用できます。
例:
shadowsocks_server<-->shootback_slaver<-->shootback_master<-->shadowsocks_client(socks5)
select.select() の制限により、shootbackは512同時接続以上を処理できません。ValueError: too many file descriptors in select() が発生する可能性があります。