为什么要使用 naiveproxy?

首先贴上大佬对目前能用的翻墙协议的简单评价

gfwrev_1
gfwrev_2
gfwrev_3

为什么要使用 naiveproxy? 这个问题,直接摘录 naiveproxy 的 README 就可以回答。

../../images/naiveproxy/naiveproxy_1.thumbnail.png

The README.md of naiveproxy

与 naiveproxy 相似的项目还有 trojan

二者都是使用 TLS 协议穿越 GFW,以减少流量特征,抵抗主动/被动检测以及运营商的 Qos

如同大佬所说 今天能用的协议就是好协议;但是今天能用不等于明天能用,所以我们需要早做打算。

快速搭建 Caddy Proxy

本节只是导入,如果想直接进入正文,请点击这里

安装 Caddy

curl https://getcaddy.com | sudo bash -s personal http.forwardproxy

创建配置文件

example.com {
gzip
tls [email protected]
forwardproxy {
  basicauth Username Password
  hide_ip
  hide_via
  probe_resistance secert.localhost
  }
}

修改 UsernamePasswordsecert 后将上述内容写入 Caddyfile

启动 Caddy

caddy

如果出现报错,运行 sudo setcap cap_net_bind_service=+ep $(which caddy)

如果没有报错,Caddy Proxy 搭建完成。

设置代理

在浏览器中将代理设置为 https://example.com ,然后访问 secert.localhost ,在弹出的提示框中输入 UsernamePassword 即可。


到此为止,你已经有了一个可用的 HTTP/2 proxy,但是为什么不直接使用这个 HTTP/2 proxy 呢?

对于这个问题可以阅读项目的 FAQ

简而言之,TLS-in-TLS 在包长度上会有明显的特征,很容易被 GFW 探测出来然后封杀。

用作者的话来说,NaiveProxy 只是做了以下工作。

NaiveProxy does HTTP Fast CONNECT similar to TCP Fast Open, i.e. send subsequent data immediately after CONNECT. Also, you may have to type in the password for the proxy everytime you open the browser. NaiveProxy sends the password automatically.

搭建 NaiveProxy

下面开始正文,以下演示基于 Debian 9 系统。

安装 libnss3

sudo apt install libnss3 xz-utils zip

创建前端网页

cd /tmp/
wget https://github.com/jiashigrsyt/jiashigrsyt.github.io/archive/master.zip
unzip master.zip
find jiashigrsyt.github.io-master/ -name "*.html" | xargs -n 1 sed -e "s/jiashigrsyt\.github\.io/example.com/g" -i
find jiashigrsyt.github.io-master/ -name "*.md" | xargs -n 1 sed -e "s/jiashigrsyt\.github\.io/example.com/g" -i
sudo -u www-data cp -r jiashigrsyt.github.io-master/ /var/www/html

仅做演示,请根据自己情况,自行修改,切莫无脑使用。

下载 naiveproxy

cd /tmp
wget https://github.com/klzgrad/naiveproxy/releases/download/v71.0.3578.98-2/naiveproxy-v71.0.3578.98-2-linux.tar.xz
tar -xf naiveproxy-v71.0.3578.98-2-linux.tar.xz

cd naiveproxy-v71.0.3578.98-2-linux/
cp naive /usr/local/bin/

请适当修改下载地址,下载地址请至 latest release 查看。

创建 naiveproxy 配置文件

服务端

{
  "listen": "http://127.0.0.1:8080",
  "padding": true,
}

客户端

{
  "listen": "socks://127.0.0.1:1080",
  "proxy": "https://Username:[email protected]",
  "padding": true
}

添加 naiveproxy 服务

# /etc/systemd/system/navieproxy.service
[Unit]
Description=NaiveProxy Server Service
After=network-online.target

[Service]
Type=simple
User=nobody
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
ExecStart=/usr/local/bin/naive /etc/naive/config.json

[Install]
WantedBy=multi-user.target

配置 Caddy

example.com {
gzip
tls [email protected]
root /var/www/html
forwardproxy {
  basicauth Username Password
  hide_ip
  hide_via
  probe_resistance secert.localhost
  upstream http://127.0.0.1:8080
  }
}

Caddy 相关内容请阅读这篇博文

如需自启,请自行创建服务。

参数调优

net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_slow_start_after_idle = 0

将上述内容写入 `/etc/sysctl.d/local.conf

使用 NaiveProxy

../../images/naiveproxy/zip.png

压缩包

  1. latest release 页面,根据系统下载相应的压缩包,解压。
  2. 修改 config.json 文件(参见创建 naiveproxy 配置文件)。
  3. 在命令行界面,当前目录下运行 ./naive config.json
  4. 本地 1080 端口已经监听一个 socks5代理,仿照 Shadowsocks 使用该 socks5代理。