由于MTProto协议在墙内极难生存,在尝试过mtg2.0和掩耳盗铃的伪装页面均告失败之后,白名单模式可能是更值得尝试的方法,下面就分享搭建白名单MTProxy的方法,同样是使用一键脚本。
这个MTProxy + TLS 脚本同样出自 Eller大佬之手。
使用 Docker进行安装,首先需要安装 Docker,镜像集成了nginx、mtproxy+tls 实现对流量的伪装,并采用白名单模式来应对防火墙的检测。
关于白名单模式,可以谷歌《白名单防火墙可以有效对抗 GFW 的主动探测》,下面是引用的片段:
- 服务器的生存挑战
我们在我们运营的 SSR 机场的服务器上全部部署了防火墙, 并使用上述策略更新防火墙的白名单. 我们进行了为期 18 天的实验. 在实验中, 所有服务器都没有被墙 (除了一次意外撤除防火墙的事件). 这些服务器工作在 163 线路, CN2 GT 线路和 CN2 GIA 线路. 但是为了保护我们自己的安全, 我们不能公布实验的具体规模.
为了对比, 我们尝试性撤除 4 台服务器的防火墙, 在这几次实验中, 这些服务器在数分钟到一小时之内都被迅速封禁. 这进一步证明了白名单防火墙确实是保护服务器的主要因素.
除了 SSR, 我们还测试了 MTProto 协议. MTProto 是一个早就证明被特征识别的协议. 实验证明, 这样的策略同样可以保护 MTProto. 实验中我们部署了 4 台服务器, 设有保护的两台服务器一直生存至今, 而没有部署防火墙的两台服务器分别在第 20 分钟和第一小时被封禁. 这个实验再次印证了主动探测是墙封禁服务器的必要条件, 即使这个协议早已被特征识别.
——《白名单防火墙可以有效对抗 GFW 的主动探测》- 2020.05.01
由于白名单模式文章已经发布了一年有余,不知道现在的GFW策略是否升级,所以此方法还需要实验验证。
安装Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
安装 Docker 十分简单,只需要等待一小会即可完成。
安装 nginx-mtproxy
拉取镜像
docker pull ellermister/nginx-mtproxy:latest
✔️一键运行
docker run --name nginx-mtproxy -d -p 80:80 -p 443:443 ellermister/nginx-mtproxy:latest
可通过 -p 指定端口映射,连接均为外部端口。
查看配置:
docker logs nginx-mtproxy
✔️自定义运行
secret=$(head -c 16 /dev/urandom | xxd -ps) domain="cloudflare.com" docker run --name nginx-mtproxy -d -e secret="$secret" -e domain="$domain" -p 80:80 -p 443:443 ellermister/nginx-mtproxy:latest
自定义密钥、域名
Secret
secret="25c8dfee81acdadaff3a338a10db8497"
运行 head -c 16 /dev/urandom | xxd -ps 命令生成
domain
domain="cloudflare.com"
Fake TLS 网址,需要填写未被防火长城认证的网址。
默认的认证页面:
http://ip/add.php
浏览器访问该页面,会自动提交当前IP地址。
只有认证过的IP地址才会被服务器防火墙放行。
已知问题:使用 docker log 打印出来的代理地址端口为8443,实际上却是443,需要注意。
使用方法:
先点击链接进行认证,再连接 MTProxy 代理。
更多命令:
查看配置:
docker logs nginx-mtproxy
停止nginx-mtproxy
docker stop nginx-mtproxy
启动nginx-mtproxy
docker start nginx-mtproxy
重启nginx-mtproxy
docker restart nginx-mtproxy
删除nginx-mtproxy
docker rm nginx-mtproxy
关于 MTProxy 代理有任何问题可以在此处留言或加入群组进行讨论。
另一个思路:如果个人使用觉得白名单的验证麻烦,且地理位置相对固定,可以自行搭建「省界墙」,在 VPS 上仅放行所在省份的 IP地址,也可以有效防止被墙,但可能效果会比白名单要差一些。
https://hub.docker.com/r/ellermister/nginx-mtproxy
文章评论
大佬有tg群母鸡
@顶顶顶顶 https://t.me/jimugroup
还是不行诶。。。
请问一下外部端口能改吗,
因为机器上还搭了vless+tls,443和80都是被占用的
假如我把外部docker的映射改成了 -p 890:80 -p 899:443
访问添加http://xxx.xxx.xxx.xxx:890/add.php,是成功的already added
但是我用再tg里899添加代理始终就连不上
@233 理论上是可以改的,但是脚本应该有一些问题,具体可以去开发者的Telegram群里问问。