1. 创建实例

登录AWS控住台,创建EC2实例,设置实例

  • 定制服务器类型: Ubuntu Server
  • 选择实例类型: 默认免费即可
  • 配置实例:默认
  • 添加存储:默认
  • 配置安全组:先配置所有流量和端口开放
  • 生成密钥对:创建新密钥对,填写密钥对名称(如ufresh2011),下载密钥对。(下载下来是 私有密钥文件 .pem文件)。连接远程服务器时,需要再密钥文件下的文件目录里操作。
  • 创建账单警报:接受账单警报,自动监控免费套餐是否超额,将要超额会向你的邮箱发邮件。
  • 编辑入站规则,开通22端口(ssh)和8388端口(ssserver)
    网络与安全 -> 安全组 -> 操作 -> 编辑入站规则
    1
    2
    3
    # 类型 协议 端口范围 来源
    SSH TCP 22 自定义 0.0.0.0/0
    自定义TCP规则 TCP 8388 自定义 0.0.0.0/0

2. 登录服务器

定制完成后,可以远程登录,在实例上右击,点击连接

1
2
chomd 400 xxx.pem
ssh -i "xxx.pem" xxx.com

3. 安装ss

1
2
3
4
5
6
7
8
9
10
11
12
# 获取root权限
sudo -s

# 更新apt-get
apt-get update

# 安装python包管理工具
apt-get install python-setuptools
apt-get install python3-pip

# 安装shadowsock
pip3 install shadowsocks

配置shadowsocks

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mkdir /etc/shadowsocks
vim /etc/shadowsocks/config.json

# config.json文件内容
{
"server":"0.0.0.0",
"server_port":8388,
"local_address":"127.0.0.1",
"local_port":1080,
"password":"///",
"timeout":300,
"method":"aes-256-cfb",
"fast_open":false,
"workers": 1
}

4. 启动shadowsocks

1
2
3
4
5
6
7
8
# 启动
ssserver -c /etc/shadowsocks/config.json -d start

#停止
ssserver -c /etc/shadowsocks/config.json -d stop

# 重启
ssserver -c /etc/shadowsocks/config.json -d restart

启动时候会有报错

  • 升级openssl导致无法使用
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    INFO: loading config from /etc/shadowsocks/config.json
    2019-11-16 12:49:16 INFO loading libcrypto from libcrypto.so.1.1
    Traceback (most recent call last):
    File "/usr/local/bin/ssserver", line 11, in <module>
    load_entry_point('shadowsocks==2.8.2', 'console_scripts', 'ssserver')()
    File "/usr/local/lib/python3.6/dist-packages/shadowsocks/server.py", line 34, in main
    config = shell.get_config(False)
    File "/usr/local/lib/python3.6/dist-packages/shadowsocks/shell.py", line 262, in get_config
    check_config(config, is_local)
    File "/usr/local/lib/python3.6/dist-packages/shadowsocks/shell.py", line 124, in check_config
    encrypt.try_cipher(config['password'], config['method'])
    File "/usr/local/lib/python3.6/dist-packages/shadowsocks/encrypt.py", line 44, in try_cipher
    Encryptor(key, method)
    File "/usr/local/lib/python3.6/dist-packages/shadowsocks/encrypt.py", line 83, in __init__
    random_string(self._method_info[1]))
    File "/usr/local/lib/python3.6/dist-packages/shadowsocks/encrypt.py", line 109, in get_cipher
    return m[2](method, key, iv, op)
    File "/usr/local/lib/python3.6/dist-packages/shadowsocks/crypto/openssl.py", line 76, in __init__
    load_openssl()
    File "/usr/local/lib/python3.6/dist-packages/shadowsocks/crypto/openssl.py", line 52, in load_openssl
    libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,)
    File "/usr/lib/python3.6/ctypes/__init__.py", line 361, in __getattr__
    func = self.__getitem__(name)
    File "/usr/lib/python3.6/ctypes/__init__.py", line 366, in __getitem__
    func = self._FuncPtr((name_or_ordinal, self))

定位到/usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py文件:
修改52,111行处的EVP_CIPHER_CTX_cleanup为EVP_CIPHER_CTX_reset 重启服务

5. 电脑上安装shadowsock

服务器地址:查看正在运行中的实例,找到公有ip
服务器端口:8388
密码:///
加密: aes-2560-cfb

结束!

6. 原理

在很久以前,访问各种网站都是简单而直接的,用户的请求发送到服务器,服务器直接将信息反馈给用户。有一天,GFW出现了,每当用户获取信息,都经过GFW,GFW将一些内容过滤掉,当用户触发GFW的过滤规则时,就会收到Connection Reset这样的响应内容,而无法接收到正常的内容,

ss利用境外服务器代理的方法绕过GFW的过滤。

  • 首先用户和境外服务器基于ssh建立起一条加密的通道
  • 用户通过建立起的隧道进行代理,通过ssh server向真实的服务发起请求
  • 返回内容再通过创建好的隧道返回给用户。

参考资料