科学上网相关shadowsocks/kcputn/bbr/obfs/v2ray-plugin

shadowsocks/shadowsocks-libev

shadowsocks, 现代科学上网的里程碑式产品,早已经停止更新,github上的原项目已经删除。其后继者为shadowsocks-libev,有多个平台上的版本,目前主流的平台都有其客户端。

CentOS可使用的yum源 https://copr.fedorainfracloud.org/coprs/librehat/shadowsocks/

kcptun

kcptun是一个把TCP流“装”到UDP里并无脑重发以达到加速效果的方案,也就是以带宽换响应速度。到项目release页下载适合的版本,解压缩,把其中的服务端文件server_linux_amd64 复制为 /usr/local/bin/kcptun-server ,写个一行开机启动脚本到/etc/rc.local 里,注意其中的 –key 参数的密码设置。更多参数参考项目页上的说明。

/usr/local/bin/kcptun-server -t 127.0.0.1:12312 -l 0.0.0.0:12321 –mode fast2 –crypt aes-128 –key your-kcptun-password –rcvwnd 512 –sndwnd 128 &

obfs

一个混淆工具,就是把shadowsocks数据包伪装成http/https,骗过墙的过滤。shadowsocks-libev官方支持 simple-obfs 插件,不过目前已经过时,后继为 v2ray-plugin

v2ray-plugin

项目地址 https://github.com/shadowsocks/v2ray-plugin 。目前似乎没有yum源,要手工安装。CentOS7服务端配置步骤:

到项目release页下载适合的版本, v2ray-plugin-linux-amd64…  ,解压缩得后文件改名为v2ray-plugin,放到 /usr/local/bin 下,即/usr/local/bin/v2ray-plugin

单独运行方式 v2ray-plugin -server -localAddr “0.0.0.0” -localPort 8080 -remoteAddr “127.0.0.1” -remotePort 12312 -host cdn.path8.net  其中 -remotePort 参数是shadowsocks-libev 监听端口,-localPort 是v2ray-plugin端口,即客户端要连接的是这个端口。

以shadowsocks-libev的插件模式运行:增加一行 “plugin”:”v2ray-plugin”,  这样ss设置里的服务端口将是v2ray-plugin端口(供客户端连接),而shadowsocks-libev将监听一个另外的随机的端口。这样客户端就不能直连shadowsocks-libev服务了。(如想让两者同时可用,可以使用上面单独运行的方式)

推荐的整合式方案:以nginx前端、把混淆整合到nginx背后

特点:

  • 请求处理的次序: nginx  -> v2ray-plugin  -> ss-server
  • 对外只开放80端口

配置shadowsocks-libev,及v2ray-plugin

跑两个ss服务,一个是裸ss与整合了v2ray插件的ss,裸ss的很简单,下面主要是整合v2ray插件的方法。

复制一份shadowsocks-libev的配置文件为  //cdn.path8.net/blog/etc/shadowsocks-libev/config_v2ray.json ,注意其中端口号,路径path两项,后面步骤要与之保持一致。

{
    "server":"localhost",
    "server_port":12380,
    "local_port":1080,
    "password":"123456789",
    "timeout":60,
    "method":"aes-256-gcm",
    "plugin":"v2ray-plugin",
    "plugin_opts":"server;path=/myapp/;loglevel=none"
}

注意:1) 裸ss的配置与之类似,注意不要最后两行、用另外的端口号。 2) 这里server是locahost,即不允许外部直接连接的,而是通过v2ray-plughn或kcptun访问;如要直连,可改成0.0.0.0。

复制一份服务配置shadowsocks-libev.service为 /usr/lib/systemd/system/shadowsocks-libev-v2ray.service,修改其中[Service]一节的ExecStart … 一行,为如下:

ExecStart=/usr/bin/ss-server -c /etc/shadowsocks-libev/config_v2ray.json $DAEMON_ARGS

设置服务的开机自动运行,并启动

systemctl enable shadowsocks-libev-v2ray
systemctl start shadowsocks-libev-v2ray

配置nginx

/etc/nginx/conf.d/proxy.conf

server {
    listen       80;
    server_name  sub.domain.com;
    root /var/www/html/sub.domain.com/html;
    #access_log  /var/log/nginx/host.access.log  main;
    location /myapp/ {
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_pass   http://127.0.0.1:12345;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

其中 location /myapp/ 要与shadowsocks-libev-v2ray配置中一致;proxy_pass 里的端口也一样。

客户端配置

shadowsocks-windows

  • 端口:80
  • 密码、加密,在shadowsocks-libev中设置
  • 插件程序 :v2ray-plugin_windows_amd64.exe
  • 插件选项:host=sub.domain.com;path=/myapp/
  • 插件参数:(留空)

其中插件选项里的 host及path,都要与nginx中一致

Android版影梭+v2ray插件,设置服务器时,与上面的几项类似,都有较友好的设置选项。

有一个神奇的现象,出忽理解之外,就是如果让v2ray-plugin监听 “0.0.0.0” ,它会监听ipv6的[::1] ,但神奇的是,使用按ipv4的地址同端口连接,竟然是通的。不过这个整合方案规避了这个问题,因为改监听”localhost”了,而不是使用 0.0.0.0 。

推荐的整合式方案:kcptun + shadowsocks-libev方案

配置仅供服务器本机内部使用的裸shadowsocks,即只监听localhost;然后配置kcptun对外接受客户端连接。

修改shadowsocks-libev默认配置文件 //cdn.path8.net/blog/etc/shadowsocks-libev/config.json ,如下

{
    "server":"localhost",
    "server_port":12345,
    "local_port":1080,
    "password":"123456789",
    "timeout":60,
    "method":"aes-256-gcm"
}

启动

systemctl enable shadowsocks-libev
systemctl start shadowsocks-libev

修改系统开机启动脚本到/etc/rc.local,在最后加入一行

/usr/local/bin/kcptun-server -t 127.0.0.1:12345 -l 0.0.0.0:12321 –mode fast2 –crypt aes-128 –key your-kcptun-password –rcvwnd 512 –sndwnd 128 &

其中:12345是裸ss的监听端口,12321是kcptun监听端口。密码、加密方式、及其它参数按需修改。

通过bbr提升网络质量(优化TCP协议)

墙内到海外网络的TCP丢包率通常都较高,尤其是很多廉价VPS,可以通过BBR的TCP拥塞控制算法明显改变这个情况。

可控内核的主机(如实体机及或KVM,Xen,Vmware等虚拟化下VPS)可以更换为支持bbr的内核;OpenVZ这种无独立内核的主机,则可以使用魔改版BBR。具体参看开启BBR

bbr与kcptun的比较

  • bbr是单边加速方案,对客户端是透明的,也就是说,客户端不需要专门做任何改动、也不需要另装软件。
  • kcptun通常会比bbr效果更好一些,尤其kcptun有一系列可调参数,可以更猛烈的“以带宽换速度”。
  • kcptun可能稳定性较差。kcptun走UDP协议,有些网络环境下UDP协议优先级低,可能并不理想,甚至有些网络环境中不允许UDP协议。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据