科学上网之 SSR 方案

缘起

最近上面在开会嘛,职能部门也许是要展示下“肌肉”:“不是我搞不了你,我只是平时懒得鸟你。”我猜大概就是这么个原因吧,结果就是:最近这段时间大家的“科学上网”纷纷中招,不好使了。我司原来用的 SS 改良的版本,中招了,至于怎么解决的,不在本篇讨论的范围之内。

我主要说下家里的情况,家里原来也是 SS 方案,这段时间也不行了,通常是早上不通了,改下端口,然后到晚上又不行了,然后又改端口,搞了两次才是反应过来是被盯上了。心中大呼侥幸!这要是不封端口直接封 IP 我可咋整呀?!就冲这点来讲不得不说职能部门真是良心单位哈,值得点个赞!

现有资源

  • 米国 VPS 一台(Ubuntu 16.04)
  • 家里路由器一台(OpenWrt 14.07,bcrm63xx 架构)

以前也是这情况,不过以前跑的是 SS,据说 SSR 比 SS 更不容易被 ban,所以这次我的方案是用 SSR 替换掉原来的 SS。

SSR 方案

具体(替换)过程这里不赘述了,中间来来回回走过不少弯路,说起来都是泪呀,只谈下最终的方案的情况吧,这也是我推荐的方案。

VPS 端

VPS 上起 Docker 服务,然后直接拉一个 SSR 的 Docker image 来跑。

Server 端部署

这里的部署文档参考了:DigitalOcean 的 How To Install and Use Docker on Ubuntu 16.04 和 Docker 官方的 Get Docker CE for Ubuntu

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 删除掉以前的 Docker,至于为什么用 purge 而不是 remove,自己想
apt-get purge docker docker-engine docker.io;

apt-get update;
apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common;

# 添加 Docker 官方的 GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -;

# 新增 Docker 的官方 repo
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable";

apt-get update;

# 安装 Docker(Docker 新版叫 docker-ce)
apt-get install docker-ce;

# 拉一个 SSR 的 Docker(image) 跑起来
docker run -p 11402:51348 \
--restart=always \
--name=SSR \
-e PASSWORD=xxxxxxxxxxx \
-d breakwa11/shadowsocksr;

需要注意的是,上面跑的这个 Docker image,其实是有很多隐含参数的,如果不知道,SSR 客户端是没法连过来的,具体详见 Docker image:breakwa11/shadowsocksr 的 Dockerfile 文件。考虑到被职能部门 ban 的可能性,我把缺省参数贴出来:

ENV SERVER_ADDR 0.0.0.0
ENV SERVER_PORT 51348
ENV PASSWORD psw
ENV METHOD aes-128-ctr
ENV PROTOCOL auth_aes128_md5
ENV PROTOCOLPARAM 32
ENV OBFS tls1.2_ticket_auth_compatible
ENV TIMEOUT 300
ENV DNS_ADDR 8.8.8.8
ENV DNS_ADDR_2 8.8.4.4

OpenWrt 端

家里的 OpenWrt 上肯定是跑 SSR 的客户端,由于种种原因(主要是测试时服务器用的是 aws,当时貌似不支持 udp 转发),最终域名解析用了 pdnsd 的方案而不是 tunnel 方案。

Client 端部署

github 上找了个 brcm63xx 的 ShadowsocksR for OpenWrt 的 ipk 包,下载地址在这里,如果你的 OpenWrt 路由器是别的体系架构的话,也许这个页面里还能找到更新一点的版本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 删除掉 dnsmasq(如果已安装的话),因为需要安装 dnsmasq-full
opkg remove dnsmasq;

# 安装 pdnsd 和 dnsmasq-full,此方案里有用到
opkg install pdnsd dnsmasq-full;

# 不要自动启动 pdnsd,ShadowsockR 会将其起起来
/etc/init.d/pdnsd disable;

# 下载 ShadowsocksR 软件包
wget https://github.com/bettermanbao/openwrt-shadowsocksR-libev-full/releases/download/v2.4.5-5/shadowsocksR-libev-full_2.4.5-5_brcm63xx-generic.zip;
unzip shadowsocksR-libev-full_2.4.5-5_brcm63xx-generic.zip;
cd shadowsocksR-libev-full_2.4.5-5_brcm63xx-generic;

# 下面这步是安装,如果依赖什么包没装,就 opkg install 安装后再继续
opkg install \
shadowsocksr-libev-server-polarssl_2.4.5-5_brcm63xx.ipk;

Client 端配置

SSR Client 的参数配置参照上面服务器的配置即可,但是有两点区别:

  1. PROTOCOLPARAM 参数可以留空不配
  2. OBFS 配成 tls1.2_ticket_auth 即可

客户端的配置工作可以在 web 界面来做,而且也推荐这么做

Client 端启动

1
2
/etc/init.d/shadowsocksr start;
# 服务的启动也可以在 web 界面来做,推荐这样做,因为简单。