其实早就搭好了的,最近由于种种原因从头到尾重来了一遍,中间各种问题麻烦不断,为了以后方便,记录一下整个过程。
VPS配置
我用的是Vultr.com的日本服务器,最低配每个月5美元,优化后在这南方某一线城市联通看YoutTube可以达到16000kbps的速度,看1440p60fps丝般顺滑,
购买连接在此:Vultr VPS
Debian 8 & Shadowsocks-libev
现在Debian已经有了9了,但是Debian 9的官方源已经没有Pdnsd了,所以还是用8。
Debian 8里根据SS-libev的github页面上的安装教程安装:
sudo sh -c 'printf "deb http://httpredir.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list'
sudo apt update
sudo apt -t jessie-backports install shadowsocks-libev
配置和启动shadowsocks-libev
# Edit the configuration file
sudo nano /etc/shadowsocks-libev/config.json
{
"server":"my_server_ip",
"server_port":8388, #any port
"local_address": "127.0.0.1",
"local_port":1080,
"password":"mypassword",
"timeout":300,
"method":"aes-256-cfb", #如果路由器配置不高可以换成chacha20,差别其实应该不大,据说都是玄学
"fast_open": true #手机上的SS客户端有fast open选项
}
# Edit the default configuration for debian
sudo nano /etc/default/shadowsocks-libev
# Enable during startup?
START=yes
# Configuration file
CONFFILE="/etc/shadowsocks-libev/config.json"
# Extra command line arguments
DAEMON_ARGS="-u"
# User and group to run the server as
USER=nobody
GROUP=nogroup
# Number of maximum file descriptors
MAXFD=32768
# Start the service
sudo /etc/init.d/shadowsocks-libev start # for sysvinit, or
sudo systemctl start shadowsocks-libev # for systemd
安装配置pdnsd
Pdnsd相当于一个在你的VPS上的DNS服务器,区别在于普通的DNS服务器是53端口查询的,这很容易被GFW识别并污染,所以要自己搞一个DNS服务器并设置成不同的端口。
sudo apt install pdns
安装好后会出来一个选择界面,请一定要选择manual
。
#备份pdnsd.conf
sudo cp /etc/pdnsd.conf /etc/pdnsd.conf.bak
#编辑pdnsd.conf
sudo nano /etc/pdnsd.conf
global {
perm_cache=4096;
cache_dir="/var/cache/pdnsd";
run_as="pdnsd";
server_ip = your_server_ip; // Use eth0 here if you want to allow other
// machines on your network to query pdnsd.
server_port = any_port_except_53;
debug = off;
status_ctl = on;
paranoid=on;
query_method=udp_only; // pdnsd must be compiled with tcp
// query support for this to work.
// 因为这里是VPS查询国外上级DNS服务器的方式,所以不一定非得要TCP_only
// (国内UPD查询dns会被污染)
min_ttl=15m; // Retain cached entries at least 15 minutes.
max_ttl=1w; // One week.
timeout=10; // Global timeout option (10 seconds).
// Don't enable if you don't recurse yourself, can lead to problems
// delegation_only="com","net";
}
server {
label = "mydns"; //随意label
ip = 8.8.8.8; //查询Google DNS,也可以设成任何其他国外的DNS服务器
timeout =3;
interval = 30;
uptest = none;
port = 53;
}
#编辑/etc/default/pdnsd
sudo nano /etc/default/pdnsd
# do we start pdnsd ?
START_DAEMON=yes
# auto-mode, overrides /etc/pdsnd.conf if set [see /usr/share/pdnsd/]
AUTO_MODE=
# optional CLI options to pass to pdnsd(8)
START_OPTIONS=
# Start the service
sudo /etc/init.d/pdnsd start # for sysvinit, or
sudo systemctl start pdnsd # for systemd
验证pdnsd是否配置正确:
dig @服务器ip -p 配置global里填的端口号 www.google.com
如果结果里有
;; ANSWER SECTION:
www.google.com. 586 IN A 216.58.197.164
说明dns查询正常
安装BBR
参考来源:开启TCP BBR拥塞控制算法
TCP-BBR是Google开发的拥塞控制算法,可以显著提升科学上网的速度。
注意TCP-BBR不支持OpenVZ虚拟化技术,使用前请确认你的VPS使用的是什么虚拟化技术。
下载最新内核
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.10.17/linux-image-4.10.17-041017-generic_4.10.17-041017.201705201051_amd64.deb
安装内核
dpkg -i linux-image-4.*.deb
更新 grub 系统引导文件并重启
update-grub
reboot
重启后uname -
看看内核版本是不是4.9以上
执行lsmod | grep bbr
,如果结果中没有tcp_bbr
就先执行:
modprobe tcp_bbr
echo "tcp_bbr" >> /etc/modules-load.d/modules.conf
然后执行
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
保存生效
sysctl -p
执行
sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control
如果执行结果都有bbr
,说明VPS内核已经开启BBR。
看到有tcp_bbr
模块说明bbr已经启动。
安装服务器端Kcptun
Kcptun是把SS的流量转换成KCP协议通过KCP服务端再传到客户端,
我现在使用的OpenWrt有集成了KCPtun的客户端,但是运行起来比较占用cpu,所以我是在家里的NAS服务器上运行Kcptun客户端。
如果有需要在OpenWrt路由上运行客户端,请参考这个链接:Kcptun部署与使用
一键安装脚本:
wget https://github.com/kuoruan/shell-scripts/blob/master/kcptun/kcptun.sh
./kcptun.sh
通过一键安装脚本之后的配置:
服务器IP: your_server_ip
端口: anything_but_ss_port
加速地址: your_server_ip:ss_port
key: your_password
crypt: aes-128
mode: manual
mtu: 1400
sndwnd: 512
rcvwnd: 512
datashard: 70
parityshard: 30
dscp: 46
nocomp: true
nodelay: 0
interval: 40
resend: 0
nc: 1
可使用的客户端配置文件为:
{
"localaddr": ":ss_port",
"remoteaddr": "your_server_ip:服务器配置里的第二项端口",
"key": "your_password",
"crypt": "aes-128",
"mode": "manual",
"mtu": 1400,
"sndwnd": 512,
"rcvwnd": 512,
"datashard": 70,
"parityshard": 30,
"dscp": 46,
"nocomp": true,
"nodelay": 0,
"interval": 40,
"resend": 0,
"nc": 1
}
手机端参数可以使用:
key=your_password;crypt=aes-128;mode=manual;mtu=1400;sndwnd=512;rcvwnd=512;datashard=70;parityshard=30;dscp=46;nocomp;nodelay=0;interval=40;resend=0;nc=1
以上服务器端设置完毕
OpenWrt配置
我用的是二手网件WNDR4300,卖家刷好了明月OpenWrt固件,固件版本:Chaos Calmer 15.05.1,购至淘宝网,关键词wndr4300 open/tt
,发货地深圳,记得注明刷好OpenWrt。
另外这个固件已经支持ShadowsockR,在SS基础上开发出来的新玩意,目前SS用着还不错,libev版本还有人维护,换SSR的动力不大。
OpenWrt路由比普通的路由稍微麻烦点,刚开始可能连拨号在哪都找不到:
宽带拨号设置在网络
—接口
页面里接口总览
列表里的WAN
这一栏,右边修改
按钮,协议选择PPPoE
,
PAP/CHAP用户名/密码填入宽带拨号上网用户名与密码
WIFI密码设置在网络
—无线
,此路由有2.4G和5G两个频段,分别在右边修改
,无线安全
里设置WIFI密码。
配置Shadowsocks
服务器名称配置随便写,
服务器地址以下根据上面shadowsocks-libev/config.json
内容写,代理方式:忽略列表
。
下面的都不用管
配置pdnsd
自动修改不要选,
配置文件:
global {
perm_cache = 1024;
cache_dir = "/var/pdnsd";
run_as = "nobody";
debug = off;
server_port = any_port_but_53; # 使用 xxx端口 作为 dns 端口, 默认是 53但请不要用,设一个别的端口
server_ip = 127.0.0.1;
status_ctl = on;
query_method=tcp_only; # 最重要的配置, 只使用 tcp 查询上级 dns
neg_domain_pol = off;
paranoid = on;
par_queries = 1;
min_ttl=15m;
max_ttl=1w;
timeout=10;
}
server {
# Better setup dns server(DON'T USE PORT 53) on your own vps for faster proxying
label = "special"; # 这个随便写
ip = VPS_ip; # 这里为上级 dns 的 ip 地址
port = #这里要填服务器端pdnsd配置里global里的port端口数;
proxy_only = on;
timeout = 5;
uptest = none;
}
source {
owner = localhost;
file = "/etc/hosts";
}
rr {
name = localhost;
reverse = on;
a = 127.0.0.1;
owner = localhost;
soa = localhost,root.localhost,42,86400,900,86400,86400;
}
再启用Pdnsd,保存&应用
配置Chinands
点启动
自动修改不选
启用双向过滤不选
本地端口:随意
上游服务器:
114.114.114.114,127.0.0.1:上面OpenWrt Pdnsd配置文件里global里的port端口
ie.
114.114.114.114.127.0.0.1:1234
更新路由表,保存&应用
防止BT下载走SS线路
因为VPS在国外,BT下载如果走SS路线下电影的话必然会连上蜜罐服务器,就等着VPS封你的账号吧(别问我是怎么知道的)
所以修改一下配置是很有必要的
SSH到路由器:
#只允许常用的几个端口可以这样:
uci set shadowsocks.@shadowsocks[-1].ipt_ext='-m multiport --dports 22,80,443'
#或者指定一个范围:
uci set shadowsocks.@shadowsocks[-1].ipt_ext='--dport 21:5000'
#以上命令二选一
#最后提交修改:
uci commit shadowsocks
来源:希望实现针对端口的透明代理(如仅对1024一下的保留端口执行透明代理)
Done