はじめに
ShadowsocksはセキュアなSOCKS 5プロキシを実現するプロトコルです。ShadowsocksRはShadowsocksのブランチで、データ難読化といった機能が追加されています。どちらも作者が開発をやめてしまったのですが、FOSSですのでミラーやフォークが出回っています。
とある国に出張中に「良いVPNはサービスは無いか」と聞いてみたところ、このプロトコルを使っているサービスを教えて貰いました。試しにそのサービス使ってみたところ、スマホに標準で付いているVPNクライアント機能ではなくアプリをインストールする方式だったことや、高速で快適だったので興味を持って調べ、私はShadowsocksというプロトコルのことを知りました。
快適とはいえ、見知らぬVPNプロバイダのサービスを本格的に使うことに私は抵抗があります。私の通信が見知らぬ人のサーバーを通過するのですから安心できません。また、VPNプロバイダのサービスの継続性にも疑問があります。そんな理由で、いつか自分のShadowsocksRサーバを構築しようと考えていました。今回、ちょうどアメリカのIPアドレスからトラフィックを発生させたい用事ができたので、AzureのWest USにVMを用意して構築をしてみました。
VM
AWSでもAzureでも良いのですが、最近は仕事でAzureを利用することが多いのでAzureにしました。West US(カリフォルニア州)に、Standard B1s (1 vcpus, 1 GiB memory)でCentOS 7のVMを用意しました。VMが起動したら、SSHでログインできるようにNwtworkingのInbound port rulesにport 22にアクセスできるよう設定をしました。
まず、CentOSをアップデートします。
$ sudo yum update
TCP BBRのインストール
次に、GoogleのTCP BBR (Bottleneck Bandwidth and Round-trip propagation time)という輻輳制御アルゴリズムを適用したkernelをインストールしました。やらなくても良いでしょうが、インストールしている例を多く見かけたので、teddysun氏の最新カーネルを自動でインストールしてくれるスクリプトを使ってインストールしました。
$ wget https://github.com/teddysun/across/raw/master/bbr.sh $ chmod +x bbr.sh $ sudo ./bbr.sh
私が実行したときには下記の2つのパッケージがインストールされました。
kernel-ml x86_64 5.3.6-1.el7.elrepo elrepo-kernel 48 M kernel-ml-devel x86_64 5.3.6-1.el7.elrepo elrepo-kernel 13 M
再起動を促されるので再起動し、再起動後にBBRが使われていることを確認しました。
$ sysctl net.ipv4.tcp_congestion_control net.ipv4.tcp_congestion_control = bbr
ShadowsocksRのインストール
$ wget https://github.com/teddysun/shadowsocks_install/raw/master/shadowsocksR.sh $ chmod +x ./shadowsocksR.sh $ sudo ./shadowsocksR.sh 2>&1 | tee ./shadowsocksR.log
すると、いくつかの確認があります。
Please enter password for ShadowsocksR: (Default password: teddysun.com):
まずはパスワードを決めなければならないので、ジェネレーターで作ったパスワードを入力しました。
Please enter a port for ShadowsocksR [1-65535] (Default port: 11544):
次にポート番号です。私はデフォルトから変更しました。
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) salsa20 14) xchacha20 15) xsalsa20 16) rc4-md5 Which cipher you'd select(Default: aes-256-cfb):12
暗号化アルゴリズムは、私はChaChaが新しくて良いなと思ったので、12の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 9) auth_chain_c 10) auth_chain_d 11) auth_chain_e 12) auth_chain_f Which protocol you'd select(Default: origin): --------------------------- 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): --------------------------- obfs = plain ---------------------------
ShadowsocksRのプロトコルはorigin、obfsもplainにしました。クライアントの選択肢を狭めないためです。 ここらへんのオプションの詳細は、中国語ですが、ssr.mdを参照すると良さそうです。
インストールは、下記のパッケージがインストールされた模様です。
================================================================================ Package アーキテクチャー バージョン リポジトリー 容量 ================================================================================ インストール中: autoconf noarch 2.69-11.el7 base 701 k automake noarch 1.13.4-3.el7 base 679 k gcc x86_64 4.8.5-39.el7 base 16 M libtool x86_64 2.4.2-22.el7_3 base 588 k openssl-devel x86_64 1:1.0.2k-19.el7 base 1.5 M python-devel x86_64 2.7.5-86.el7 base 398 k python-setuptools noarch 0.9.8-7.el7 base 397 k 依存性関連でのインストールをします: cpp x86_64 4.8.5-39.el7 base 5.9 M glibc-devel x86_64 2.17-292.el7 base 1.1 M glibc-headers x86_64 2.17-292.el7 base 687 k kernel-ml-headers x86_64 5.3.6-1.el7.elrepo elrepo-kernel 1.3 M keyutils-libs-devel x86_64 1.5.8-3.el7 base 37 k krb5-devel x86_64 1.15.1-37.el7_7.2 updates 272 k libcom_err-devel x86_64 1.42.9-16.el7 base 32 k libkadm5 x86_64 1.15.1-37.el7_7.2 updates 178 k libmpc x86_64 1.0.1-3.el7 base 51 k libselinux-devel x86_64 2.5-14.1.el7 base 187 k libsepol-devel x86_64 2.5-10.el7 base 77 k libverto-devel x86_64 0.2.5-4.el7 base 12 k m4 x86_64 1.4.16-10.el7 base 256 k mpfr x86_64 3.1.1-4.el7 base 203 k pcre-devel x86_64 8.32-17.el7 base 480 k perl-Data-Dumper x86_64 2.145-3.el7 base 47 k perl-Test-Harness noarch 3.28-3.el7 base 302 k perl-Thread-Queue noarch 3.02-2.el7 base 17 k python-backports x86_64 1.0-8.el7 base 5.8 k python-backports-ssl_match_hostname noarch 3.5.0.1-1.el7 base 13 k python-ipaddress noarch 1.0.16-2.el7 base 34 k python-rpm-macros noarch 3-32.el7 base 8.8 k python-srpm-macros noarch 3-32.el7 base 8.4 k python2-rpm-macros noarch 3-32.el7 base 7.7 k zlib-devel x86_64 1.2.7-18.el7 base 50 k
インストールが完了すると、サーバのIPアドレスやポート番号、パスワードなどの設定内容が表示されました。これをメモしておけばShadowsocksRサーバを利用することができます。
ShadowsocksRサーバの設定は、/etc/shadowsocks.json
に書いてあります。
起動スクリプトは/etc/init.d/shadowsocks
にインストールされていますので、このようにコマンドで実行を制御できます。再起動してもサービスが自動で起動されそうですね。
$ chkconfig 注記: この出力に含まれるのは SysV サービスのみです。ネイティブな systemd サービスは含まれません。SysV の設定データはネイティブな systemd 設定で上書きされる場合があります。 systemd サービスを一覧表示する場合は 'systemctl list-unit-files' を使用します。 特定のターゲットで有効になっているサービスを確認する場合は 'systemctl list-dependencies [target]'を使用します。 netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off shadowsocks 0:off 1:off 2:on 3:on 4:on 5:on 6:off $ service shadowsocks status ShadowsocksR (pid 47135) is running...
ちなみに、今使ったインストールスクリプトは、./shadowsocksR.sh uninstall
とオプションを付けることでアンインストーラーにもなるそうです。僕は試していません。
クライアント
僕はiPhoneを使っています。ShadowsocksRを使ったVPNサービスを教えてもらったとき、このVPNサービスのマニュアルでは、iPhone用のクライアントとしてShadowrocketが紹介されていました。これをiPhoneにインストールしていたので、このクライアントを使って今構築したShadowsocksRサーバに接続してみました。
apps.apple.commacOSで使うクライアントは、ShadowsocksX-NG-Rを使ってみて、正常に使えることを確認しました。他のプラットフォーム向けのクライアントについては、ShadowsocksRの追加機能には対応していない可能性がありますが、Shadowsocks - Clientsに紹介があります。
変更履歴
日付 | 変更者 | 変更内容 |
---|---|---|
2019/10/13 | ytsuboi | 作成 |