问题描述
根据维基百科描述:Shadowsocks,是个开源加密代理项目,在中国大陆被广泛用于规避互联网审查。它由壹位名为“clowwindy”的中国程序员于2012年创建的,自此该协议(SOCKS)有了很多的实现。通常,客户端软件将在运行的计算机上打开一个SOCKS5代理,然后可以将这些网络流量进行导向,类似于SSH隧道,但与SSH隧道不同,shadowsocks也可以代理UDP流量。
解决方案
服务部署
各种实现:python、Go、Go from Outline、C with libev、C++ with Qt、Perl
常见问题处理
How-To Throttle Bandwidth per User/Port via tc
https://github.com/shadowsocks/shadowsocks/issues/792
使用KCPTun加速你的SS:
https://www.jianshu.com/p/47187e7b528c
部分应用程序不支持 SOCKS 协议,与 Polipo 配合,能够 将 SOCKS 转为 HTTP 协议
Polipo — a caching web proxy
Convert Shadowsocks into an HTTP proxy
http-proxy-to-socks
与shadowsocks有关的项目
以下的这些项目来自于 GitHub/shadowsocks 主页:https://github.com/shadowsocks
只包含客户端
shadowsocks-android::用于Android的shadowsocks客户端。
shadowsocks-windows::用于Windows的shadowsocks客户端。由C#实现。
ShadowsocksX-NG::用于OS X的shadowsocks客户端。由Swift实现。
shadowsocks-qt5::跨平台的GUI客户端。
shadowsocks-gui::Shadowsocks的GUI客户端。
由CoffeeScript实现。
shadowsocks-iOS::用于iOS和OS X的客户端。
shadowsocks-chromeapp::这是shadowsocks的Chrome应用版本。
包含Client和Server的实现
shadowsocks-go::由Go语言实现。
go-shadowsocks2::又一个由Go语言实现。
shadowsocks-rust::由Rust语言实现。
libQtShadowsocks::libQtShadowsocks是一个用Qt5编写的轻量和高速的Shadowsocks库。
shadowsocks-libqss既可以作为Client,也可作为Server。
shadowsocks::由Python语言实现。
shadowsocks-libev::shadowsocks-libev是嵌入式设备和低端盒子的轻量级和全功能端口。
openwrt-shadowsocks::用于的OpenWrt/LEDE的Shadowsocks-libev。
shadowsocks-nodejs::由CoffeeScript语言实现。
与DNS有关的应用
ShadowDNS::一个使用Shadowsocks作为服务器的DNS转发器。由Python实现。
ChinaDNS-Python::针对DNS污染的工具,可以免于受DNS污染的影响。由Python实现。
ChinaDNS::针对DNS污染的工具,可以免于受DNS污染的影响。由C实现。
管理工具
shadowsocks-manager shadowsocks多用户管理以及流量控制工具。由nodejs实现。
其他项目
simple-obfs-android::用于Android的混淆工具。
simple-obfs::混淆工具,做为shadowsocks的插件服务器。
shadowsocks-org::官网 http://www.shadowsockws.org 源码
go::Go语言。
libevent libevent库是用C语言编写的、轻量级的开源高性能事件通知库。
libev libev是libevent之后的一个事件驱动的编程框架,其接口和libevent基本类似
libsscrypto 构建用于shadowsocks-windows的libsscrypto.dll。
stackscript::shadowsocks部署SHELL脚本。
libancillary::在不相关的进程之间分享“事件文件描述符”。
iptables::用于配置Linux 2.4.x+内核的「数据包过滤规则集」的用户空间的命令行程序。
mbedtls::一个开源的,便携式,易于使用,可读和灵活的SSL库。
openssl-android::用于shadowsocks-android的OpenSSL库分支。
pdnsd::用于本地缓存DNS信息的服务端。
GlobalHotKey::设置系统范围内的热键,并对其事件做出反应。
libsodium::易于使用的加密库。
ipset::用于存储IPv4和IPv6地址集的小型C助手库
libudns::支持异步的DNS存根解析程序库
libcork::一个简单,易于嵌入的跨平台C库
libbloom::C实现的一个简单而小的过滤器
sysproxy::用于Shadowsocks Windows的系统代理。
overture::DNS服务/转发器。GO语言实现。
overture-android::shadowsocks-android的overture封装
redsocks::透明重定向任何TCP连接到代理。
proxychains-ng::proxychains-ng(新一代) – 一个预加载程序,它将调用挂接到动态链接程序中的套接字,并通过一个或多个socks/http代理进行重定向。
openwrt-feeds::用于OpenWrt/LEDE feeds::luci-app-shadowsocks::用于Shadowsocks-libev的OpenWrt/LEDE LuCI::shadowsocks-dotcloud::通过websockets协议的shadowsocks端口,能够通过HTTP代理隧道。
由CoffeeScript实现。
badvpn::tun2socks proxifier, P2P VPN::使用NCD脚本语言。
tun2socks-iOS::做为库用于iOS应用的tun2socks
注意事项
# 11/27/2019 但是后来服务器被封禁了,大概是因为协议的原因:虽然流量是加密的,但是连接初始化的报文不是加密的,还是有很明显的协议特征。而且客户端是能够发送虚假的握手报文,只要服务端有“合理的回应”,就能证明服务器是 SOCKS 网络加速服务。
import socket import struct sen = struct.pack('BBB', 0x05, 0x01, 0x00) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('localhost', 9050)) s.sendall(sen) data = s.recv(2) version, auth = struct.unpack('BB', data) s.close() println(version + " | " + auth)
# 11/03/2019 我们开始用 ShadowsocksR 实现,速度比以前慢了些许。
参考文献
https://github.com/shadowsocks/shadowsocks/wiki
https://shadowsocks.com.hk/
https://shadowsocks.com.hk/client.html
https://shadowsocks.org/en/index.html
写给非专业人士看的 Shadowsocks 简介
shadowsocks/download