Shadowsocks 原理简介及安装指南

    技术教程 Dr.V 839次浏览 0个评论 扫描二维码

    对 Shadowsocks 早有耳闻,当时我还在用 HTTP 代理、VPN 服务等翻墙,感觉它是个比较高大上的东西,也一直没有碰它。最近 GreenVPN 抽风,Mac 一直连接不上,害得我折腾了很久,最后还是买了一台国外的 VPS,于是开始折腾起 Shadowsocks,部署之前,对它做了一个简单的了解,下面先介绍下。

    一道隐形的墙

    众所周知,天朝局域网通过 GFW 隔离了我们与外界的交流,当然,这个隔离并非完全隔离,而是选择性的,天朝不希望你上的网站就直接阻断。每一个网络请求都是有数据特征的,不同的协议具备不同的特征,比如 HTTP/HTTPS 这类请求,会很明确地告诉 GFW 它们要请求哪个域名;再比如 TCP 请求,它只会告诉 GFW 它们要请求哪个 IP。

    GFW 封锁包含多种方式,最容易操作也是最基础的方式便是域名黑白名单,在黑名单内的域名不让通过,IP 黑白名单也是这个道理。如果你有一台国外服务器不在 GFW 的黑名单内,天朝局域网的机器就可以跟这一台机器通讯。那么一个翻墙的方案就出来了:境内设备与境外机器通讯,境内想看什么网页,就告诉境外的机器,让境外机器代理抓取,然后送回来,我们要做的就是保证境内设备与境外设备通讯时不被 GFW 怀疑和窃听。

    ssh tunnel 是比较具有代表性的防窃听通讯隧道,通过 ssh 与境外服务器建立一条加密通道,此时的通讯 GFW 会将其视作普通的连接。由于大家都这么玩,GFW 着急了,于是它通过各种流量特征分析,渐渐的能够识别哪些连接是 ssh 隧道,并尝试性的对隧道做干扰,结果还是玩不过 GFW,众多隧道纷纷不通。

    Shadowsocks 及其部署

    如果你理解了上面那道隐形的墙的原理,那 Shadowsocks 的原理就可以用一句简单的描述来理解了:它发出的 TCP 包,没有明显包特征,GFW 分析不出来,当作普通流量放过了。

    1. 基本原理

    具体而言,Shadowsocks 将原来 ssh 创建的 Socks5 协议拆开成 Server 端和 Client 端,两个端分别安装在境外服务器和境内设备上。

    +------+     +------+     +=====+     +------+     +-------+
    | 设备  | <span class="xml"><span class="tag"><<span class="title">-</span>></span> </span><span class="xml">|Client| <span class="tag"><<span class="title">-</span>></span> | GFW | <span class="tag"><<span class="title">-</span>></span> |Server| <span class="tag"><<span class="title">-</span>></span> | 服务器 |</span><span class="xml">
    +------+     +------+     +=====+     +------+     +-------+
    </span>

    Client 和 Server 之间可以通过多种方式加密,并要求提供密码确保链路的安全性。

    2. 服务器端部署

    Shadowsocks 封装后对用户而言就是一个程序指令,以 Ubuntu 为例,首先安装 pip,

    apt-<span class="keyword">get</span> install python-pip
    pip install shadowsocks
    

    注意 pip 的安装现在要求 python 版本大于等于 2.6,然后通过 pip 安装 shadowsocks。启动 shadowsocks 有两种方式,一种是通过一行命令直接启动:

    ssserver -p PORT -k PASSWORD -<span class="keyword">m</span> rc4-md5 --<span class="keyword">log</span>-file /tmp/ss.<span class="keyword">log</span> -d start
    

    另一种是使用 config 文件启动,如先配置好文件(/etc/shadowsocks.json):

    {
      "<span class="attribute">server</span>": <span class="value"><span class="string">"YOUR_SERVER_IP"</span></span>,
      "<span class="attribute">server_port</span>": <span class="value"><span class="number">8388</span></span>,  
      "<span class="attribute">local_address</span>": <span class="value"><span class="string">"127.0.0.1"</span></span>,  
      "<span class="attribute">local_port</span>": <span class="value"><span class="number">1080</span></span>,  
      "<span class="attribute">password</span>": <span class="value"><span class="string">"PASSWORD"</span></span>,
      "<span class="attribute">timeout</span>": <span class="value"><span class="number">300</span></span>,  
      "<span class="attribute">method</span>":<span class="value"><span class="string">"aes-256-cfb"</span></span>,  
    }
    

    然后通过 ssserver 启动:

    ssserver -c /etc/shadowsocks.json -d <span class="operator"><span class="keyword">start</span></span>
    

    更加具体的配置说明,请戳 这里这里

    3. 客户端配置

    Mac 客户端的下载地址:

    配置位置:

    配置方式:

    相关说明: Shadowsocks for OSX 帮助

    iPhone 设备可以选择 shadowrocket 客户端,需要 6 元购买,它的好处是,能够持续保持连接,休眠状态也不会断开,并且内置了规则,一些需要翻墙的域名才会自动翻墙。

    小结

    刚开始在配置 ss-serser 的时候,我遇到了些问题,本地死活代理不成功,后来通过下面这种方式调试了下:

    1.客户端通过 telnet ip port 确认 ss-server 是否正常开启

    如果没有正常开启,有可能是设定的端口没有开放,

    iptables -A INPUT -p tcp <span class="comment">--dport 8388 -j ACCEPT</span>
    

    执行上述命令,将 8388 修改为你设定的端口即可。

    2.如果第一步中连接正常,可以查看下 ss-server 的日志

    ssserver -c /etc/shadowsocks.json --<span class="keyword">log</span>-file /tmp/ss.<span class="keyword">log</span> -d start
    

    启动的时候添加 --log-file 参数,然后通过 tail -f /tmp/ss.log 查看实时日志,一般可以看出一点端倪。

    本文的普及就到这里了,希望对你有些帮助。

    anyShare分享到:

    VPN信息网 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明-VPN信息网-Shadowsocks 原理简介及安装指南
    喜欢 (0)
    发表我的评论
    取消评论

    表情 贴图 加粗 删除线 居中 斜体 签到

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址