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后,进行同样配置即可。由于没有手机,暂未进行测试,
mode设置为quic有尝试过能用吗? websocket+tls是可以正常使用的,但是切换mode为quic服务端启动是正常的,但是shadowrocket访问不通,查看了v2ray plugin的github相关的issue也过过类似的问题,但是没有看到具体的解法,不知道楼主是否是可用的
没尝试过,用quic能正常通过nginx代理吗?
我只用 v2ray 后IP被封,但是使用 shadowsocks + v2ray-plugin 没问题,请问怎么单纯的使用 v2ray 来配置成流量特征为 shadowsocks + v2ray-plugin 呢?
我是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’.
为什么会有权限问题,是哪里的权限问题?
另外操作系统是debian 10
解决了, 插件名字错了
LOL
linux非root用户无权监听1024以下的端口
请问这有办法进行测试吗? 我按你的流成应该是配置成功了。 证书创建成功,服务端与客户端使用的都是一个版本。
shadowsocks+v2ray+websocket tls代理配置笔记 你的这篇我也跟着配置了。
配置好像也没什么问题。域名也可以访问,就是翻墙不了。请问有什么办法排除一下问题?
现在acme使用zerossl了,还得去注册一个帐号,不然下载证书那一步一直出错
博主好, 最近一个月我发现你的配置已经不管用了,翻不了墙了, 请问有解决方法吗, 之前一直能用
如果需要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”
你说得对,我更新一下正文。
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.
v2ray可以直接在github下到编译好的二进制文件,不用golang
大佬,再问个问题,我用安卓模拟器,为什么电脑可以用vpn(上Google),电脑里面的模拟器不能上(Google),里面访问国内网站都可以访问,求大佬指点,感激不尽!
感谢大佬,请问一下,如何限制设备连接数量呢, 我分享给朋友他们,怕他们滥用。
请问大哥, 这种方法支持多用户的配置模式吗, 支持的话, 麻烦回复一下怎么改配置文件,感激不尽
我配置多用户就要用systemd多启动几个系统服务了,这个配置只能支持单用户。
{
“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”
}
写的不错, 但是大哥能不能把里面的中文双引号改了, 哈哈哈
这个不影响VPS安装LNMP环境吧
可能影响,主要是端口冲突。建议你看我后一篇用nginx做代理。
楼主您好,我在win7操作系统上打不开ss,一打开就闪退这是为什么
不清楚,下个原版的重新配置吧。
您好,请教您一个问题,我之前使用的是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 .
v2rayN不清楚,我用的是ss+v2ray-plugin
编辑shadowsocks配置文件,这个完事就有shadowsocks服务了吗?我这边配完了怎么没有443端口?
用systemctl restart shadowsocks-libev重启服务
现在基本用的V2ray梯子比较多了吧,常年用的几个里面就下面这个机场梯子算是很不错了,线路多而且都是IEPL,IPLC专线,速度很快,还能免费试用三天
[网址已屏蔽]
大家可以试试
不要在我这里打广告