背景
近々、一ヶ月ほど中国に行く予定があります。その間、オンラインミーティングを続ける必要があるのですが、中国からだとGoogleやTwitterなどに直接アクセスできないです。つまりは Google Meet でオンラインミーティングできない訳ですね、困りました。
Shadowsocks というツールを使用すれば、ネットワークの制限を迂回できるようなので、困らないように事前にサーバーを立てておきます。
手作業のインフラ管理はしたくないので、Terraform で定義します。
まずは結論から
Terraform 定義はこちらです。設定書き換えるだけでデプロイできます。
Shadowsocks?
Shadowsocks A fast tunnel proxy that helps you bypass firewalls
ひとことで言うと、ファイアウォールを迂回するためのプロキシサーバーです。
公式サイトによると下記の特徴があります。
- とても高速
- 様々な暗号化アルゴリズムを選択できる
- CPU&帯域の使用量が低い
- クロスプラットフォーム
使い方(サーバー構築)
前提
terraform
コマンドがインストール済みであり、認証情報も設定されていることを想定しています。
コードの取得
まずGitHubからコードを取得します。
$ git clone https://github.com/MOCA-ORG/shadowsocks.git
設定ファイルの編集
README.md
に従って設定ファイルを用意します。
cp sample.tfbackend ./terraform/production.tfbackend
cp sample.tfvars ./terraform/production.tfvars
production.tfbackend
は Terraform の State ファイルの保存場所を指定するファイルです。
下記のような形になっているので、適切なリージョンとバケット名を指定して、書き込み権限のあるS3バケットを指定します。
bucket = "name-of-bucket"
key = "shadowsocks.tfstate"
region = "ap-northeast-1"
production.tfvars
はインフラ構成の設定です。
# EC2にSSH接続するために普段使用しているキーペアの名前を指定します。
key_name=""
# サーバーを配置するVPCのIDを指定します。
vpc_id=""
# サーバーを配置するパブリックサブネットのIDを指定します。
subnet_id=""
# SSH接続を許可する信頼できるIPのリストを指定します。
# 1.1.1.1 のIPが自身の信頼できるIPである場合は trusted_ips=["1.1.1.1/32"] を設定します。
trusted_ips=[]
# サーバーにドメインを割り当てるため、Route53のゾーンネームを指定します。
# 実際にRoute53上にゾーンが存在している必要があります。
# example.com を設定した場合、サーバーは shadowsocks.example.com のドメインを使用します。
route53_zone=""
デプロイ
Terraform のディレクトリに移動します。
cd ./terraform
Terraform の初期化
terraform init -reconfigure -backend-config=production.tfbackend
デプロイ
terraform apply -var-file production.tfvars
デプロイコマンドを実行すると、パスワードの入力が求められますので、任意のパスワードを入力します。(このパスワードはShadowsocksサーバー接続時に使用されます)
使い方(クライアント)
クライアントのインストール
公式サイトにいくつかのオープンソースのクライアントが紹介されています。他にも Shadowsocks で検索すれば色々なクライアントアプリがあります。
クライアントの設定例(Mac: shadowsocksX-NG)
(正しい接続情報を設定すれば、どんなクライアントからでも繋がります。)
まず、サーバーの設定を開きます。
次に、接続情報を設定します。
- Address:
-
shadowsocks
+ サーバーの設定ファイルに記載したRoute53のゾーンネーム
-
- Port:
- デフォルトは 1480
- Encryption:
- aes-256-gcm
- Password:
- サーバーデプロイ時に入力したパスワード
認証情報を設定した後に、Shadowsocks クライアントを有効化すれば、自身のIPアドレスをチェックできるサイトでIPアドレスが変わったことを確認できます。
この状態であれば、中国国内からでも Google や Twitter などにアクセスすることができます。
最後に
一回汎用的にTerraformで定義してしまえば、いつでも使いたい時に使えるので、本当に便利です。
サーバー内のシステム構築も user_data
で実装すれば、EC2をDockerのように楽に扱えます。