使用 Shadowsocks + SwitchyOmega 科学上网实践

本文内容仅作交流学习和查阅技术资料之用,请勿用于商业用途!如造成任何后果,本文作者概不负责。谢谢您的关注!

如果您有任何问题或建议,可以发送邮件到 zrg1390556487@gmail.com

1. 服务端

1.1. 服务部署第一步

首先,购买一台境外云服务器

1.2. 安装和配置 Shadowsocks

  1. 安装 pip

    // CentOS
    # yum install python3-pip
    

    或者:

    # curl "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"
    # python get-pip.py
    
  2. 安装及配置 shadowsocks

    // 使用 pip 安装 shadowsocks
    # pip install shadowsocks
    
    // 也可以选择自动安装脚本
    

    install-shadowsocks.sh

    // 配置 shadowsocks
    # vim /etc/shadowsocks.json
    
    {
      "server": "123.123.123.123",
      "server_port": 8388,
      "local_address":"127.0.0.1",
      "local_port":1080,
      "port_password":{
              "9001":"password9001",
              "9002":"password9002",
              "9003":"password9003"
         },
      "password": "password",
      "method": "aes-256-cfb",
      "timeout":600
    }
    
    解释: 
    - "server": "123.123.123.123" :: 服务器 IP 地址
    - "server_port": 8388 :: 服务器端口号
    - "local_address":"127.0.0.1" :: 本地回环地址
    - "local_port":1080, :: 本地端口号
    - "port_password" :: 映射端口和密码
    - "password": "password" :: 密码
    - "method": "aes-256-cfb" :: 加密方式,详细可参考 [[http://ucdok.com/project/generate_password.html][password tool]]
    - "timeout":600 :: 超时时间
    
  3. 配置自启动脚本

    # vim /etc/systemd/system/shadowsocks.service
    
    [Unit]
    Description=Shadowsocks
    
    [Service]
    TimeoutStartSec=0
    ExecStart=/usr/bin/ssserver -c /etc/shadowsocks.json
    
    [Install]
    WantedBy=multi-user.target
    

    设置 shadowsocks 自启动

    # systemctl enable shadowsocks
    # systemctl start shadowsocks
    # systemctl status shadowsocks -l
    

1.3. 使用 Docker 安装 Shadowsocks(推荐)

  1. 安装 docker

    # CentOS Linux 系列
    # yum install docker
    # systemctl enable docker
    # systemctl start docker
    
    # CentOS Stream
    # Docker官网安装教程:https://docs.docker.com/engine/install/centos/
    # yum install -y yum-utils
    # yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    # yum install docker-ce docker-ce-cli containerd.io
    # systemctl start docker
    # systemctl enable docker
    
  2. 部署 Shadowsocks

    # docker run -dt --name ss -p 6443:6443 mritd/shadowsocks -s "-s 0.0.0.0 -p 6443 -m aes-256-cfb -k test123 --fast-open"
    

2. 客户端

目前支持以下客户端进行连接:

  • Linux
  • Windows
  • Mac OS X
  • Android
  • IOS(需要美区账号)

2.1. Linux

2.1.1. 安装、配置和使用 Linux Shadowsocks 客户端

  1. Linux 系列

    • Debian/Ubuntu:

      $ sudo apt-get install python-pip
      $ sudo pip install shadowsocks
      
    • Fedora/Centos:

      $ sudo yum install python-setuptools
      

      or

      $ sudo dnf install python-setuptools
      $ sudo easy_install pip
      $ sudo pip install shadowsocks
      
    • OpenSUSE:

      $ sudo zypper install python-pip
      $ sudo pip install shadowsocks
      
    • Archlinux:

      $ sudo pacman -S python-pip
      sudo pip install shadowsocks
      

    sslocal 是客户端软件,ssserver 是服务端软件,常见于 Linux 发行版,如 Ubuntu。sslocal 在 usr/local/bin 目录下,也有其他发行版在 /usr/bin 目录下,可以使用 whereis 命令找到它的位置。

    $ whereis sslocal
    

    sslocal: /usr/local/bin/sslocal

  2. /etc/shadowsocks.json

    {
    "server":"server-ip",
    "server_port":8000,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"your-password",
    "timeout":600,
    "method":"aes-256-cfb"
    }
    
    // 启动
    $ sudo sslocal -c /etc/shadowsocks.json
    
    // 后台运行
    $ sudo sslocal -c /etc/shadowsocks.json -d start
    
  3. /etc/rc.local

    $ sudo vim /etc/rc.local
    
    sudo sslocal -c /etc/shadowsocks.json -d start
    
    // 检查是否正常工作
    # sudo systemctl status rc-local.service
    

2.1.2. 开启全局代理

  1. 安装及配置 polipo

    $ sudo apt install polipo
    $ sudo vim /etc/polipo/config
    
    logSyslog = true
    logFile = /var/log/polipo/polipo.log
    proxyAddress = "0.0.0.0"
    socksParentProxy = "127.0.0.1:1080"
    socksProxyType = socks5
    chunkHighMark = 50331648
    objectHighMark = 16384
    serverMaxSlots = 64
    serverSlots = 16
    serverSlots1 = 32
    
  2. 重启 polipo

    $ sudo systemctl restart polipo
    
  3. 设置全局变量 http_proxy and https_proxy

    $ export http_proxy="http://127.0.0.1:8123/"
    $ export https_proxy="https://127.0.0.1:8123/"
    
  4. 测试

    $ curl www.google.com
    

2.1.3. 问题解决

  1. ShadowSocks start error: undefined symbol EVP_CIPHER_CTX_cleanup [原因分析]

    openssl 1.1.0 "EVP_CIPHER_CTX_cleanup" is old.
    

    [解决办法]

    $ vim /usr/local/lib/python3.5/dist-packages/shadowsocks/crypto/openssl.py
    
    VIM Command:
    :%s/cleanup/reset/
    :x
    
  2. not support "chacha20" [解决办法]

    $ apt install m2crypto gcc -y
    $ wget -N --no-check-certificate https://download.libsodium.org/libsodium/releases/libsodium-1.0.8.tar.gz
    $ tar zxvf libsodium-1.0.8.tar.gz
    $ cd libsodium-1.0.8
    $ sudo ./configure
    $ sudo make && make install
    $ sudo echo "include ld.so.conf.d/*.conf" > /etc/ld.so.conf
    $ sudo echo "/lib" >> /etc/ld.so.conf
    $ sudo echo "/usr/lib64" >> /etc/ld.so.conf
    $ sudo echo "/usr/local/lib" >> /etc/ld.so.conf
    $ sudo ldconfig
    

2.2. Windows

2.2.1. 下载

发送邮件至 zrg1390556487@gmail.com,索取 Windows Shadowsocks 客户端。

2.2.2. 配置

  1. 解压 shadowsocks-20170123111438.png
  2. 运行 shadowsocks-20170123111902.png
  3. 配置 shadowsocks-20170123111953.png
  4. 设置代理 shadowsocks-20170123112126.png

2.3. Android

2.3.1. 下载

发送邮件至 zrg1390556487@gmail.com,索取 Android Shadowsocks 客户端。

2.3.2. 配置

shadowsocks-20170123141118.png

2.4. IOS

  1. 打开 Apple 应用市场, 搜索 "shadowrocket"。我记得不错的话,标价应该是:¥12
  2. 配置 ios-shadowrocket-01.jpeg ios-shadowrocket-02.jpeg

3. 浏览器插件:SwitchyOmega

该插件用于调节代理,方便快速切换代理上网模式。根据目前使用经验,Linux 必装,Windows 可选。

3.1. 下载

发送邮件至 zrg1390556487@gmail.com,索取 Mac OS X Shadowsocks 客户端。

3.2. 配置

  1. 设置代理 switchyomega-01.png
  2. 设定规则 switchyomega-02.png 可选规则

    rule:http://autoproxy-gfwlist.googlecode.com/svn/trunk/gfwlist.txt
    

    or

    https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt