文章目录[隐藏]
本文转载自逗比根据地:https://doub.io/ss-jc48/
本文章主要是实现:
你访问 http://xxx.xx 域名(http 80端口)
,能正常看到网站内容,但如果你 链接这个网站服务器上面的ShadowsocksR服务端账号(也是80端口),也能正常使用。实现了 同端口网站和ShadowsocksR共存。
而对于墙或者运营商来说,当他们检测你传输的流量特征的时候,会看到你的流量是去访问海外服务器的 80端口,就算闲的没事跟踪过去,也会发现是一个正常的海外网站(随便搞一个静态的 HTML 英文页面),一个没有敏感词的海外英文网站,墙和运营商是不会去注意的。
所以就实现了 伪装ShadowsocksR服务端流量的功能,每天国内访问海外网站(80/443端口)的流量非常庞大,在这个伪装中,可以很大程度的降低被发现(匹配流量特征)的几率,所以有兴趣的可以折腾玩玩。
文章里的原理:你链接你的服务器 80端口(SSR服务端端口),然后就会链接到ShadowsocksR服务端,ShadowsocksR服务端会判断你是链接SSR,还是访问网站,如果是访问网站,就会把你的流量数据重定向到网站监听的端口(2333端口),然后你就显示网页了。
注意:如果要用这个同端口伪装功能,请不要开启 协议(origin)和混淆插件(obfs)的兼容原版模式(_compatible),不要使用原版SS链接! 同时,Shadowsocks-libev版服务端的simple-obfs功能,并不能实现本教程所说的同端口共存功能!
Caddy 配置步骤
安装 Caddy
Caddy 是 Go语言编译好的二进制程序,所以只有一个 Caddy 文件(还需要生成一个配置文件),但是为了管理方便,所以我做了个一键脚本。
wget -N --no-check-certificate https://softs.pw/Bash/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh
# 如果上面这个脚本无法下载,尝试使用备用下载:
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh
安装Caddy成功后,我们就继续下面的步骤。
配置 Caddy
Caddy的特点之一就是,配置文件非常的简单,继续下面看就知道了。
注意:以下示例域名皆为 toyoo.ml ,请注意更换为自己的域名,并做好域名解析。
HTTP(80端口)
假设你要伪装 80端口(ShadowsocksR服务端的用户端口是 80),那么你可以在 Caddy中随便配置一个监听端口。
比如的监听为 2333
端口(可以自己改)。
echo "http://toyoo.ml:2333 { root /usr/local/caddy/www/ssr gzip }" > /usr/local/caddy/Caddyfile
HTTPS(443端口)
如果你想要伪装 443端口(ShadowsocksR服务端的用户端口是 443),那么你可以在 Caddy中随便配置一个监听端口。
比如的监听为 6666
端口(可以自己改)。
如果你有 SSL证书和密匙的话,把 SSL证书(xxx.crt)和密匙(xxx.key)文件放到/root文件夹下
(也可以是其他文件夹,自己改下面代码),然后这样做:
echo "https://toyoo.ml:6666 { root /usr/local/caddy/www/ssr tls /root/xxx.crt /root/xxx.key gzip }" > /usr/local/caddy/Caddyfile
如果你没有 SSL证书和密匙,那么你可以这样做:
下面的 xxxx@xxx.xx 改成你的邮箱,同时需要注意的是,申请 SSL证书前,请务必提前解析好域名记录(解析后最好等一会,以全球生效),否则 Caddy会申请并配置失败!
echo "https://toyoo.ml:6666 { root /usr/local/caddy/www/ssr tls xxxx@xxx.xx gzip }" > /usr/local/caddy/Caddyfile
如果一切正常,那么Caddy会自动帮你申请 SSL证书并配置好,而且会定时续约SSL证书 和 强制 http重定向至https !
HTTP重定向为HTTPS
当你是手动指定 SSL证书和密匙 来配置的话,Caddy只会监听 HTTPS端口(6666),并不会自动设置HTTP的重定向(如果是Caddy自动申请的SSL证书,那么就自动做好了),如果要做重定向的话,可以这样做:
当然,下面这个示例HTTP依然监听的80端口,如果你的ShadowsocksR服务端同时做了 80和443 两个端口的伪装,那么你可以把 80改成其他的比如 2333 端口。
echo "http://toyoo.ml:80 { redir https://toyoo.ml:6666{url} } https://toyoo.ml:6666 { gzip tls /root/xxx.crt /root/xxx.key }" > /usr/local/caddy/Caddyfile
然后我们新建一个 虚拟主机文件夹
mkdir /usr/local/caddy/www && /usr/local/caddy/www/ssr
然后去网上随便下载一个 HTML的网页模板(很好找的,这类模板非常多,随便找个英文模板就好了),解压后把网页文件通过SFTP 上传到刚才新建的虚拟主机文件夹中: /usr/local/caddy/www/ssr
然后我们重启 Caddy,当然这个时候我们还只能通过 http://toyoo.ml:2333
来访问我们的网站,我们还需要继续配置ShadowsocksR服务端。
service caddy restart
使用说明
启动:service caddy start 停止:service caddy stop 重启:service caddy restart 查看状态:service caddy status 查看Caddy启动日志: tail -f /tmp/caddy.log Caddy配置文件位置:/usr/local/caddy/Caddyfile
ShadowsocksR 配置步骤
打开你的配置文件(假设你的ShadowsocksR服务端安装在 /root
文件夹内):
vi /root/shadowsocksr/user-config.json
然后我们会看到配置文件,我们只需要找到 redirect参数
并修改就行了
按 I键
进入编辑模式,然后修改后按 Esc键
退出编辑模式,并输入 :wq
保存并退出)。
"redirect": "",
HTTP(80端口)
按照上面Caddy的HTTP配置(监听2333端口),把 redirect参数
改成下面这样:
"redirect": ["*:80#127.0.0.1:2333"],
HTTPS(443端口)
按照上面Caddy的HTTPS配置(监听6666端口),把 redirect参数
改成下面这样:
"redirect": ["*:443#127.0.0.1:6666"],
HTTP+HTTPS(80 / 443端口)
如果你把Caddy同时配置了多个端口(比如 80和443),那么把 redirect参数
改成下面这样:
"redirect": ["*:80#127.0.0.1:2333", "*:443#127.0.0.1:6666"],
然后重启ShadowsocksR服务端(假设你的ShadowsocksR服务端安装在 /root
文件夹内,并且是单用户):
bash /root/shadowsocksr/shadowsocks/run.sh
注意:如果要用这个同端口伪装功能,请不要开启 协议(origin)和混淆插件(obfs)的兼容原版模式(_compatible),不要使用原版SS链接! 同时,Shadowsocks-libev版服务端的simple-obfs功能,并不能实现本教程所说的同端口共存功能!
然后现在你可以尝试访问 http://toyoo.ml
,会发现不需要加端口号( http://toyoo.ml:2333
)也可以正常访问了!
同时,这时候你去链接这个ShadowsocksR服务端账号,服务器IP 可以写 VPS的IP,也可以写 上面绑定的域名(示例 toyoo.ml),会发现SSR链接 80 端口也能正常使用!
所以这个就实现了,伪装ShadowsocksR服务端流量为 正常海外网站流量的目的,同时也可以说实现了 网站和ShadowsocksR 同端口共存。
其他说明
启动显示成功,但是实际未运行
因为 服务脚本判断的问题,只判断了nohub是否运行 Caddy成功,但没有判断 Caddy 是否保持正常运行。
你可以理解为,nohub成功启动了 Caddy,但是 Caddy因为配置文件错误等原因,启动后又退出了。
所以这种情况下,你应该去查看启动日志:
tail -f /tmp/caddy.log
Nginx配置说明
至于 Nginx的话,你只需要找到你的 虚拟主机配置文件(lnmp.org 一键包的位置在 /usr/local/nginx/conf/vhost/域名.conf
),然后把监听端口改成像上面 Caddy配置里监听的端口一样。
listen 80; listen 443;
端口 80或者443 可以改成其他的,比如 2333和6666,然后ShadowsocksR配置文件和上面的步骤还是一样。
参考资料:https://breakwa11.blogspot.ru/2017/01/shadowsocksr-mu.html?m=1
还能这么玩。牛啊
因为看不懂,也找不到留言本,就干脆在这里文不对题留个言:
直接在 feedly 搜你的域名竟然找不到 rss!还好聪明如我加上 /feed,现在很美满。
@水八口 果然是冰雪聪明天生丽质难自弃啊~
https://ttz.im/2017/08/1415 shadowsocks-libev和simple-obfs 同端口伪装
该评论为私密评论
@求教 你这提示是80端口已经被Nginx占用了,换个端口呗。
该评论为私密评论
@求教 暂时没有方法,哈哈,我已经抛弃了自己搭建平台…… 还是花钱买服务比较省心
使用签名文件和邮箱方法均没有用
Nginx这快有没有详细的教程
/root/shadowsocksr/user-config.json
搜索了整个服务器都不会有这玩意
这种是达不到伪装目的的。如果是网页流量,流量特征必然是tls协议或者http协议。ss发送的数据都是没有这些特征的,即使他发送给80或者443端口,也能轻而易举被识别出来。。要想伪装,只有通过将ssr发送的数据,使用网站证书加密后发送给443端口。。服务器解密后判断是ssr流量还是普通的http请求。其实通过ssl加密后的数据即便没有网站伪装,或者使用443端口,也能很好地保护ssr不被检测出来了。这是我实际测试后得出的结论。
值得一提的是,部分运营商会对未知协议的海外流量限流降速。这里说的就是ssr流量,所以使用移动网络连接ssr,速度一言难尽。最好的解决办法还是出海时使用tls协议加密,或者切换为电信联通网络。