K's Tech Blog

海外を拠点としながら働くWEB系エンジニアの徒然ブログ

shadowsocksサーバーをAWSにCloudFormationで構築する

こんにちは。

以下の記事は私が昔に書いたQiitaなんですが、未だにアクセスがありまして、shadowsocksの構築話はニーズがあるんだなと思いました。

qiita.com


ですので、今回はAWSのCloudFormationを使って、shadowsocksサーバーを建ててみようと思います。

構成図

構成は非常にシンプルです。以下をご覧ください。


AWS構成図
AWS構成図


EC2インスタンスを1つ建てるだけといえば、それまでです。
ネットワーク周りで、VPC, Subnet, RouteTableの構築と、その中にEC2インスタンスを構築します。
構築場所は東京リージョンで、中国からshadwsocksのクライアントアプリを使ってアクセスして、東京から自由なインターネットの世界に出ていくというものです。




構築してみる - テンプレート作成

では建ててみましょう。

AWSコンソールのCloudFormationを開いて、スタックを作成します。
テンプレートは「デザイナーでテンプレートを作成」で作成します。

AWS スタックを作成する
AWS スタックを作成する

テンプレート作成画面では、左下のテンプレートタブを選んで、テンプレートの選択言語はYAMLを選択してください。

AWS テンプレート作成画面
AWS テンプレート作成画面

そうしましたら、テンプレートを貼り付けましょう。
以下の私のGitHubにテンプレートを置いてありますので、中身をコピーしてまるっと貼り付けてください。
その後、左上の雲アイコンをクリックしてください。テンプレートがS3に自動で保存されて、前の画面に戻ります。
ansible/construct-shadowsocks.yml at shadowsocks-hatena · nishiyama-k/ansible · GitHub

AWS テンプレート貼り付け保存
AWS テンプレート貼り付け保存

構築してみる - Stackの作成

S3に保存されたテンプレートを参照するようになっており、AmazonS3URLが入力されています。では、右下の次へをクリックしてください。

AWS S3にテンプレート保存
AWS S3にテンプレート保存

この画面ではパラメーターを設定します。

AWS パラメーター設定
AWS パラメーター設定

以下はパラメーターの説明になります。

  • Version : 任意のバージョン番号を入れてください。構築には利用しませんので、初期値でも問題ないです。
  • EnvName: 環境名です。このCloudFormationで生成するリソースの名前に利用されます。初期値でも問題ないです。
  • VPCCIDR: この環境のVPCのCIDRです。初期値で問題ないです。
  • AMIID: shadowsocksサーバーをインストロールするAMIになります。RedHat系でしたら、他のAMIでもいいです。初期値で問題ないです。
  • InstanceType: EC2のインスタンスタイプです。shadowsocksは軽いので小さいインスタンスタイプを用意してあります。t3.nanoが一番安いのです。
  • KeyPair: EC2インスタンスsshでログインするための秘密鍵です。あらかじめ作成しておいてください。
  • AdminIP: EC2インスタンスsshでログインを許可するためのIPアドレスです。自身のグローバルIPを入力してください。
  • Password: shadowsocksクライアントアプリから接続する際に利用するパスワードです。自分のパスワードを設定しましょう。
  • Port: shadowsocksクライアントアプリから接続するポートになります。初期値でも問題ないです。
  • Cipher: shadowsocksクライアントアプリから接続する際の暗号化方式です。初期値でも問題ないです。

構築した後は、sshを利用してサーバーにログインしなくてもshadowsocksは利用できるので、ログインしないのでしたら、KeyPairやAdminIPは適当な値でも問題ないです。

そしたら、後はどんどんNextStepしてください。すべて初期値でいいです。Stack構築が開始され、成功するとCREATE_COMPLETEステータスになります。

Stack作成
Stack作成

上記の、出力のServerIP部分が、接続先サーバーのIPアドレスになります。

EC2 Instance shadowsocks
EC2 Instance shadowsocks


EC2インスタンスの一覧からも構築されたサーバーが確認できます。構築したサーバーのPublicIPが接続先になります。

リソースを削除したり、やり直したい場合は、CloudFormationのスタックを削除してもらえれば、全部削除できます。
また、よく金盾でIPがブロックされることもあるでしょうから、その場合はElasticIPを使って、IPを変更してもいいでしょう。


以上です