shadowsocks+v2ray+websocket tls代理配置笔记

之前曾经将自用梯子由单纯的ss升级为ss+v2ray,但随着墙的继续增高,这种模式被检测封锁的可能性也在增加。

目前最稳妥的方案是在最外面包裹一层Web反向代理,通过websocket转发到v2ray服务。这样甚至可以模拟一个真实存在的网站,其中隐藏一个网址作为梯子,暴露的几率大大降低。

本文是配置此方案过程中的笔记,为保证完整性,内容和前一次的笔记有部分重复。

 

基本需求:

  • 一台境外服务器,可通过SSH访问,操作系统Ubuntu 18.04或更高版本,root用户或有sudo权限;
  • 一个由Cloudflare管理的域名,如sulian.me。为梯子用的子域名如ss.sulian.me添加一条A记录指向此服务器IP。

 

操作步骤:

1、安装shadowsocks-libev

libev是二进制版,比python版性能高些。

SSH登录到服务器,运行:

sudo apt update
sudo apt install shadowsocks-libev

暂时不做配置,等后续都安装好后再配置。

 

2、安装v2ray-plugin

先访问https://github.com/shadowsocks/v2ray-plugin/releases获得下载地址,由于我们用的是64位linux,下载linux-amd64版本。

下载后解压并改名复制到系统目录:

wget https://github.com/shadowsocks/v2ray-plugin/releases/download/v1.3.1/v2ray-plugin-linux-amd64-v1.3.1.tar.gz
tar zxf v2ray-plugin-linux-amd64-v1.3.1.tar.gz
sudo mv v2ray-plugin_linux_amd64 /usr/bin/v2ray-plugin

 

3、安装nginx

直接通过apt进行安装:

sudo apt install nginx

 

4、安装acme.sh并申请证书

执行以下命令安装acme.sh:

curl https://get.acme.sh | sh

安装后如果acme.sh无法运行,关闭当前shell窗口重连即可。

 

目前最简洁方式是添加DNS记录验证域名,托管在Cloudflare的域名可以通过API进行自动化配置。

使用Global API Key是不安全的,我们可以为申请证书专门创建一个API Key。

登录后访问个人资料-API令牌,创建令牌。

按图中的设置,添加权限:

  • 区域-区域设置-读取;
  • 区域-区域-编辑;
  • 区域-DNS-编辑

并将区域资源设置为所有区域。

创建完成后保存API Key。

 

然后在首页点击要配置的域名,滚动到右下角,复制并保存账户ID。

 

现在回到服务器,执行下面语句添加环境变量。申请证书后这些变量会被记录在文件中,之后会自动使用,无需重新设置。

export CF_Token="刚才保存的API Key"
export CF_Account_ID="刚才保存的账户ID"

然后执行下面语句自动为域名ss.sulian.me申请证书:

acme.sh --issue --dns dns_cf -d ss.sulian.me

申请成功后证书保存到临时目录,我们需要安装到外部目录并保证每次证书更新后自动重启服务器来加载。

acme.sh --install-cert -d ss.sulian.me \
--key-file /etc/nginx/certs/ss.sulian.me.key \
--fullchain-file /etc/nginx/certs/ss.sulian.me.cer \
--reloadcmd "sudo systemctl restart nginx"

安装完成后,每三个月证书会自动更新并重启nginx,无需人工干预。

 

5、配置服务

所有程序安装完成,证书申请成功后,就可以进行配置了。

首先编辑ss的配置文件 /etc/shadowsocks-libev/config.json:

{
    "server":"127.0.0.1",
    "server_port":10080,
    "password":"(你的密码)",
    "timeout":60,
    "method":"chacha20-ietf-poly1305",
    "mode":"tcp_and_udp",
    "fast_open":false,
    "plugin":"v2ray-plugin",
    "plugin_opts":"server;path=/test"
}

其中三个地方可以修改:

  • server_port端口号;
  • password密码;
  • plugin_opts里面的path,也就是通过web代理访问时的路径。

 

然后编辑nginx的配置文件。为方便管理,可以直接在/etc/nginx/conf.d下创建ss.sulian.me.conf,内容如下:

server {
  listen  443 ssl;
  ssl on;
  ssl_certificate       /etc/nginx/certs/ss.sulian.me.cer;
  ssl_certificate_key   /etc/nginx/certs/ss.sulian.me.key;
  ssl_protocols         TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers           HIGH:!aNULL:!MD5;
  server_name           ss.sulian.me;
  root                  /var/www/html;

  location /test {
        proxy_redirect off;
        proxy_pass http://127.0.0.1:10080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

其中注意:

  • location后面的/test就是配置ss时plugin_opts里面的path;
  • proxy_pass最后跟的端口号10080就是配置ss时的server_port。

 

配置完成后,重启服务:

sudo systemctl restart shadowsocks-libev
sudo systemctl restart nginx

 

一个ss+v2ray+ws+tls的服务就配置好了。

 

6、客户端配置:

由于使用了v2ray,直接用原生ss客户端是无法连接的,需要根据操作系统分别配置:

  • Windows用户:

一般使用的是官方客户端(https://github.com/shadowsocks/shadowsocks-windows/releases),除此之外还需要下载v2ray-plugin。

https://github.com/shadowsocks/v2ray-plugin/releases下载最新的windows-amd64版,解压,将里面的.exe文件改名为v2ray-plugin.exe,放置在shadowsocks的运行目录下。

然后进入服务器配置,添加一个新服务器,内容如下:

 

特别注意的就是其中的“插件程序”和“插件选项”必须填写。

插件程序就是放置在shadowsocks目录下的插件可执行文件名;

插件选项分三部分,用分号隔开:tls必填;host为我们的域名;path则与服务器plugin_opts中的path一致。

配置完之后点击确定。就可以像普通shadowsocks客户端一样随意上网了,只是安全性更高了一些。

 

  • iOS用户

以ShadowRocket(小火箭)为例,由于App已经内置了v2ray的支持,只需进行一些配置即可。

首先输入服务器名、端口和密码:

然后点击“插件”,选择v2ray-plugin,进入配置:

模式选择websocket,输入域名和路径,保存即可。

 

  • Android用户:

官方客户端:https://github.com/shadowsocks/shadowsocks-android/releases

官方插件:https://github.com/shadowsocks/v2ray-plugin-android/releases

将两者都安装好,启动后添加配置文件,按服务器的配置进行填写:

其中插件要选择v2ray,进入配置,同样按服务器进行填写。注意Transport mode要选websocket-tls:

配置完成后保存,就可以连接外网了。

7+

2 comments

  1. ssyy says:

    按照文章方法配置完成,但是客户端连接不上……不知道哪里有问题……客户端用ss+v2方式现在正常。然后你文章中有个地方需要手工新建目录,否则步骤不对。

    0

发表评论

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