shadowsocksサーバーをAWSにCloudFormationで構築する
こんにちは。
以下の記事は私が昔に書いたQiitaなんですが、未だにアクセスがありまして、shadowsocksの構築話はニーズがあるんだなと思いました。
ですので、今回はAWSのCloudFormationを使って、shadowsocksサーバーを建ててみようと思います。
構成図
構成は非常にシンプルです。以下をご覧ください。
EC2インスタンスを1つ建てるだけといえば、それまでです。
ネットワーク周りで、VPC, Subnet, RouteTableの構築と、その中にEC2インスタンスを構築します。
構築場所は東京リージョンで、中国からshadwsocksのクライアントアプリを使ってアクセスして、東京から自由なインターネットの世界に出ていくというものです。
構築してみる - テンプレート作成
では建ててみましょう。
AWSコンソールのCloudFormationを開いて、スタックを作成します。
テンプレートは「デザイナーでテンプレートを作成」で作成します。
テンプレート作成画面では、左下のテンプレートタブを選んで、テンプレートの選択言語はYAMLを選択してください。
そうしましたら、テンプレートを貼り付けましょう。
以下の私のGitHubにテンプレートを置いてありますので、中身をコピーしてまるっと貼り付けてください。
その後、左上の雲アイコンをクリックしてください。テンプレートがS3に自動で保存されて、前の画面に戻ります。
ansible/construct-shadowsocks.yml at shadowsocks-hatena · nishiyama-k/ansible · GitHub
構築してみる - Stackの作成
S3に保存されたテンプレートを参照するようになっており、AmazonS3URLが入力されています。では、右下の次へをクリックしてください。
この画面ではパラメーターを設定します。
以下はパラメーターの説明になります。
- 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ステータスになります。
上記の、出力のServerIP部分が、接続先サーバーのIPアドレスになります。
EC2インスタンスの一覧からも構築されたサーバーが確認できます。構築したサーバーのPublicIPが接続先になります。
リソースを削除したり、やり直したい場合は、CloudFormationのスタックを削除してもらえれば、全部削除できます。
また、よく金盾でIPがブロックされることもあるでしょうから、その場合はElasticIPを使って、IPを変更してもいいでしょう。
以上です