Shadowsocks + KCPTun + UDP2RAW 超高速科学上网

/ 0评 / 5

很复杂的配置过程的样子,而且我比较喜欢手动配置,这样安全性和各种我都能很好控制.还有,发挥最高的处理器自身能力.

所有项目的地址:

https://github.com/shadowsocks/shadowsocks-libev

https://github.com/xtaci/kcptun

https://github.com/wangyu-/udp2raw-tunnel

起步配置要128M RAM OpenVZ,如果是KVM的话.可能需要更高一些,容纳内核开销等,当然如果愿意,开SWAP也可以.客户端,完全可以利用花生棒来解决,只要弱加密,应该是完全够用的.而且主要是,花生棒大概是最便宜的路由开发板了,只要58元.(要是可以移植到ESP32就更爽了,但是我不想浪费这个青春.)

另外,不直接走UDP的KCPTUN,还可以一定程度防止服务器被UDPFlood.(虽然有一些服务器只算出,不算进.),但是毕竟影响服务器质量.最后,再用花生棒自己的穿透能力,把数据流量穿透到花生棒自己的服务器,然后我再手机连接,还不用享受高倍率的KCPTUN放大.真是太爽了.

首先安装依赖包和拉取代码:

apt install -y gcc g++ git gettext build-essential autoconf libtool libpcre3-dev asciidoc xmlto libev-dev libc-ares-dev automake libmbedtls-dev libsodium-dev

git clone https://github.com/shadowsocks/shadowsocks-libev.git

cd shadowsocks-libev

git submodule update --init --recursive

编译也很方便.(然后缺什么,补什么.)

./autogen.sh

./configure

make

make install

我直接传递参数就能用.

ss-server -s 0.0.0.0 -p 14657 -k xxx -m rc4-md5 -t 300

这时候可以测试下,但是因为没有加速服务器还远,速度肯定不太好.

第二步,编译KCPTUN.前置任务安装go语言(版本1.10或之后,不要从apt安装,因为apt里面的比较老.),并加入到环境变量.貌似还要依赖https://github.com/xtaci/smux.(放到GOPATH路径)

mkdir /opt/gocode -p



export GOPATH=/opt/gocode

export GOROOT=/root/go

export PATH=/root/go/bin:$PATH



git clone https://github.com/xtaci/kcptun

go get -u github.com/xtaci/kcptun/server

go get -u github.com/xtaci/kcptun/client

cd kcptun



./build-release.sh

具体错误也不会太难.如果找不到软件包,就放到对应路径,继续就可以.(编译.自然比较慢,耐心重要的.)

kcptun同样支持无配置文件,直接传参数.而且还是静态编译的(这个在本机编译,放远程也是单文件.)

./server_linux_amd64 -t "127.0.0.1:14657" -l ":29900" --mode fast2 --key "xxx" --crypt "none"

看起来是这样的.

简单测试下,因为,运营商可能对UDP封锁,所以可能测试没多久就会挂掉.

"client_windows_amd64.exe" -l :9527 -r 35.231.111.220:29900 -key "xxx" -crypt none -mode fast2

但是,目标是稳定加快速.

直接下载并make,搞定了.没有依赖.

https://github.com/wangyu-/udp2raw-tunnel

得到的udp2raw就是目标.也是静态链接的.(但是作者没有strip).

但是udp2raw和kcptun一样,都希望在路由运行(因为不加密,所以没有什么负载.),但是SOCKS客户端本身,就不要了,因为花生棒这么点能力,还是省省吧.

下载http://archive.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/OpenWrt-SDK-ramips-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2.tar.bz2 (不同平台自己找来看)

把工具解压,把Makefile第一行改成CROSS路径的前缀.比如我的是:/root/OpenWrt-SDK-ramips-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-uclibc-g++

然后用make cross,就得到目标了.

同样,udp2raw,也一样支持直接运行.

./udp2raw -s -l0.0.0.0:8855 -r 127.0.0.1:29900 -kxxx --raw-mode faketcp -a --cipher-mode none --auth-mode simple

混淆什么全依赖代理程序自身,其他都是不加密,随便来.

本地端

./udp2raw -c -r35.231.111.220:8855 -l0.0.0.0:5000 -kxxx --raw-mode faketcp -a --cipher-mode none --auth-mode simple

最后,服务器安全,让所有的非对外网络,都只监听127.0.0.1

ss-server -s 127.0.0.1 -p 14657 -k xxx -m rc4-md5 -t 300

./server_linux_amd64 -t "127.0.0.1:14657" -l "127.0.0.1:29900" --mode fast2 --key "xxx" --crypt "none"

不过,还不够,最好是利用服务商提供的防火墙再拦截,比如GCP和Vultr都有相应的防火墙.选用冷门端口.(因为哪怕是iptables设置DROP,到达了你的网卡,服务商就得算你钱.)

既然源码都有了,有空也可以看看是否有什么后门.把对应的SOCKS端口(TCP)映射到花生壳的穿透服务器,那么我本地就可以连接到家里的翻墙服务.(上行也够用,流量我不是土豪也用不了那么多,因为中转过去的流量已经是完全解码的流量,所以并不多消耗,总比在手机装kcptun消耗爽.)

路很绕,但是效果很爽.也不用纠结美西机房坑不坑的问题.

服务器路径:Shadowsocks 服务端 => (由KCP承载) => KCPTUN 服务端 => (由UDP2RAW承载) => 外网

路由器路径:外网 => (由UDP2RAW解码) => UDP2RAW 客户端 => (由KCP解码) => KCPTUN客户端  => 暴露端口给内网机器

内网机器:Windows Shadowsocks 客户端 => 直接连接暴露的端口,当做是直连Shadowsocks 服务端

外网机器: 内网暴露端口 => 花生壳服务器 => 手机直拨 (如果是电脑,推荐使用多种方法,寻求最快的方法.)

为什么没用用路由器的转发功能做透明代理呢?很简单,路由器本身性能有限.如果目标平台是个ARM的板子,不妨性能高度压榨.

实际监听状态:

实际运行:

用另一个机器扫描该IP.

如果加上其他端口拒绝,那就谁也发现不了了.

iptables -I INPUT -p icmp -j DROP

配合我之前写的autodeny,轻松拦截扫描者.

对了,附上完整参考脚本(Debian 9),只编译第一部分.后面的都是单文件,基本等于绿色.

#!/bin/bash



PASSWORD=123



# 客户端配置参考(前两个可以路由运行,但是最后一个最好不要,路由性能有限,会让你觉得网络卡炸的.)

#

# udp2raw -c -r35.231.111.220:40002 -l0.0.0.0:40003 -kxxx --raw-mode faketcp -a --cipher-mode none --auth-mode simple

# kcp-client  -l :9527 -r 10.0.0.1:40003 -key "xxx" -crypt none -mode fast3

# SS 客户端 => 混淆:aes-256-gcm,IP:127.0.0.1:9527,密码:刚才设置的密码.





# 安装基本软件

apt update

apt install -y gcc g++ git gettext build-essential autoconf libtool libpcre3-dev asciidoc xmlto libev-dev libc-ares-dev automake libmbedtls-dev libsodium-dev



#下载代码

git clone https://github.com/shadowsocks/shadowsocks-libev.git

cd shadowsocks-libev

git submodule update --init --recursive



#编译安装

./autogen.sh

./configure

make

make install

cd ..

rm shadowsocks-libev -rf



#下载KCPTUN

wget https://github.com/xtaci/kcptun/releases/download/v20180316/kcptun-linux-amd64-20180316.tar.gz

tar xf kcptun-linux-amd64-20180316.tar.gz 

mv server_linux_amd64 /usr/bin/kcp-server

rm kcptun-linux-amd64-20180316.tar.gz 

rm client_linux_amd64

rm server_linux_amd64



#下载UDP2RAW

wget https://github.com/wangyu-/udp2raw-tunnel/releases/download/20180225.0/udp2raw_binaries.tar.gz

tar xf udp2raw_binaries.tar.gz

mv udp2raw_amd64 /usr/bin/udp2raw

rm udp2raw* -rf

rm version.txt



#安装到启动项



cat <<EOF >/etc/rc.local

#!/bin/sh -e

#

# rc.local

#

# This script is executed at the end of each multiuser runlevel.

# Make sure that the script will "exit 0" on success or any other

# value on error.

#

# In order to enable or disable this script just change the execution

# bits.

#

# By default this script does nothing.



ss-server -s 127.0.0.1 -p 40000 -k ${PASSWORD} -m aes-256-gcm -t 300 >> /var/log/ss-server.log &

kcp-server -t "127.0.0.1:40000" -l "127.0.0.1:40001" --mode fast3 --key "${PASSWORD}" --crypt "none"  >> /var/log/kcp-server.log &

udp2raw -s -l0.0.0.0:40002 -r 127.0.0.1:40001 -kxxx --raw-mode faketcp -a --cipher-mode none --auth-mode simple  >> /var/log/udp2raw.log &



exit 0

EOF



chmod +x /etc/rc.local

systemctl restart rc-local

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注