Debian12安装NaiveProxy

如果你的内存小于1G,编译过程中会因为内存溢出(Out Of Memory:简称OOM)异常中止,会提示如下错误。

2022/11/24 03:08:44 [INFO] exec (timeout=0s): /usr/local/go/bin/go build -o /root/caddy -ldflags -w -s -trimpath
go build github.com/lucas-clemente/quic-go: /usr/local/go/pkg/tool/linux_amd64/compile: signal: terminated
2022/11/24 03:08:49 [INFO] Cleaning up temporary folder: /tmp/buildenv_2022-11-24-0306.4090021060
2022/11/24 03:08:49 [FATAL] exit status 1

解决方法为设置swap分区


开始安装

apt update
apt install socat cron curl

安装go语言环境

到官网下载对应的版本

wget https://go.dev/dl/go1.23.3.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.23.3.linux-amd64.tar.gz
export PATH="/usr/local/go/bin:$PATH"
go env -w GO111MODULE=on
rm -f go1.23.3.linux-amd64.tar.gz

安装caddy+naive

cd && go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
~/go/bin/xcaddy build --with github.com/caddyserver/forwardproxy@caddy2=github.com/klzgrad/forwardproxy@naive
rm -rf go

将Caddy作为守护进程运行

官方文档(https://github.com/klzgrad/naiveproxy/wiki/Run-Caddy-as-a-daemon)提到,Caddy作为守护进程运行,systemctl的版本需要>=232。经过我的实际测试,systemd版本为219,可以正常稳定运行。

使Caddy可执行并将caddy二进制文件移动到/usr/bin/

chmod a+x caddy
mv caddy /usr/bin/

创建/etc/caddy目录

mkdir /etc/caddy

创建用户和组

groupadd --system caddy
useradd --system \
    --gid caddy \
    --create-home \
    --home-dir /var/lib/caddy \
    --shell /usr/sbin/nologin \
    --comment "Caddy web server" \
    caddy

/etc/systemd/system/目录创建caddy.service

nano /etc/systemd/system/caddy.service

输入以下内容

[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target
[Service]
User=caddy
Group=caddy
ExecStart=
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE
[Install]
WantedBy=multi-user.target

配置caddy

nano /etc/caddy/Caddyfile

输入以下内容:

{
#  order forward_proxy before reverse_proxy
#  上面是http3设置
  order forward_proxy before file_server
}

:443, aaa.kkiikk.top {
#你的域名
        tls example@example.com #你的邮箱
        route {
                forward_proxy {
                        basic_auth user pass #用户名和密码
                        hide_ip
                        hide_via
                        probe_resistance
                }

                #--------支持多用户--------
                #forward_proxy {
                #        basic_auth user2 pass2 #用户名和密码
                #        hide_ip
                #        hide_via
                #        probe_resistance
                #}

                #--------typecho设置--------
                #root * /html/typecho-1.2.1
                #encode gzip
                #php_fastcgi 127.0.0.1:9000
                #file_server

                #--------跳转--------
                #redir https://example.com
                
                #--------反代--------
                #reverse_proxy 127.0.0.1:8080
                
                #--------反代https--------
                #reverse_proxy https://www.aaa.com {
                #        header_up Host {http.reverse_proxy.upstream.hostport}
                #}
                
                #--------反代非443端口https网站--------
                #reverse_proxy https://192.168.0.1:8888 {
                #        transport http {
                                 #关闭tls校验
                #                tls_insecure_skip_verify
                #        }
                #}
        }
}

https://bbb.kkiikk.top {
#你的域名
        tls example@example.com #你的邮箱
        
                #--------反代--------
                #reverse_proxy 127.0.0.1:8080
                
                #--------反代https--------
                reverse_proxy https://www.bbb.com {
                        header_up Host {http.reverse_proxy.upstream.hostport}
                }
}

#通过IP访问80端口,主要用于申请证书
http:// {
        root * /html
        file_server browse
}

格式化配置文件

caddy fmt --overwrite /etc/caddy/Caddyfile

申请域名证书

curl https://get.acme.sh | sh
ln -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh
acme.sh --set-default-ca --server letsencrypt
#example.domain.com请替换为你的真实域名
#注意:hax.co.id/woiden.id等纯ipv6主机,在下面命令中加上--listen-v6参数
acme.sh --issue -d example.domain.com --keylength ec-256 --standalone --insecure --force
acme.sh --install-cert -d example.domain.com --ecc \
        --key-file       /etc/caddy/example.domain.com.key  \
        --fullchain-file /etc/caddy/example.domain.com.pem

启动Caddy

chown -R caddy:caddy /etc/caddy/
systemctl daemon-reload
systemctl enable caddy
systemctl start caddy
#查看当前状态
systemctl status caddy
#使用更改的配置文件重新加载caddy
systemctl reload caddy

清理

rm -rf ~/.cache
rm -rf /usr/local/go

客户端配置

naive客户端:https://github.com/klzgrad/naiveproxy/releases/latest

1、根据客户端操作系统,下载对应的naive客户端,以64位windows操作系统为例。

在官方网站下载后解压。将naive.exe文件copy到v2rayN安装目录。用记事本创建一个config.json文件,内容如下:

Bash
{
  "listen": "socks://127.0.0.1:1080",
  "proxy": "https://user:password@example.domain.com"
}

根据服务器的设置,对应修改上述配置文件中的userpassword域名端口

2、v2rayN客户端配置,点击菜单上服务器中的添加自定义服务器,如果你的v2rayN没有下述选项,请在官网下载最新版本。

3、导入上一步配置好的config.json文件,Core类型选择naiveproxy,Socks端口1080后点确定按钮。

无标签
评论区
头像