去他妈的防火墙
它们害怕人民了解真相
防火长城是中国的一项网络审查制度,旨在实现对信息流通的严格控制,进而维护对社会的全面监管。这一制度不仅阻断了公众与外部世界的联系,更是出于对民众获取真相的深切恐惧。
本文将介绍当前几种主流的代理协议,并简要概述它们的部署方法。尽管这些努力微不足道,但它们为突破互联网封锁提供了可能的途径,助力人们获取更为开放的信息。
reality
目前安全性最高也是自建最多人使用的协议,能有效消除服务端 TLS 指纹特征,隐藏和保护流量的特征。
域名选择
reality 只需要获取域名即可使用,目标网站必须满足 5 个条件:
使用 TLS 1.3 协议
使用 X25519 签名算法
- 支持 HTTP/2 协议(H2)
- 不使用 CDN - 如果 Reality 目标网站使用 CDN,数据将转发到 CDN 节点,使你的 Reality 节点成为别人的反向代理加速节点
在网站 URL 末尾添加 /cdn-cgi/trace
。如:你看上的的域名是https://codepen.io
此时在域名后面加上/cdn-cgi/trace
,即:https://codepen.io/cdn-cgi/trace
,发现网址内容如下图,则表示网站正在使用 Cloudflare CDN,这样的是不能用的
- 中国境内不依赖任何代理可以直接访问
使用 https://www.itdog.cn/ping/ 输入域名持续测试,查看中国境内连通性
获取域名
域名推荐度:偷自己 > 偷邻居 > 偷服务器所在地图书馆、大学、旅游局 > 偷大厂
偷自己的域名
顾名思义,用自己的服务器部署网站(域名 DNS 记录指向自己部署 reality 的机器上)
偷邻居的域名
ASN 查询工具:https://tools.ipip.net/as.php
FOFA 目标网站查询工具:https://fofa.info
首先使用 ASN 查询工具,输入你的服务器 IP,记录下你的服务器所在 ASN
使用下面代码块中的这段搜索条件,将 ASN 替换为你查询出来的数字,在 FOFA 进行搜索。下面的示例代码含义是「查询自治域为 16509,美国区域,端口为 443,证书不是由 Let’s Encrypt 或者 ZeroSSL 颁发的,且请求成功的网站。」
country 字段为国家地区两字母代码,可在以下网站寻找
1
asn=="16509" && country=="US" && port=="443" && cert!="Let's Encrypt" && cert.issuer!="ZeroSSL" && status_code="200"
从搜索结果中,找到有域名的网站,与 第一部分中「1.1 目标网站的标准」提到的条件进行核对,全都符合即可将此网站域名记录下来,以供后续使用。
偷服务器所在地图书馆、大学、旅游局
- 搜索美国比较有名的大学,看他们的官网,与 第一部分中「1.1 目标网站的标准」提到的 5 个条件进行核对
- 搜索美国的图书馆官网,看他们与 1.1……
- 搜美国的旅游……
偷大厂的网站
1 | # Apple |
一键脚本
1 | # 首次运行 |
面板部署
1 | # 首次运行 |
实现 Full cone
服务端防火墙需要放行 UDP 高位端口(1024-65535),如果使用 Docker 那容器网络模式需要是 Host
1 | ufw allow 1024:65535/udp |
shadowsocks
最简单、最快速、消耗最低的加密代理协议,但极易遭到封锁。历经波折,目前更新到 shadowsocks 2022
shadowsocks 2022 声称提升了性能并带有完整的重放保护和防止TCP主动探测,但仍有较大封锁风险谨慎使用
一键脚本
部署 shadowsocks 2022
1 | # 首次运行 |
最好使用 sing-box 开启 multiplex 和 padding 且在支持客户端启用,在 /etc/sing-box/conf 目录下对应配置文件手动添加
1 | { |
面板部署
部署 shadowsocks 2022 + obfs(即http混淆)
1 | # 首次运行 |
请求头添加名为Host,值为obfs-host=gateway.icloud.com
实现 Full cone
服务端防火墙需要放行 UDP 高位端口(1024-65535),如果使用 Docker 那容器网络模式需要是 Host
1 | ufw allow 1024:65535/udp |
hysteria
UDP 协议,基于魔改的 QUIC 协议,垃圾线路的救星,部分地区容易 Qos 出现断流情况
URI 格式:hysteria2://[auth@]hostname[:port]/?[key=value]&[key=value]…
例如:hysteria2://rR9YCGYaY0LpP7BLswTSzQ==@47.76.67.1:30000/?sni=hy.test.com&insecure=0#🇭🇰 Test
性能优化
1 | # 将发送、接收两个缓冲区都设置为 16 MB |
官方一键脚本
1 | # 安装/升级 |
证书设置
可使用 acme 申请的域名证书或自签证书
1 | # 写入 Bing 自签证书 |
修改配置文件
1 | vim /etc/hysteria/config.yaml |
config.yaml 文件,最小化配置文件,更多功能参考官网
1 | listen: :30000 #默认端口443,可以修改为其他端口 |
服务启动
1 | # 开放对应端口 |
端口跳跃
运营商会阻断或限速 UDP 连接。不过,这些限制往往仅限单个端口。端口跳跃可用作此情况的解决方法。
注意:设置 iptables 规则网卡名称 eth0 要根据具体情况更改,可用命令 ip a 查看网卡名称!
常见以太网接口命名:eth0 /eth1 /eth2 /ens33 /ens5 / enp0s3
1 | # 安装软件包用于保存和恢复 iptables 规则 |
在该示例中,服务器以太网卡名称 eth0 监听 30000 端口,但客户端可以通过 30001-32000 范围内的任何端口连接。
证书错误
如果显示:{"error": "invalid config: tls: open /etc/hysteria/server.crt: permission denied"}
或者 failed to load server conf
的错误,则说明 Hysteria 没有访问证书文件的权限,需要执行下面的命令将 Hysteria 切换到 root 用户运行
1 | sed -i '/User=/d' /etc/systemd/system/hysteria-server.service |
snell
Surge 团队开发的私有专属协议,媲美甚至超越 shadowsocks,最新版仅限于 Surge 使用。
一键脚本
1 | wget -O snell.sh --no-check-certificate https://git.io/Snell.sh && chmod +x snell.sh && ./snell.sh |
Docker部署
1 | # 创建文件夹 |