AzureでShadowsocksサーバーを簡単に立てる方法

中国に滞在する時、いつも気がかりなのが金盾(GF)によるネット規制。Google各種サービスやLINEなど、常日頃から使用しているサービスが急に使えなくなるのは何だかんだ不便なもの。

今のところ、こちらの記事でも紹介した香港SIMを使うことで回避しているが、

ホテルのWi-Fi等を使用する際はもちろん金盾に規制されてしまう。

滞在中はそこまで大きなデータを扱うことは無いが、SIMの通信速度やデータ通信量を考えるとWi-Fiでも使えるに越したことは無い。

 

そこでVPN(Shadowsocks)の出番だ

VPNについては割愛するが、中国ではL2TPやPPTP、IKEv2といった一般的な通信プロトコルは簡単に規制されてしまうため、金盾回避のために作られたShadowsocks(SS)、ShadowsocksR(SSR)を使うのが一般的。

※ただし、2019/3/5から開催された全人代に際して行われたネット規制ではShadowsocksも対象になったそうなので、もはやSSが安全と言える状態ではないようだ。

中国を対象としたVPN業者はいくつかあり、お金さえ払えばSS対応のVPNサービスを利用することは可能だが、ここはひとつ自分でSS対応のVPNサーバーを構築してみようと思う。

 

 

Shadowsocks環境の導入方法

導入方法はこのあたりで紹介されている。SSはdockerを使うとコマンドを一行叩くだけで構築できるらしい。めっちゃ簡単。

自宅の回線を使ってもいいが、万が一IPがブロックされた時のためにVPSサービスを使う方がよさそうだ(サーバーを作り直せばIPが変わる上に、複数のリージョンにサーバーを立てられる)。

 

せっかくだから俺はこのAzureを選ぶぜ

私はMicrosoft Azureを選択。理由は簡単で、毎月1万円分のサブスクリプションが余ってて勿体ないというだけ。

Azureでの導入もdockerで一発のようで、こちらのページに導入方法が解説されていた。

管理画面内でコマンドプロンプトを立ち上げて、Bashを選んで以下のコマンドを叩くだけ

az container create -g shadowsocks --name shadowsocks1 --image oddrationale/docker-shadowsocks --ip-address public --ports 8388 --command-line "/usr/local/bin/ssserver -k password1"

実際の導入時は、shadowsocks1の部分を既存のリソースグループ名に、password1の部分を任意のパスワード文字列に置き換えておくこと。

001.png

JSON形式で接続情報が返ってきたら作成成功。これでShadowsocksサービスが起動している。

003.png

管理画面でも、「状態:実行中」となっており動作していることが分かる。

なお、IPアドレスは起動する度に変わるようだ。流石に実行中に変わることは無いだろうから、サービスを起動するたびにIPアドレスをメモっておかないといけない。

 

なお画像では場所が東南アジアになっているが、リソースグループ作成時に西日本日本も選択できるので、地域制限のあるサービスを利用するのであればその場所に応じたリージョン選択を忘れないようにしてほしい。
※西日本リージョンはContainer Instancesサービスが提供されていないため選択不可のようだ

 

料金の方はいかほどで...

このAzureのサービス、正確にはContainer Instancesと言うらしい。Dockerコンテナを気軽に実行できるサービスで、処理を実行した時間に対して課金される従量制。

簡単な料金計算はこちらでできるようだが、めっちゃ分かりにくい...

例 1:
vCPU が 1 個、1 か月の期間 (30 日間) 1 日 1 回 1 GB の構成を行う Linux コンテナー グループを作成したとします。
各コンテナー グループの使用時間は、5 分間 (300 秒) です。 メモリ使用時間:
コンテナー グループの数 * メモリ使用時間 (秒) * GB * GB 秒あたりの料金 * 日数
1 コンテナー グループ * 300 秒 * 1 GB * GB 秒あたり ¥0.0001721 * 30 日 = ¥1.55 vCPU 使用時間:
コンテナー グループの数 * vCPU 使用時間 (秒) * vCPU * vCPU 秒あたりの料金 * 日数
1 コンテナー グループ * 300 秒 * 1 vCPU * vCPU 秒あたり ¥0.0015743 * 30 日 = ¥14.17
課金合計:
メモリ使用時間 (秒) + vCPU 使用時間 (秒) = 料金総額
¥1.55 + ¥14.17 = ¥15.72

紐解いてみたらこうだ。

①使用時間に応じてメモリ・CPUそれぞれ課金される。
②メモリの課金は、使用時間(秒) × 使用量(GB) × 使用料(¥0.0001721) ×日数
③CPUの課金は、使用時間(秒) × CPU数 × 使用料(¥0.0015743) ×日数

つまり、丸一日Shadowsocsサーバーを立ち上げていた場合、以下のようになるはずだ。

メモリは 86400(秒)×1(GB)×¥0.0001721 ≒ 15円
CPUは 86400(秒)×1(GB)×¥0.0015743 ≒ 136円
合計 151円

ちなみに「使用料」と書いた部分はリージョンによって変動する。上の例は東南アジアを選択した場合の値段で、米国を選択するともう少し安くなるようだ。
なお西日本はContainer Instancesが提供されてないため選択できず、東日本は「該当なし」と表示されてしまい値段は分からなかった。

 

この値段なら1か月稼働させても4500円ほど。ShadowsocksRと並行して2個立ち上げてもサブスクリプションの1万円を超えることは無いだろう。
とはいえ思わぬ課金が発生したら嫌なので、何日か様子を見てから色々触ってみようと思う。

なお、これはあくまでも1万円分を使い切るための計画なので、特にAzureの特典がない人はAmazonのVPSサービス「Lightsail」の最安プラン(月3.5ドル)の方が断然安くてオススメ。

004.png

メモリは512MBだが問題はないだろう(Shadowsocksってどれぐらいのリソースが必要なんだ?)。

リージョンには日本(東京)もあるので困ることは無い。Amazonつよい。

 

AndroidでShadowsocksサーバーに接続

だいぶ話がそれてしまった。Android端末からShadowsocksサーバーに接続するにはアプリが必要のようだ。

Google PlayストアからShadowsocksというアプリをインストールし、こちらを参考にサーバー情報を入力した。

006.png

無事接続に成功。ボタンをワンタップするだけで接続することができるようになった。

ちなみに接続情報はこの通り。

007.png

東南アジアリージョンのサーバーはシンガポールにあるようだ。

 

試しに東日本リージョンで実行してみると、

010.png

このように東京が表示された。これなら日本のサービスにも接続できるだろう。一安心。

 

ということで

無事Shadowsocksサーバーの構築からAndroid端末でのアクセスまで簡単にできてしまった。これで安心して中国のWi-Fiを使うことができる。

Azureの管理画面であるportal.azure.comやMicrosoft関係のドメインは金盾にブロックされていないようなので、

009.png

中国に行ってからでも管理画面にアクセスすることができる。サービスの再起動やIPアドレスの確認、Shadowsocksサーバーのリージョン変更などなど対応できるので安心だ。

Azureのモバイルアプリもあるので、スマホ単体でサッとAzureサービスを起動してVPNアクセスができるのは魅力的だ。

 

折角なのでこの調子で明日はShadowSocksRの方にもチャレンジしてみたい。

コメントする