【开源】你们要的一键脚本部署naiveproxy

52次阅读

共计 13795 个字符,预计需要花费 35 分钟才能阅读完成。

基于 docker 的 naiveproxy 一键部署脚本

GitHub: https://github.com/RayWangQvQ/naiveproxy-docker

AMD/Debian 我自己测试通过,回复里有朋友反馈 ARM 也是测试通过的。

– [1. 说明](#1- 说明)
– [2. 预备工作](#2- 预备工作)
– [3. 部署服务端](#3- 部署服务端)
– [4. 客户端](#4- 客户端)
– [5. 自定义配置](#5- 自定义配置)
– [6. 版本变更](#6- 版本变更)
– [7. 常见问题](#7- 常见问题)
    – [7.1. 端口可以自定义吗](#71- 端口可以自定义吗)

## 1. 说明

镜像使用官方代码生成,利用 `GitHub Actions` 构建并上传到 `DockerHub`。

Dockerfile:[Dockerfile](Dockerfile)
DockerHub: https://hub.docker.com/repository/docker/zai7lou/naiveproxy-docker/general

## 2. 预备工作

  • 一个域名
  • 域名已 DNS 到当前服务器 ip
  • 服务器安装好 docker 环境

没有 docker 的可以使用下面命令进行安装:

  1. curl -sSL https://get.docker.com/ | sh
  2. systemctl start docker
  3. systemctl enable docker

复制代码

不需要自己生成 https 证书,caddy 会自动生成。

## 3. 部署服务端

一键安装脚本:

  1. # create a dir
  2. mkdir -p ./naive && cd ./naive
  3. # install
  4. bash <(curl -sSL https://raw.githubusercontent.com/RayWangQvQ/naiveproxy-docker/main/install.sh)

复制代码

当不指定参数时,该脚本是互动式的,运行后会提示输入相关配置信息,输入后回车即可。


install-interaction.png
(22.96 KB, 下载次数: 1)

2023-1-7 03:29 上传

点击文件名下载附件

install-interaction


insatll-interaction-re.png
(92.71 KB, 下载次数: 0)

2023-1-7 03:30 上传

点击文件名下载附件

insatll-interaction-re

当然,你也可以像下面那样,直接将参数拼接好后立即执行:

  1. # create a dir
  2. mkdir -p ./naive && cd ./naive
  3. # install
  4. curl -sSL -f -o ./install.sh https://raw.githubusercontent.com/RayWangQvQ/naiveproxy-docker/main/install.sh && chmod +x ./install.sh && ./install.sh -t demo.test.tk -m [email protected] -u zhangsan -p [email protected] –verbose

复制代码


install-silence.png
(83.18 KB, 下载次数: 0)

2023-1-7 03:30 上传

点击文件名下载附件

install-silence

参数说明:

    – `-t`:host,你的域名,如 `demo.test.tk`
    – `-o`: cert-mode,证书模式,1 为 Caddy 自动颁发,2 为自己指定现有证书
    – `-c`: cert-file,证书文件绝对路径,如 `/certs/test2.zai7lou.ml.crt`
    – `-k`, cert-key-file,证书 key 文件绝对路径,如 `/certs/test2.zai7lou.ml.key`
    – `-m`:mail,你的邮箱,用于自动颁发证书,如 `[email protected]`
    – `-w`: http-port,http 端口,默认 80
    – `-s`: https-port,https 端口,默认 443
    – `-u`:user,proxy 的用户名
    – `-p`:pwd,proxy 的密码
    – `-f`:fakeHost,伪装域名,默认 `https://demo.cloudreve.org`
    – `–verbose`,输出详细日志
    – `-h`:help,查看参数信息

容器 run 成功后,可以通过以下语句查看容器运行日志:

  1. docker logs -f naiveproxy

复制代码

`Ctrl + C` 可以退出日志追踪。

第一次运行会自动颁发证书,日志可能会先 ERROR 飘红,别慌,等一会。

如果最后日志出现 `certificate obtained successfully` 字样,就是颁发成功了,可以去部署客户端了。


cert-suc.png
(35.43 KB, 下载次数: 0)

2023-1-7 03:31 上传

点击文件名下载附件

suc

如果颁发证书一直不成功,请检查 80 端口和 443 端口是否开放、是否被占用。

部署成功后,浏览器访问域名,会展示伪装站点:


web.png
(59.36 KB, 下载次数: 1)

2023-1-7 03:31 上传

点击文件名下载附件

web

## 4. 客户端

很多教程,就不说了。

|  平台   | 客户端  |
| :—-:  | :—-: |
|  Win    | V2RayN/Nekoray |
| Linux   | Nekoray |
| MacOS   | Nekoray |
| Android | SagerNet |
| iOS     | Shadowrocket |

## 5. 自定义配置

Caddy 的配置文件 `Caddyfile` 已被挂载到宿主机的 [./data/Caddyfile](data/Caddyfile),想要自定义配置,比如:

– 添加多用户
– 修改 proxy 的用户名和密码
– 更改端口
– 修改伪装站点的 host

等等,都可以直接在宿主机修改该文件:

  1. vim ./data/Caddyfile

复制代码

修改完成并保存成功后,让 Caddy 热加载配置就可以了:

  1. docker exec -it naiveproxy /app/caddy reload –config /data/Caddyfile

复制代码

举个栗子,多用户可以直接添加 `forward_proxy`,像这样:

  1. :443, demo.test.tk #你的域名
  2. tls [email protected] #你的邮箱
  3. route {
  4.         forward_proxy {
  5.                 basic_auth zhangsan [email protected] #用户名和密码
  6.                 hide_ip
  7.                 hide_via
  8.                 probe_resistance
  9.         }
  10.         forward_proxy {
  11.                 basic_auth lisi 1234 #用户名和密码
  12.                 hide_ip
  13.                 hide_via
  14.                 probe_resistance
  15.         }
  16.         reverse_proxy you.want.com {
  17.                 #伪装网址
  18.                 header_up Host {upstream_hostport}
  19.         }
  20. }

复制代码

详细的配置语法可以参考 Caddy 的官方文档:https://caddyserver.com/docs/

P.S. 我发现 naiveproxy 插件版地 caddy,Caddyfile 里不支持 `demo.test.tk:443` 的格式,必须像上面那样端口在域名前面,否则会报错。应该是适配有问题,需要注意下。

## 6. 版本变更

[CHANGELOG](CHANGELOG.md)

## 7. 常见问题
### 7.1. 端口可以自定义吗

如果使用现有证书,可以自定义;如果要 Caddy 自动颁发,必须占有 80 端口。

Caddy 默认会占用 80 和 443 端口,用来管理证书,当前官方镜像并不支持更改默认端口,也就是一定需要占用 80 端口。

安装脚本可以选择证书模式,选择 2 使用现有证书,就可以不占用 80 和 443 端口了。

网友回复:

注册 curl -sSL https://get.docker.com/ | sh systemctl start docker systemctl enable docker 补上 docker 命令 乌龟壳 ARM 可以用

在 7 楼 非常感谢,很好用!

kukuyan 火前留名

qqcool8 刘明

表弟 支持技术贴 1 感谢分享

loonyjoy 技术贴不错,可惜是 docker

惜为伊人醉 感谢大佬的付出

aihoom 刘铭 试试好用不

ytt 技术贴 火钳刘明

eudx 感谢大佬的分享

a4425656 为什么要用 docker,一是费劲,二是感觉里边可能掺沙子

注册 比 hysteria 好用吗?

注册 好贴子

ndwuming 支持

沙龙 naive 主要解决指纹的问题,让流量完全符合 chrome 浏览器的特征。Hysteria 还没研究过,抽空去看看。

hkvip8 多谢老哥

在 7 楼 能自定义端口吗,80443 不方便

ndwuming 多谢大佬分享,能自定义更改伪装站么

hanjibin 先收藏一波

在 7 楼 Error response from daemon: No such container: naiveproxy

Erik 马克 感谢大佬的分享

注册 已修复,感谢反馈

注册 mark 一下

在 7 楼 可以的。如果只是部署时单纯想修改伪装站点,可以在部署脚本最后加上参数 - f 或 –fake-host:mkdir -p ./naive && cd ./naive && curl -sSL -f -o ./install.sh https://raw.githubusercontent.com/RayWangQvQ/naiveproxy-docker/main/install.sh && chmod +x ./install.sh && ./install.sh -f you.want.com 复制代码 因为参数有点多,我就没把伪装站放到互动式里让用户输入,但是可以通过参数直接指定。如果是已经部署好了,或者是想修改其他配置(比如多用户、账号、密码等),可以去修改宿主机下的./data/Caddyfile 配置文件,改好后 docker exec -it naiveproxy /app/caddy reload –config /data/Caddyfile 复制代码 就可以了,详请已更新到一楼说明。

qqcool8 技术贴 火钳刘明

在 7 楼 技术贴绑定

tycu 谢谢大佬,先留个名,看以后能用不

lspro 2023/01/07 04:06:44.692 INFO    tls.obtain      releasing lock  {“identifier”: “eso.japaneast.cloudapp.azure.com”} 每次到这步没反应

Squidward 这就已经成功了老哥,直接 Ctrl+ C 退出就行,客户端可以连了。你往上面一行看,是不是有“certificate obtained successfully”,就说明证书颁发成功了。之所以停在这,是因为 docker logs -f naiveproxy,会以追踪模式查看 log,所以不会自己退出去。

qqcool8 非常感谢,很好用!

在 7 楼 马一下,大佬厉害

注册 绑定

注册 多谢大佬

格孑孑 支持一下

Erik 666

b66667777 这个岂不是会占用 80 和 443?

joshuabu 环境:ovh  ubuntu22.04 已知:[email protected]:~/naive# docker -v && docker-compose -v Docker version 20.10.22, build 3a2c30b docker-compose version 1.29.2, build 5becea4c 问题:docker: ‘compose’ is not a docker command. See ‘docker –help’

cici9911 手动启动 docker,申请成功证书,但是节点无法连接 工具:小火箭 协议:https 和 http2 都试了 docker 日志:[email protected]:~/naive# docker-compose logs -f Attaching to naiveproxy naiveproxy | 2023/01/07 07:20:51.301    INFO    using provided configuration    {“config_file”: “/data/Caddyfile”, “config_adapter”: “”} naiveproxy | 2023/01/07 07:20:51.305    WARN    Caddyfile input is not formatted; run the ‘caddy fmt’ command to fix inconsistencies    {“adapter”: “caddyfile”, “file”: “/data/Caddyfile”, “line”: 4} naiveproxy | 2023/01/07 07:20:51.311    INFO    admin   admin endpoint started  {“address”: “localhost:2019”, “enforce_origin”: false, “origins”: [“//localhost:2019”, “//[::1]:2019”, “//127.0.0.1:2019”]} naiveproxy | 2023/01/07 07:20:51.317    INFO    http    server is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS {“server_name”: “srv1”, “https_port”: 443} naiveproxy | 2023/01/07 07:20:51.318    INFO    http    enabling automatic HTTP->HTTPS redirects        {“server_name”: “srv1”} naiveproxy | 2023/01/07 07:20:51.326    INFO    http.log        server running  {“name”: “srv0”, “protocols”: [“h1”, “h2”, “h3”]} naiveproxy | 2023/01/07 07:20:51.333    INFO    http    enabling HTTP/3 listener        {“addr”: “:443”} naiveproxy | 2023/01/07 07:20:51.334    INFO    failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 2048 kiB, got: 416 kiB). See https://github.com/lucas-clemente/quic-go/wiki/UDP-Receive-Buffer-Size for details. naiveproxy | 2023/01/07 07:20:51.335    INFO    http.log        server running  {“name”: “srv1”, “protocols”: [“h1”, “h2”, “h3”]} naiveproxy | 2023/01/07 07:20:51.341    INFO    http.log        server running  {“name”: “remaining_auto_https_redirects”, “protocols”: [“h1”, “h2”, “h3”]} naiveproxy | 2023/01/07 07:20:51.341    INFO    http    enabling automatic TLS certificate management   {“domains”: [“ovh.cclcdq.ga”]} naiveproxy | 2023/01/07 07:20:51.343    INFO    autosaved config (load with –resume flag)      {“file”: “/root/.config/caddy/autosave.json”} naiveproxy | 2023/01/07 07:20:51.348    INFO    serving initial configuration naiveproxy | 2023/01/07 07:20:51.344    INFO    tls.obtain      acquiring lock  {“identifier”: “ovh.cclcdq.ga”} naiveproxy | 2023/01/07 07:20:51.332    INFO    tls     cleaning storage unit   {“description”: “FileStorage:/root/.local/share/caddy”} naiveproxy | 2023/01/07 07:20:51.350    INFO    tls     finished cleaning storage units naiveproxy | 2023/01/07 07:20:51.324    INFO    tls.cache.maintenance   started background certificate maintenance      {“cache”: “0xc00026d3b0”} naiveproxy | Successfully started Caddy (pid=11) – Caddy is running in the background naiveproxy | tail: 2023/01/07 07:20:51.357      INFO    tls.obtain      lock acquired   {“identifier”: “ovh.cclcdq.ga”} naiveproxy | 2023/01/07 07:20:51.358    INFO    tls.obtain      obtaining certificate   {“identifier”: “ovh.cclcdq.ga”} naiveproxy | cannot open ‘tail’ for reading: No such file or directory naiveproxy | ==> /dev/null <== naiveproxy | 2023/01/07 07:20:51.584    INFO    http    waiting on internal rate limiter        {“identifiers”: [“ovh.cclcdq.ga”], “ca”: “https://acme-v02.api.letsencrypt.org/directory”, “account”: “[email protected]”} naiveproxy | 2023/01/07 07:20:51.585    INFO    http    done waiting on internal rate limiter   {“identifiers”: [“ovh.cclcdq.ga”], “ca”: “https://acme-v02.api.letsencrypt.org/directory”, “account”: “[email protected]”} naiveproxy | 2023/01/07 07:20:51.689    INFO    http.acme_client        trying to solve challenge       {“identifier”: “ovh.cclcdq.ga”, “challenge_type”: “http-01”, “ca”: “https://acme-v02.api.letsencrypt.org/directory”} naiveproxy | 2023/01/07 07:20:51.921    INFO    http    served key authentication       {“identifier”: “ovh.cclcdq.ga”, “challenge”: “http-01”, “remote”: “54.218.60.222:56178”, “distributed”: false} naiveproxy | 2023/01/07 07:20:51.938    INFO    http    served key authentication       {“identifier”: “ovh.cclcdq.ga”, “challenge”: “http-01”, “remote”: “23.178.112.103:27854”, “distributed”: false} naiveproxy | 2023/01/07 07:20:51.982    INFO    http    served key authentication       {“identifier”: “ovh.cclcdq.ga”, “challenge”: “http-01”, “remote”: “18.217.58.150:38158”, “distributed”: false} naiveproxy | 2023/01/07 07:20:52.329    INFO    http.acme_client        authorization finalized {“identifier”: “ovh.cclcdq.ga”, “authz_status”: “valid”} naiveproxy | 2023/01/07 07:20:52.330    INFO    http.acme_client        validations succeeded; finalizing order {“order”: “https://acme-v02.api.letsencrypt.org/acme/order/905462177/157371397887”} naiveproxy | 2023/01/07 07:20:53.119    INFO    http.acme_client        successfully downloaded available certificate chains    {“count”: 2, “first_url”: “https://acme-v02.api.letsencrypt.org/acme/cert/039da2610aa7ca288bb7a7e24fb4e11e9f87”} naiveproxy | 2023/01/07 07:20:53.121    INFO    tls.obtain      certificate obtained successfully       {“identifier”: “ovh.cclcdq.ga”} naiveproxy | 2023/01/07 07:20:53.122    INFO    tls.obtain      releasing lock  {“identifier”: “ovh.cclcdq.ga”}

在 7 楼 先收藏一波顺便点个星星

hanjibin 感谢分享收藏了

在 7 楼 伪装站点正常,配置域名用户名密码正确,修复好了我重装看看

注册 mac 上测试 了也连不上服务器,默认是 443 端口吗

注册 你的日志挺正常地,建议从客户端找找问题,不像服务端问题。另外,1. 客户端连接 proxy 的时候,docker logs -f naiveproxy 会有新日志产生的,你可以看下连接时有没有新日志产生 2. 客户端也有自己的日志的,看下客户端日志说什么

hanjibin 不错,挺好的,自动申请证书的话没问题。但是已经有网站在运行占用 443 端口的话,Caddyfile 里 tls 设置成网站那边复制过来的证书不起效果,还是会去重复申请证书然后失败

在 7 楼 马克,感谢分享

在 7 楼 服务端没有连接日志产生,客户端直接显示无法连接服务器

naohjohn 先马克一下

在 7 楼 已手撸, 就是个加了 naive 插件的 caddy,, 安装 go 环境编译出来, 编辑个配置文件就运行了.

qrk 感谢大佬分享

hanjibin 技术贴,感谢分享,收藏备用!

haoxiujie 是的,naiveproxy 其实就是使用 naive 插件编译出的 Caddy,为 Caddy 添加了 forward_proxy 功能。但有个注意点就是,go 其实只在编译阶段有用,运行 Caddy 时跟它就没关系了。所以我打镜像逻辑是先依托于 go 的官方镜像,安装 xcaddy,然后用 xcaddy 编译出带 naive 插件的 caddy,最后把这个 caddy 文件拷贝到 debian 的官方镜像上,发布最后的 debian 镜像。如果不这样,也就是安装 go 和最后运行 caddy 都放一起的话,也不做清理,要占用 1G 左右的资源,docker 镜像只需要 65M(基于 debian,如果基于 alphine 还能更小)。这也是为啥不推荐在宿主机直接手撸的原因(除非宿主机本来就有使用 go 环境的需求)。

注册 太奇怪了,重装了还是不行,连不上 tail: cannot open ‘tail’ for reading: No such file or directory

注册 收藏了。~

hanjibin Formate the Caddyfile Start server 2023/01/09 07:29:25.635        INFO        using provided configuration        {“config_file”: “/data/Caddyfile”, “config_adapter”: “”} Error: adapting config using caddyfile: parsing caddyfile tokens for ‘route’: /data/Caddyfile:14 – Error during parsing: parsing caddyfile tokens for ‘forward_proxy’: /data/Caddyfile:5 – Error during parsing: Wrong argument count or unexpected line ending after ‘jjpssl’ Error: caddy process exited with error: exit status 1 什么问题。

在 7 楼 马克,备用

mianfeizhujiwu2 Caddyfile 异常,在 jjpssl 附近,可以检查下是不是输入了什么异常字符

HKCPC 可以使用了,但是 使用 v2RayN   连接 大概 1 分钟不到就会掉线,断了重新连接又可以了。但是 1 分钟又会断。2023/01/09 22:23:53 [Warning] core: Xray 1.7.0 started 2023/01/09 22:28:13 [Warning] [2244166683] app/proxyman/outbound: failed to process outbound traffic > proxy/socks: failed to establish connection to server > read tcp 127.0.0.1:1867->127.0.0.1:1080: i/o timeout 2023/01/09 22:28:15 [Warning] [221933857] app/proxyman/outbound: failed to process outbound traffic > proxy/socks: failed to establish connection to server > read tcp 127.0.0.1:1869->127.0.0.1:1080: i/o timeout 2023/01/09 22:28:20 [Warning] [831127675] app/proxyman/outbound: failed to process outbound traffic > proxy/socks: failed to establish connection to server > read tcp 127.0.0.1:1872->127.0.0.1:1080: i/o timeout 2023/01/09 22:28:23 [Warning] [3006064210] app/proxyman/outbound: failed to process outbound traffic > proxy/socks: failed to establish connection to server > read tcp 127.0.0.1:1874->127.0.0.1:1080: i/o timeout 2023/01/09 22:28:42 [Warning] [1522382230] app/proxyman/outbound: failed to process outbound traffic > proxy/socks: failed to establish connection to server > read tcp 127.0.0.1:1878->127.0.0.1:1080: i/o timeout 2023/01/09 22:28:42 [Warning] [1522382230] proxy/http: failed to read response from www.gstatic.com > io: read/write on closed pipe 2023/01/09 22:28:46 [Warning] [4069559797] app/proxyman/outbound: failed to process outbound traffic > proxy/socks: failed to establish connection to server > read tcp 127.0.0.1:1881->127.0.0.1:1080: i/o timeout 2023/01/09 22:28:51 [Warning] [2957544304] app/proxyman/outbound: failed to process outbound traffic > proxy/socks: failed to establish connection to server > read tcp 127.0.0.1:1885->127.0.0.1:1080: i/o timeout 2023/01/09 22:28:52 [Warning] [4118445812] app/proxyman/outbound: failed to process outbound traffic > proxy/socks: failed to establish connection to server > read tcp 127.0.0.1:1887->127.0.0.1:1080: i/o timeout

Minsk 换个 socks 端口试试看,我用 1080 好像容易出问题

在 7 楼 技术贴绑定

HKCPC 换了 1090 10800 一样的问题,都是只能连接一分钟左右

在 7 楼 输入 docker logs -f naiveproxy 出现 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

注册 支持支持

注册 2023/01/13 11:37:16.926 INFO    tls.obtain      certificate obtained successfully       {“identifier”: “ccc.700005.xyz”} 2023/01/13 11:37:16.926 INFO    tls.obtain      releasing lock  {“identifier”: “=005.xyz”} ^Z [2]+  Stopped                 docker logs -f naiveproxy 到这就没反应了 客户端可以 ping 就是不能用

d2k01 留名,好帖

CHH 不支持 udp 吗

在 7 楼 感谢!

noway 嗯,我是用的是官方版的 naiveproxy,不支持 upd 的(作者明确表示不会支持 upd:https://github.com/klzgrad/naiveproxy/issues/425)。当然有些三方的仓库自己扩展了 udp 功能,比如 singbox。这一版我计划就保持最忠于原版、保持最简单,就不扩展 upd 了。如果确实需要,可以考虑使用 sing-box(但它不支持伪装站点功能)。

hacn 不支持伪装站点,意思是特征会明显很多嘛

laoxong 想要多用户管理面板

在 7 楼 这个不会屏蔽 IP 吗.

hacn 伪装站点指的是,你用浏览器直接访问代理地址,显示的是一个伪装用的正常网站,看不出是 proxy,用来对付墙的主动探测的。当前并没有直接证据表明墙会根据这个特征进行疯禁,所以也不能算必要功能,不是强迫症可以不用。

注册 为何我输入 ***.men 的域名,结果日志里是 ***.com 的域名,导致证书申请错误。请教各位大佬

注册 还是能整合到 xui 就好了

jinge 能否加入 UDP 支持,谢谢

joshuabu 大佬 Hysteria 能搞一个吗

打包的香肠 收到,稍后我来出一个基于 sing-box 版的,naive 和 hysteria 共存

在 7 楼 这玩意能套 CF 吗

lenchanlhz curl -sSL https://get.docker.com/ | sh systemctl start docker systemctl enable docker 补上 docker 命令 乌龟壳 ARM 可以用

在 7 楼 感谢反馈,我来更新到文档里

在 7 楼 不知道为啥用在 openwrt 上延时巨高,手机上又正常

Udyf465 navie 与 vless+tls+ws+cf 相比优势在哪呀,大佬

注册 我不是大佬,协议的区别,可以看我另一个帖子

注册 yum install libseccomp-devel

正文完
 0