使用Terraform构建Shadowsocks服务器,以便从中国国内访问Google和Twitter

背景 – 叙述所在的环境、条件或上下文的部分。

我最近有计划去中国待大约一个月。在这期间,我需要继续进行在线会议,但是在中国我无法直接访问谷歌、推特等网站。换句话说,我无法通过谷歌 Meet 进行在线会议,真是麻烦。

使用Shadowsocks这个工具,可以绕过网络限制,为了避免困扰,事先搭建一个服务器。

因为不想进行手动操作的基础设施管理,所以我会使用 Terraform 进行定义。

首先由结论开始

以下是 Terraform 的定义。只需更改配置即可部署。

 

影子套索?

Shadowsocks 是一种快速的隧道代理工具,可以帮助您绕过防火墙。

简单来说,它是用于绕过防火墙的代理服务器。

根据官方网站的说明,具有如下特点。

    • とても高速

 

    • 様々な暗号化アルゴリズムを選択できる

 

    • 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状态文件保存位置的文件。

请根据以下形式,指定适当的区域和存储桶名称,并指定具有写入权限的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

客户使用方法

客户端的安装 de

在官方网站上介绍了几个开源的客户端。如果在其他地方搜索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 在服务器内进行系统构建,就可以像处理 Docker 中的 EC2 一样轻松。