Shadowsocksは、元々は中国の金盾(グレート・ファイアウォール)対策として生み出されたものですが、安全性の高いProxyとしての利用価値も高い仕組みです。
日本では知名度が低く日本語の情報も皆無のため、サーバーの構築方法やクライアントを紹介してみる事にしました。
対象としている人
- 中国の方が開発した技術への偏見がない人
- 最低限のLinuxの知識がある人
- Proxyを構築する事に興味がある人
- 中国やエジプト等でのインターネット規制に困っている人
Shadowsocksとは?
Shadowsocks(通称SS) は、SSHトンネル を Socks5 によって行うクライアント ⇔ サーバー型のプロトコルで、中国の金盾によるインターネット規制に対抗する仕組みとして、中国の Clowwindy氏 によって開発されました。
ShadowsocksR(通称SSR) は、その Shadowsocks を元に、互換性を保ちつつ主にセキュリティ面の機能を追加した派生バージョンで、中国の breakwa11氏 によって開発されました。
両者とも、GitHub上で自由に閲覧できるオープンソースプロジェクトです。
- GitHub Shadowsocks
-
GitHub ShadowsocksR
- 「R」の本家リポジトリは削除された(理由は後述)ため、Google検索結果へのリンクです。
図解も含めた詳説は、コチラのページが分かりやすいと思います。私も中国語は全くできませんが、Google翻訳等を活用して英語に翻訳1すれば、何となく意味は分かるかと思います。
ShadowsocksRサーバーの構築
-
さくらインターネットのVPS「さくらのVPS」を利用しています。
-
CentOS6.8で検証しました。
- 6.9や7系でも問題ないと思いますが、未検証です。
-
インストールはGitHubでteddysun氏が公開しているシェルスクリプトを利用しています。
- Python版のShadowsocksRをインストールします。Python実行環境が未インストールの場合は自動でインストールします。
- iptablesによるポート開放なども行いますので、内容が気になる方はよく確認してください。
インストールスクリプトのダウンロード ~ 実行
#-- インストールスクリプトをダウンロード
$ wget https://github.com/teddysun/shadowsocks_install/raw/master/shadowsocksR.sh
#-- 実行権限を与える
$ chmod +x ./shadowsocksR.sh
#-- インストールスクリプトを実行(shadowsocksR.logとしてログを残す)
$ ./shadowsocksR.sh 2>&1 | tee ./shadowsocksR.log
インストール
#############################################################
# One click Install ShadowsocksR Server #
# Intro: https://shadowsocks.be/9.html #
# Author: Teddysun <i@teddysun.com> #
# Github: https://github.com/shadowsocksr/shadowsocksr #
#############################################################
Please enter password for ShadowsocksR:
(Default password: teddysun.com):
---------------------------
password =
---------------------------
Please enter a port for ShadowsocksR [1-65535]:
(Default port: 8989):
---------------------------
port =
---------------------------
Please select stream cipher for ShadowsocksR:
1) none
2) aes-256-cfb
3) aes-192-cfb
4) aes-128-cfb
5) aes-256-cfb8
6) aes-192-cfb8
7) aes-128-cfb8
8) aes-256-ctr
9) aes-192-ctr
10) aes-128-ctr
11) chacha20-ietf
12) chacha20
13) rc4-md5
14) rc4-md5-6
Which cipher you'd select(Default: aes-256-cfb):12
---------------------------
cipher = chacha20
---------------------------
Please select protocol for ShadowsocksR:
1) origin
2) verify_deflate
3) auth_sha1_v4
4) auth_sha1_v4_compatible
5) auth_aes128_md5
6) auth_aes128_sha1
7) auth_chain_a
8) auth_chain_b
Which protocol you'd select(Default: origin):1
---------------------------
protocol = origin
---------------------------
Please select obfs for ShadowsocksR:
1) plain
2) http_simple
3) http_simple_compatible
4) http_post
5) http_post_compatible
6) tls1.2_ticket_auth
7) tls1.2_ticket_auth_compatible
8) tls1.2_ticket_fastauth
9) tls1.2_ticket_fastauth_compatible
Which obfs you'd select(Default: plain):1
---------------------------
obfs = plain
---------------------------
-
password
- 任意のものを入力
-
port(使用するport番号)
- デフォルトは8989ですが、変更した方が良いと思います。
-
cipher(TLSのストリーム暗号方式)
- RFC 7905で標準化された chacha20 にしました。
-
protocol と obfs
- 「R」のみにある設定ですが、クライアントが対応していない事があるので、デフォルトの値(=オリジナル版と同じ)にしました。
以上を入力すると…
Press any key to start...or Press Ctrl+C to cancel
…と表示されますので、問題がなければEnterを押せばインストールが始まります。キャンセルしたい場合はCtrl+Cでやり直せます。
Starting ShadowsocksR success
Congratulations, ShadowsocksR server install completed!
Your Server IP :
Your Server Port :
Your Password :
Your Protocol :
Your obfs :
Your Encryption Method:
インストールが成功するとShadowsocksRが起動し、設定した内容の確認が表示されます。
#-- ShadowsocksRが起動している事を確認
$ /etc/init.d/shadowsocks status
ShadowsocksR (pid 23456) is running...
$ ps aux | grep shadowsocks | grep -v grep
python /usr/local/shadowsocks/server.py -c /etc/shadowsocks.json -d start
設定の変更
上記からも分かる通り、設定ファイルは /etc/shadowsocks.json
にあります。
$ vi /etc/shadowsocks.json
$ /etc/init.d/shadowsocks restart
設定を変更する際は、適当なエディタで編集後、再起動すればOKです。
アンインストール
$ ./shadowsocksR.sh uninstall
その他の情報
-
サービス操作スクリプト:
/etc/init.d/shadowsocks
-
start
stop
restart
status
等の主要なコマンドを使えます。
-
-
ログファイル:
/var/log/shadowsocksr.log
ShadowsocksRサーバーの高速化
GoogleのTCP BBRを利用して高速化する記事を作成しました。SquidでProxyを構築している場合でも十分試す価値はあると思いますので、興味がある方は併せてご参考ください。
Shadowsocksクライアント
ここまでの内容が理解できる方であれば、クライアントの設定や構築したサーバーへの接続テストは簡単にできると思います。
- Windows版
- https://github.com/shadowsocksrr/shadowsocksr-csharp/releases
- 設定画面に萌え絵?が表示されますが、これは作者のbreakwa11氏が、今は削除されてしまったGitHubやTwitterアカウントで愛用していたものです。耐性がないとちょっと恥ずかしい…(笑)
- Macintosh版(未調査です)
- Android版(未調査です)
- iPhone版(無料アプリのみ調査)
- Waterdropが使いやすかったですが、「R」で追加された機能は利用できません。
- Mume VPNは「R」の追加機能にも対応している他、Shadowsocksを通すかどうかのルールを細かく設定できたりもしますが、使い勝手はイマイチです。
クライアントを設定後は下記サイトにアクセスし、IPアドレスが構築したサーバーのものになっている事を確認してください。Proxy関連の環境変数は何も吐き出さない筈です。
この記事を作成した2017年10月31日は中国に居ましたが、Windows版とiPhone版で問題なく接続できる事を確認しました。その他のクライアントは未調査です。
余談:Shadowsocks開発者への圧力
中国は経済のみが自由化されましたが、今でも共産党の一党独裁制によって成り立っている社会主義国家であり、インターネットの検閲手段である金盾を回避するような技術には圧力がかけられています。
非常に残念な事ですが、Clowwindy氏 breakwa11氏 共に、現在はShadowsocksの開発には参加していません。詳しくは以下のサイトをご覧ください。
参考URL
- https://shadowsocks.be/9.html
- https://shadowsocks.org/en/
- https://github.com/shadowsocksrr/shadowsocks-rss/wiki
-
中国語の専門的な文章は、日本語よりも英語に翻訳した方が理解しやすい場合が多いです。 ↩