shadowsocks+v2ray配置笔记

2020.8 更新:此方案已得到了进一步优化,推荐使用shadowsocks+v2ray+websocket tls代理配置笔记

 

前提:随着墙的增高,单纯的shadowsocks简单加密也越来越容易被检测和封锁,因此需要更强力的加密与混淆手段,避免流量被检测出来。

本笔记采用的是专用服务器+独立IP+shadowsocks+v2ray插件,不涉及在其他环境下运行的解决方案。

准备工作

  • 一台境外服务器,可通过SSH访问,操作系统Ubuntu 18.04,root用户(普通用户有sudo权限也可);
  • 一个域名(顶级或二级均可),添加A记录指向此服务器IP;

安装步骤:

1、安装shadowsocks-libev(二进制版,比python版效率高)

SSH登录到服务器,运行:

sudo apt update
sudo apt install shadowsocks-libev

root用户可以不加sudo。

 

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.0/v2ray-plugin-linux-amd64-v1.3.0.tar.gz
tar zxf v2ray-plugin-linux-amd64-v1.3.0.tar.gz
sudo mv v2ray-plugin_linux_amd64 /usr/bin/v2ray-plugin

 

3、使用acme.sh申请证书

运行下面命令安装:

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

安装完之后就能执行acme.sh命令了。

 

如果是root用户,可以直接使用standalone模式申请证书。

假设域名是ss.sulian.me,并且已经解析指向到这台主机的IP,那么执行:

acme.sh --issue -d ss.sulian.me --standalone

acme.sh脚本会自动开启一个临时web服务器,用于验证域名的所有权。如果执行成功的话(显示success并提示证书已签发),会将证书存到脚本临时目录。

这种方法申请的证书有效期为三个月,脚本开启了定时任务会在到期前自动续发,为了能让证书永不过期,我们需要将证书安装到本地目录,并且每次重新签发后要执行指定命令重启shadowsocks加载:

mkdir /root/certs //创建本地证书目录
acme.sh --install-cert -d ss.sulian.me --key-file /root/certs/ss.sulian.me.key --<em>fullchain</em>-file /root/certs/ss.sulian.me.cer --reloadcmd "sudo systemctl restart shadowsocks-libev"

这样就把证书文件安装到了/root/certs目录下,并且每次获取新证书都会运行systemctl重启shadowsocks服务。

 

上面说的是使用root用户的情况。如果不是root用户,就不能直接使用sudo启动web服务器,所以要改用别的方法。

 

4、非root用户申请证书

假设我们的用户名是sulian,拥有root的sudo权限。

首先安装acme.sh的步骤还是一样的,只不过会安装到/home/sulian/.acme.sh下而不是/root/.acme.sh。

但现在没有权限启动80端口的web服务器了,所以用nginx来处理web请求。

sudo apt install nginx

安装成功之后,会启动一个默认web服务监听80端口的所有请求,因此不必修改配置。默认配置的web根目录在/var/www/html。
为了让脚本写入信息,我们转移目录所有权给当前用户sulian。

sudo chown sulian:sulian /var/www/html

然后执行acme.sh脚本,使用nginx服务器申请证书:

acme.sh --issue -d ss.sulian.me --webroot /var/www/html

如果前面配置没有问题,证书会顺利申请成功。然后同样要将证书安装到本地目录,并且每次重新签发后重启shadowsocks:

mkdir /home/sulian/certs //创建本地证书目录
acme.sh --install-cert -d ss.sulian.me --key-file /home/sulian/certs/ss.sulian.me.key --cert-file /home/sulian/certs/ss.sulian.me.cer --reloadcmd "sudo systemctl restart shadowsocks-libev"

 

5、配置shadowsocks+v2ray

前面所有的步骤都是为了最后运行梯子做准备。现在我们已经拥有:

  • shadowsocks服务器(未配置)
  • v2ray插件
  • 一个自己的域名
  • 域名的ssl证书,自动更新,永不过期

那现在就可以开始进行最后的配置了。

编辑shadowsocks配置文件:

sudo nano /etc/shadowsocks-libev/config.json

进入编辑页面后,删掉所有原先内容(可连续按Ctrl+K删除整行),然后输入以下配置:

{
"server":"0.0.0.0",
"server_port": 443,
"password": "你的密码",
"timeout":60,
"method":"chacha20-ietf-poly1305",
"mode":"tcp_and_udp",
"fast_open":false,
"plugin":"v2ray-plugin",
"plugin_opts":"server;tls;fast-open;host=ss.sulian.me;cert=/home/sulian/certs/ss.sulian.me.cer;key=/home/sulian/certs/ss.sulian.me.key;loglevel=none"
}

其中server_port(端口)、password(密码)、plugin_opts(配置,包括域名、证书路径)是因人而异的。

端口推荐使用443,这样看起来更像普通的https网站。

 

6、客户端配置。

上面配置完毕之后,我们就拥有了一个支持v2ray插件的shadowsocks服务器,用普通的客户端直接连接是连不上的,需要做以下修改。

  • 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目录下的插件可执行文件名,选项里的host字段则是域名,跟申请证书的域名一致。

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

  • iOS用户

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

输入服务器名、端口和密码之后,点击“插件”,选择v2ray-plugin:

然后在下面的服务器中输入服务器域名,退出、保存。就可以和之前一样上网了。

  • Android用户:

安装官方客户端https://github.com/shadowsocks/shadowsocks-android和官方插件https://github.com/shadowsocks/v2ray-plugin-android/releases后,进行同样配置即可。由于没有手机,暂未进行测试,

30 comments

  1. puchunwei says:

    mode设置为quic有尝试过能用吗? websocket+tls是可以正常使用的,但是切换mode为quic服务端启动是正常的,但是shadowrocket访问不通,查看了v2ray plugin的github相关的issue也过过类似的问题,但是没有看到具体的解法,不知道楼主是否是可用的

  2. Emacser says:

    我只用 v2ray 后IP被封,但是使用 shadowsocks + v2ray-plugin 没问题,请问怎么单纯的使用 v2ray 来配置成流量特征为 shadowsocks + v2ray-plugin 呢?

  3. zhuangmoren says:

    我是root账号,根据文章操作都成功了,最后重启Shadowsocks-libev 报这个错:
    Feb 13 xx ss-server[16581]: 2022-02-13 09:56:29 INFO: tcp server listening at 127.0.0.1:44701
    Feb 13 xx ss-server[16581]: 2022-02-13 09:56:29 INFO: udp server listening at 0.0.0.0:443
    Feb 13 xx ss-server[16581]: Permission denied
    Feb 13 xx ss-server[16581]: 2022-02-13 09:56:29 ERROR: plugin service exit unexpectedly
    Feb 13 xx systemd[1]: shadowsocks-libev.service: Main process exited, code=exited, status=255/EXCEPTION
    Feb 13 xx systemd[1]: shadowsocks-libev.service: Failed with result ‘exit-code’.
    为什么会有权限问题,是哪里的权限问题?

  4. Abu says:

    请问这有办法进行测试吗? 我按你的流成应该是配置成功了。 证书创建成功,服务端与客户端使用的都是一个版本。
    shadowsocks+v2ray+websocket tls代理配置笔记 你的这篇我也跟着配置了。
    配置好像也没什么问题。域名也可以访问,就是翻墙不了。请问有什么办法排除一下问题?

  5. magicpower says:

    现在acme使用zerossl了,还得去注册一个帐号,不然下载证书那一步一直出错

  6. jimmy says:

    博主好, 最近一个月我发现你的配置已经不管用了,翻不了墙了, 请问有解决方法吗, 之前一直能用

  7. Oliver says:

    如果需要Andriod客户端连接, 服务器端证书需要用fullchain. 否则可能会遇到”Connection reset by peer”错误 (服务器v2ray错误是 “failed to read request header > websocket: close 1000 (normal)”)。

    例如:
    acme.sh –install-cert -d ss.sulian.me –key-file /home/sulian/certs/ss.sulian.me.key –cert-file /home/sulian/certs/ss.sulian.me.cer –fullchain /home/sulian/certs/fullchain.pem –reloadcmd “sudo systemctl restart shadowsocks-libev”

    open;host=ss.sulian.me;cert=/home/sulian/certs/fullchain.pem;key=/home/sulian/certs/ss.sulian.me.key;loglevel=none”

  8. DIHER says:

    please confirm you don’t need GoLang to install v2ray with shadowsocks-libev … ?

    previously I used OBFS but I want to upgrade with v2ray using CentOS.

  9. frank says:

    大佬,再问个问题,我用安卓模拟器,为什么电脑可以用vpn(上Google),电脑里面的模拟器不能上(Google),里面访问国内网站都可以访问,求大佬指点,感激不尽!

  10. jimmy says:

    感谢大佬,请问一下,如何限制设备连接数量呢, 我分享给朋友他们,怕他们滥用。

  11. jimmy says:

    请问大哥, 这种方法支持多用户的配置模式吗, 支持的话, 麻烦回复一下怎么改配置文件,感激不尽

    • 苏莉安 says:

      我配置多用户就要用systemd多启动几个系统服务了,这个配置只能支持单用户。

  12. Jimmy says:

    {
    “server”:”0.0.0.0″,
    “server_port”: 443,
    “password”: “你的密码“,
    “timeout”:60,
    “method”:”chacha20-ietf-poly1305″,
    “mode”:”tcp_and_udp”,
    “fast_open”:false,
    “plugin”:”v2ray-plugin”,
    “plugin_opts”:”server;tls;fast-open;host=ss.sulian.me;cert=/home/sulian/certs/ss.sulian.me.cer;key=/home/sulian/certs/ss.sulian.me.key;loglevel=none”
    }

    写的不错, 但是大哥能不能把里面的中文双引号改了, 哈哈哈

  13. Mason says:

    您好,请教您一个问题,我之前使用的是shadowsocks,后来换了V2rayN,然后现在无法使用了,打开谷歌就显示500错误,
    500 internal privoxy error
    privoxy encountered an error while processing your request:
    could not load template flex no-server-data or on of its included components .

  14. xn zhang says:

    编辑shadowsocks配置文件,这个完事就有shadowsocks服务了吗?我这边配完了怎么没有443端口?

    • asd says:

      现在基本用的V2ray梯子比较多了吧,常年用的几个里面就下面这个机场梯子算是很不错了,线路多而且都是IEPL,IPLC专线,速度很快,还能免费试用三天

      [网址已屏蔽]

      大家可以试试

发表回复

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