LoginSignup
0
0

中国国内からGoogleやTwitterにアクセスできるようにShadowsocksのサーバーをTerraformで構築する話

Posted at

背景

近々、一ヶ月ほど中国に行く予定があります。その間、オンラインミーティングを続ける必要があるのですが、中国からだと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サーバー接続時に使用されます)

Screenshot 2023-07-11 at 23.27.45.png

使い方(クライアント)

クライアントのインストール

公式サイトにいくつかのオープンソースのクライアントが紹介されています。他にも Shadowsocks で検索すれば色々なクライアントアプリがあります。

クライアントの設定例(Mac: shadowsocksX-NG)

(正しい接続情報を設定すれば、どんなクライアントからでも繋がります。)

まず、サーバーの設定を開きます。

Screenshot 2023-07-12 at 0.47.52.png

次に、接続情報を設定します。

  • Address:
    • shadowsocks + サーバーの設定ファイルに記載したRoute53のゾーンネーム
  • Port:
    • デフォルトは 1480
  • Encryption:
    • aes-256-gcm
  • Password:
    • サーバーデプロイ時に入力したパスワード

Screenshot 2023-07-12 at 0.49.22.png

認証情報を設定した後に、Shadowsocks クライアントを有効化すれば、自身のIPアドレスをチェックできるサイトでIPアドレスが変わったことを確認できます。

この状態であれば、中国国内からでも Google や Twitter などにアクセスすることができます。

Screenshot 2023-07-12 at 0.54.07.png

最後に

一回汎用的にTerraformで定義してしまえば、いつでも使いたい時に使えるので、本当に便利です。

サーバー内のシステム構築も user_data で実装すれば、EC2をDockerのように楽に扱えます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0