它们害怕人民了解真相

防火长城是中国的一项网络审查制度,旨在实现对信息流通的严格控制,进而维护对社会的全面监管。这一制度不仅阻断了公众与外部世界的联系,更是出于对民众获取真相的深切恐惧。

本文将介绍当前几种主流的代理协议,并简要概述它们的部署方法。尽管这些努力微不足道,但它们为突破互联网封锁提供了可能的途径,助力人们获取更为开放的信息。

reality

目前安全性最高也是自建最多人使用的协议,能有效消除服务端 TLS 指纹特征,隐藏和保护流量的特征。

域名选择

reality 只需要获取域名即可使用,目标网站必须满足 5 个条件:

  1. 使用 TLS 1.3 协议

  2. 使用 X25519 签名算法

  1. 支持 HTTP/2 协议(H2)

  1. 不使用 CDN - 如果 Reality 目标网站使用 CDN,数据将转发到 CDN 节点,使你的 Reality 节点成为别人的反向代理加速节点

在网站 URL 末尾添加 /cdn-cgi/trace 。如:你看上的的域名是https://codepen.io此时在域名后面加上/cdn-cgi/trace ,即:https://codepen.io/cdn-cgi/trace ,发现网址内容如下图,则表示网站正在使用 Cloudflare CDN,这样的是不能用的

  1. 中国境内不依赖任何代理可以直接访问

使用 https://www.itdog.cn/ping/ 输入域名持续测试,查看中国境内连通性

获取域名

域名推荐度:偷自己 > 偷邻居 > 偷服务器所在地图书馆、大学、旅游局 > 偷大厂

偷自己的域名

顾名思义,用自己的服务器部署网站(域名 DNS 记录指向自己部署 reality 的机器上)

偷邻居的域名

ASN 查询工具:https://tools.ipip.net/as.php

FOFA 目标网站查询工具:https://fofa.info

  1. 首先使用 ASN 查询工具,输入你的服务器 IP,记录下你的服务器所在 ASN

  2. 使用下面代码块中的这段搜索条件,将 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"
  3. 从搜索结果中,找到有域名的网站,与 第一部分中「1.1 目标网站的标准」提到的条件进行核对,全都符合即可将此网站域名记录下来,以供后续使用。

偷服务器所在地图书馆、大学、旅游局

  1. 搜索美国比较有名的大学,看他们的官网,与 第一部分中「1.1 目标网站的标准」提到的 5 个条件进行核对
  2. 搜索美国的图书馆官网,看他们与 1.1……
  3. 搜美国的旅游……

偷大厂的网站

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Apple
www.icloud.com
gateway.icloud.com
itunes.apple.com
swdist.apple.com

# 其他
www.paypal.com
www.microsoft.com
www.samsung.com
www.amd.com
www.tesla.com
www.nvidia.com
www.cisco.com
addons.mozilla.org
www.lovelive-anime.jp
www.sap.com

# 技术网站
www.java.com
www.mysql.com
www.oracle.com
www.mongodb.com

一键脚本

1
2
3
4
# 首次运行
bash <(wget -qO- -o- https://github.com/233boy/Xray/raw/main/install.sh)
# 再次运行
xray

面板部署

1
2
3
4
# 首次运行
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
# 再次运行
x-ui

reality配置

实现 Full cone

服务端防火墙需要放行 UDP 高位端口(1024-65535),如果使用 Docker 那容器网络模式需要是 Host

1
ufw allow 1024:65535/udp

shadowsocks

最简单、最快速、消耗最低的加密代理协议,但极易遭到封锁。历经波折,目前更新到 shadowsocks 2022

shadowsocks 2022 声称提升了性能并带有完整的重放保护和防止TCP主动探测,但仍有较大封锁风险谨慎使用

一键脚本

部署 shadowsocks 2022

1
2
3
4
# 首次运行
bash <(wget -qO- -o- https://github.com/233boy/sing-box/raw/main/install.sh)
# 再次运行
sing-box

最好使用 sing-box 开启 multiplex 和 padding 且在支持客户端启用,在 /etc/sing-box/conf 目录下对应配置文件手动添加

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"inbounds": [
{
"tag": "Shadowsocks-12333.json",
"type": "shadowsocks",
"listen": "::",
"listen_port": 12333,
"method": "2022-blake3-aes-128-gcm",
"password": "vDaq/GDr9Xm8+0gL0GkxaA==",
"multiplex": {
"enabled": true,
"padding": true
}
}
]
}

面板部署

部署 shadowsocks 2022 + obfs(即http混淆)

1
2
3
4
# 首次运行
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)
# 再次运行
x-ui

shadowsocks 2022 + http混淆配置

请求头添加名为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
2
3
# 将发送、接收两个缓冲区都设置为 16 MB
sysctl -w net.core.rmem_max=16777216
sysctl -w net.core.wmem_max=16777216

官方一键脚本

1
2
3
4
# 安装/升级
bash <(curl -fsSL https://get.hy2.sh/)
# 卸载
bash <(curl -fsSL https://get.hy2.sh/) --remove

证书设置

可使用 acme 申请的域名证书或自签证书

1
2
# 写入 Bing 自签证书
openssl req -x509 -nodes -newkey ec:<(openssl ecparam -name prime256v1) -keyout /etc/hysteria/server.key -out /etc/hysteria/server.crt -subj "/CN=bing.com" -days 36500 && sudo chown hysteria /etc/hysteria/server.key && sudo chown hysteria /etc/hysteria/server.crt

修改配置文件

1
vim /etc/hysteria/config.yaml

config.yaml 文件,最小化配置文件,更多功能参考官网

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
listen: :30000 #默认端口443,可以修改为其他端口

tls:
cert: /etc/hysteria/fullchain.cer
key: /etc/hysteria/private.key

auth:
type: password
password: rR9YCGYaY0LpP7BLswTSzQ== #认证密码

masquerade:
type: proxy
proxy:
url: https://www.paypal.com/ #伪装网址
rewriteHost: true

服务启动

1
2
3
4
5
6
# 开放对应端口
ufw status
ufw allow 30000
# 重启并开机自启
systemctl restart hysteria-server.service
systemctl enable hysteria-server.service

端口跳跃

运营商会阻断或限速 UDP 连接。不过,这些限制往往仅限单个端口。端口跳跃可用作此情况的解决方法。

注意:设置 iptables 规则网卡名称 eth0 要根据具体情况更改,可用命令 ip a 查看网卡名称!

常见以太网接口命名:eth0 /eth1 /eth2 /ens33 /ens5 / enp0s3

1
2
3
4
5
6
7
8
# 安装软件包用于保存和恢复 iptables 规则
apt install iptables-persistent
# IPv4
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 30001:32000 -j REDIRECT --to-ports 30000
# IPv6
ip6tables -t nat -A PREROUTING -i eth0 -p udp --dport 30001:32000 -j REDIRECT --to-ports 30000
# 保存当前 iptables 规则
netfilter-persistent save

在该示例中,服务器以太网卡名称 eth0 监听 30000 端口,但客户端可以通过 30001-32000 范围内的任何端口连接。

证书错误

如果显示:{"error": "invalid config: tls: open /etc/hysteria/server.crt: permission denied"} 或者 failed to load server conf 的错误,则说明 Hysteria 没有访问证书文件的权限,需要执行下面的命令将 Hysteria 切换到 root 用户运行

1
2
3
4
sed -i '/User=/d' /etc/systemd/system/hysteria-server.service
sed -i '/User=/d' /etc/systemd/system/hysteria-server@.service
systemctl daemon-reload
systemctl restart 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 创建文件夹
mkdir snell && cd snell
# 写入 Docker Compose 文件
cat > docker-compose.yaml << EOF
services:
snell:
image: vocrx/snell-server:alpine
container_name: snell
restart: always
network_mode: host
environment:
- PORT=65110
- PSK=jy7jbw6yFWikg2uS
- DNS=1.1.1.1,8.8.8.8
EOF
# 自定义 SNELL 配置参考
services:
snell:
image: vocrx/snell-server:alpine
container_name: snell
restart: always
network_mode: host
environment:
- PORT=自定义使用的端口, 仅host模式下生效, 不写则随机。
- PSK=节点密码, 不写则随机。
- IPV6=true/false, 不写默认为false
- DNS=8.8.8.8,1.1.1.1, 不写为系统默认
- VERSION=v4.1.1, 自定义二进制文件版本, 不写则默认最新版
- OBFS=http,默认为空,写此条必须配置HOST
- HOST=icloud.com,默认为空
# 启动
docker compose up -d

参考/推荐

Reality自建教程