[中国金盾][VPN][ShadowsocksR][BBR] VPNを自分構築してみる


はじめに

中国では2018年7月から、一層ネットワークの検閲が厳しくなってきました。
以下はVPN大手VyprVPNを運営するgoldenfrogのブログです。
Chinese Government Increases VPN Blocking by 300%

筆者は、VyprVPNを使っていますが、同時に自分でGMOの運営するConoHaを使って、
日本にshadowsocksを使ってプロキシサーバーを立てています。
しかし、7月以降はどちらもパケットロスが多くなり、Youtubeをストレスなく見るのも困難になってきました。

改善を図るべく、色々探しました。その結果以下の記事に辿り着きました。
GoogleのTCP BBRでTCPを高速化しProxyもその恩恵にあずかる
BBRはTCPの輻輳制御アルゴリズムの一種です。「輻輳制御」とはTCP通信(パケット)が混雑したときにどう制御するかということです。
国外への通信はパケットが簡単にロストしたりして、通信が遅延しがちです。
中国から国外に通信するときは特に顕著です。
これを自前のプロキシサーバーに導入したところ2~3倍の効果が見られました。

そこで、中国でVPNに悩んでいる人に少しでもお役に立てればと、VPNサーバーの構築方法及び、BBRの導入方法について
説明したいと思います。

ちなみに、個人のはてなブログにはAWS上にshadowsocksサーバーを構築する記事を書きましたので、エンジニアの方はそちらもどうぞ参考にされてください。
https://nishiyama.hatenablog.com/entry/shadowsocks-on-aws

では話を戻しまして、構成は以下のようになっています。

  • ConoHa VPS
  • CentOS
  • BBR
  • ShadowsocksR

サーバーはConoHaから借ります。メリットは、サーバーの場所を日本・シンガポール・アメリカから選べること。サーバーの再構築で、新しいIPアドレス付番されること。WEBコンソールがあることなどです。あと従量課金です。
VPNアプリは、ShadowsocksRを採用します。導入しやすく、安定性も高いです。
これにより、全ての作業をWEBブラウザ上で行うことが出来ます。

Shadowsocksのメリットは以下を参考にして下さい。
もうVPNは不要!?新接続方式Shadowsocksを使ってみたら驚愕した

ConoHa VPSの準備

ConoHaはGMOが運営するVPSサービスです。クラウド上のサーバーを貸してくれます。
サーバーは、執筆時点で東京、アメリカ、シンガポールから選べて、
東京の1GBモデルで、1時間1.3円となっています。1ヶ月最低900円と1000円未満でサーバーを1ヶ月運用することができます。

以下がConoHaのホームページです。
https://www.conoha.jp/
まず登録しましょう。

料金体系

今回はサーバースペックは貧弱でいいので、512MBのプランで結構です。
従量課金制ですので、サーバーを動かしている時間に対して課金されます。注意点は、サーバーを停止していても「存在している」だけで課金は発生します。ですので、不要になったサーバーは破棄しましょう。

サーバーの作製

ダッシュボードからサーバーを作製します。リージョンですが、まずは東京で立てましょう。安いので。
サーバーは512MBが表示されていれば、そちらを利用してもらっても結構です。なぜか筆者のアカウントでは発見できず。以下の画像では1GBモデルで構築しました。
では、CentOS(7.5)を選択して下さい。その後、下部のroot パスワードに任意のパスワード(英数字と大文字と記号が必要です)を入力して、右の追加ボタンを押します。(ここで入力したパスワードは後で使うので、忘れないようにして下さい)

追加ボタンを押した後は、自動でサーバーリストに遷移します。構築したサーバーを見つけて、詳細を見てみましょう。

「Qiita-Demo-vps-2018-08-16-10-54」というサーバーが今回私が作製したサーバーです(サーバー構築時に名前を付けました)。
このサーバーは今回の執筆用に建てたので、早くこの記事を書き終わらないと、課金が止まりません。頑張ります。

サーバーの詳細は以下になります。ここに書いていあるIPアドレスは後でつかうので、ここに記載されていることを覚えておきましょう。

そしたら上部にあるコンソールとかかれた箇所をクリックして、サーバーにログインしましょう。
クリックすると別ウィンドウ(コンソール)が立ち上がります。昔でしたら、このコンソールというのは、自分のPCから繋いで、がちゃがちゃするものだったのですが、ブラウザ上で可能になっています。初心者には非常に便利です。

ログインユーザーは「root」、パスワードは先ほどサーバーを構築する際に指定した「rootパスワード」になります。
ちなみにパスワード欄で、キーボード打っても、何も表示されませんが、安心して下さい。見えないだけです。入力が終わったらEnterキーを押して下さい。
コンソールへの接続は多少不安定のようですので、うまく接続できていないようでしたら、一回ウィンドウを閉じて、再度コンソールを開いてみて下さい。

筆者がハマった点として、海外でPCを使っている人はキーボードが日本語配列でないことがあるかと思います。
ConoHaのコントロールパネルに入力する際には、デフォルトが日本語キーボードの配置になってしまっているようで、入力した値と別の値が入力されているときがあります。その際は、「テキスト送信」というところで入力して直接送信することができます。
筆者はパスワードの中で使っている記号が日本語と英語キーボードで配置が違くて、これに気づくのに5分かかりました。

うまくログインできましたでしょうか?pwddateなど入力してみましょう。現在の場所や日時が表示されましたでしょうか?

以上でサーバーの作製は完了です。以降の作業は全て、このコンソール上で行っていきます。

CentOSのUpdate

まずは肩慣らしに、CentOSを更新しましょう。

$ yum update

というコマンドをテキスト送信の欄に入力して、送信ボタンを押すと、コンソールに入力されますので、Enterで確定させて下さい。
今後は、コマンドをこのように入力していきましょう。(テキスト送信欄にしかコピペができないためです。)
ちなみに$の部分は入力する必要ありません。これはコマンドを示す記述用の記号です。
途中で、yes/no聞かれたら全てy(yes)で結構です。
Updateにはしばらく時間(5分程度)がかかるので、休憩していて下さい。

BBRの導入

BBRに導入に関しては、以下の記事をそのまま実行していきます。
GoogleのTCP BBRでTCPを高速化しProxyもその恩恵にあずかる
以上の記事をまとめると、以下のコマンドを実行することになります。

$ wget https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x ./bbr.sh && ./bbr.sh

あまり深く考えずに、こちらを実行してインストールして下さい。インストール時に再起動が走りますので、
再起動して再度ログインしましょう。

そして以下のようになっていれば、BBRの導入成功です。

$ sysctl net.ipv4.tcp_congestion_control
net.ipv4.tcp_congestion_control = bbr

ShadowsocksRの導入

この記事のまま導入しましょう。
CentOSでのShadowsocksRサーバー構築(安全性の高いProxyを簡単に)

先ほど同様に一括入力コマンドは以下のようになります。

wget https://github.com/teddysun/shadowsocks_install/raw/master/shadowsocksR.sh && chmod +x ./shadowsocksR.sh && ./shadowsocksR.sh

導入時に入力していった内容は全て控えておいて下さい。

クライアントアプリの設定時に必要になります。
以下のように入力して、画像のようにShadowsocksR(pid xxxx) is runningと表示されたら、ShadowsocksRの導入完了です。

$ /etc/init.d/shadowsocks status

クライアントアプリの導入

中国のAppleStoreではVPNクライアントアプリが締めだされています。
アップル、中国のApp StoreからVPNアプリ削除か
いたちごっこにはなりますが、ここは頑張りどころです。
「shadowsocks クライアントアプリ」などで検索してなんとかインストール頑張って下さい。
以下は、筆者が利用した取得先です。なお筆者はiPhone, Andorid, Mac, Windows, Amazon Fire HDに
アプリをインストールして、利用しています。中国でインストールが難しい場合は、VPNアプリを利用してダウンロードしたり、日本に居る時などにインストールしましょう(VPNアプリをインストールするのにVPNが必要という悲しい状況ですが)。

iPhone

Shadowsocksサーバーに接続するためのアプリはいくつかあるのですが、筆者はWaterdropを使っています。
中国AppleStoreでは出てこない場合は、日本などに切り替えて探してみて下さい。
How Do I Download and Install Water Drop for Shadowsocks Using iPhone ?
設定内容は以下のようになります。

サーバーにはConoHaでサーバー構築した際のIPをアドレスを入力して下さい。
Port・Password・EncryptionにはShadowsocksRをインストールした際に、入力(選択)した値を指定して下さい。
そしたら、Shadowsocks接続をONにしてください。Googleの検索や、Youtubeが見れたら接続成功です。
以下で案内しているAndroidやMac, Windowsでも設定の手順は一緒です。

Android

Android
https://shadowsocks.en.uptodown.com/android

Mac, Windows

Tips

ShadowsockR構築時の情報

以下のように入力するとshadowsockrをinstallした際に入力した情報を見ることが出来ます。

$ cat /etc/shadowsocks.json
{
   "server":"0.0.0.0",
   "server_port":"17335",
   "password":"your-password",
   "method":"xchacha20",
   ...
}

ShadowsocksRサーバーの再インストール

以下のコマンドでShadowsocksRのインストールと起動を再度行うことができます。パスワードを入力しなおしたりなどの再に利用下さい。

$ ./shadowsocksR.sh

サーバーのSnapshot

ConoHaにはサーバーのスナップショットを取って、イメージを作製する機能があります。
今回のサーバー作製が無事終わりましたら、一度スナップショットを取っておきましょう。
そうすれば、それから再度サーバーを構築することができます。IPアドレスそのものが金盾にブロックされたときなどは、
ボタン一つで同じサーバーを新しいIPアドレスで構築することができます。

参考

CentOSでのShadowsocksRサーバー構築(安全性の高いProxyを簡単に)
一つのコードが中国のインターネットを変えた | Shadowsocksに纏わるストーリー
もうVPNは不要!?新接続方式Shadowsocksを使ってみたら驚愕した
GoogleのTCP BBRでTCPを高速化しProxyもその恩恵にあずかる