本文最后更新于 2025-09-22,文章内容可能已过时,如需更新请留言。部分素材来自网络,若不小心影响到您的利益,请联系我删除。

写在前面

为什么我更推荐大家自建节点,而不是购买机场呢。主要是从安全和稳定性两方面来考虑,可能一些人说自己买的机场很安全,又有零日志政策,但你没法确定对方实际上到底是如何操作的,机场也容易发动中间人攻击,从而窃取你的账户和隐私信息。从稳定性来说,尽管机场有若干节点,但很多节点其实是同一条真实线路分出来的而已,而且机场的流量又大,在特殊时期更容易被检测到;个人搭建的尽管只有一个节点,但是使用量少,反而更加隐蔽。

自建机场的麻烦之处是对技术力要求更高,但我认为这算不上什么缺点,如果连解决这点问题的能力都没有,那我认为你可能更适合国内的网络环境,尽管它相对封闭,但好在有完善的审查制度,你受骗的可能性更小。至于成本问题,机场的价格相对来说便宜一些,但是使用起来也是有诸多限制,比如倍率问题,而自建机场价格及时高一些,也没有高出很多。所以综合来看自建节点的选择更好一些。

很多人可能会说,什么年代了还在用trojan协议,早被gfw能精准识别了,别误人子弟了之类的话。实际上在我自己的使用体验中,并没有被封禁过,包括我也给一些朋友分享过这个访问,即使是最敏感的特殊时期,我也没被封禁过,我知道有个叫trojan-killer的项目,可以很简单的检测到trojan协议,我没有测试过,但是我通过wireshark抓包看到的tcp segment len和他提出的区间并不一致,再加上实际体验确实没有封禁过,所以我决定将这个方案分享给大家。

再简单介绍一下sing-box吧,这个真是我用过最好的服务端了,功能繁多而且性能高效,唯一美中不足的是更新后的配置文件里的字段经常更改,如果你经常更新的话配置文件也得跟着改。不过也还好,学习成本不是很高。

sing-box网站

sing-box下载

准备

  • 一台vps

  • 一个域名,并解析到vps上

vps的购买我推荐大家看看这个「点亮全球VPS」,因为每个人所在的位置不一样,网络环境也不一样,所以我直接推荐的vps可能对于你而言并不适用,再说我也没有vps的广告,所以暂时不给大家推荐,以后有机会了再说。域名的话可以购买,也可以申请免费的域名,不太清楚的可以等我之后的教程,会带领大家走一遍申请和购买的流程。

安装sing-box

我个人更喜欢用debian的发行版,所以教程里相关的命令都是debian的命令。如果你使用其他的发行版,请自行研究相关命令。如果你的服务器内存不到2g,建议你使用debian10或debian11,超过了2g就可以使用debian12或尝鲜debian13。另外我所有的命令都是使用root用户的,尽管这一操作并不十分安全,但考虑这台服务器只用来做代理,倒也无所谓了。如果你的服务器上不只跑一个应用服务,请创建不同的用户并给予sudo权限。

官方脚本一键安装

curl -fsSL https://sing-box.app/install.sh | sh

如果有报错的话,可能是缺少curl或sudo命令之类的,可以通过下面的命令进行安装。

apt install curl sudo -y

安装nginx

请不要省略这一步,nginx的stream模块是这个方案的重中之重。

apt install nginx -y

有时候通过此方法安装的nginx会缺少streaem模块,可以通过以下命令进行安装。保险起见可以直接输入下面的命令安装stream模块。

apt install libnginx-mod-stream -y

修改nginx配置文件

# 进入nginx目录
cd /etc/nginx

# 编辑nginx配置文件
nano nginx.conf

# 在nginx的http块输入以下内容
server {
    listen 80;
    server_name xxx.xxx.com; # 这里填入你的域名
    root /var/www/html;
    index index.html;
}

# 退出编辑
ctrl + o + 回车

# 对nginx的配置文件进行检测
nginx -t

# 重载nginx配置文件
systemctl reload nginx

申请tls证书

# 在root目录下执行该命令
wget -O -  https://get.acme.sh | sh

# 让amce.sh命令生效
. .bashrc

# 开启acme.sh自动升级
acme.sh --upgrade --auto-upgrade

# 申请证书测试,尽可能不要省略这一步
acme.sh --issue --server letsencrypt --test -d xxx.xxx.com -w /var/www/html --keylength ec-256

# 切换申请机构
acme.sh --set-default-ca --server letsencrypt

# 正式申请证书
acme.sh --issue -d xxx.xxx.com -w /var/www/html --keylength ec-256 --force

# 申请好后还无法直接使用,需要安装
# 创建目录
mkdir /etc/sing-box/cert
acme.sh --installcert -d xxx.xxx.com --cert-file /etc/sing-box/cert/cert.crt --key-file /etc/sing-box/cert/cert.key --fullchain-file /etc/sing-box/cert/fullchain.crt --ecc

再次修改nginx配置

# 在/etc/nginx/nginx.conf最后面补充
stream {
        map $ssl_preread_server_name $backend_name {
                xxx.xxx.com trojan;
        }
        upstream trojan {
                server 127.0.0.1:8081;
        }
        server {
                listen 443 reuseport;
                listen [::]:443 reuseport;
                proxy_pass $backend_name;
                ssl_preread on;
        }
}

# 退出编辑器
ctrl + o + 回车

# 检查nginx配置
nginx -t

# 重载nginx配置
systemctl reload nginx

修改sing-box配置

# 编辑sing-box配置
nano /etc/sing-box/config.json

{
  "log": {
    "disabled": false,
    "level": "warn",
    "output": "/etc/sing-box/box.log",
    "timestamp": true
  },
  "dns": {
    "servers": [
      {
        "type": "local"
      }
    ]
  },
  "inbounds": [
    {
      "type": "trojan",
      "tag": "trojan-in",
      "listen": "0.0.0.0",
      "listen_port": 8081,
      "tcp_fast_open": true,
      "users": [
        {
          "name": "admin", # 建议修改,不用在客户端配置
          "password": "PASSWORD" #修改,需要在客户端中保持一致
        }
      ],
      "tls": {
        "enabled": true,
        "server_name": "xxx.xxx.com",# 填入你的域名
	"alpn": [
	  "h2",
	  "http/1.1"
	],
	"min_version": "1.2",
	"max_version": "1.3",
        "certificate_path": "/etc/sing-box/cert/fullchain.crt", # 和证书路径保持一致
        "key_path": "/etc/sing-box/cert/cert.key" # 和迷药路径保持一致
      },
      "fallback": {
        "server": "127.0.0.1", # 这里是伪装的ip,我在服务器上还部署了一个cloureve的网盘
        "server_port": 5212 # 伪装的端口,通过浏览器直接访问域名会访问到我的cloudreve的网盘
      },
      "multiplex": {
        "enabled": true
      }
    }
  ],
  "outbounds": [
    {
      "type": "direct",
      "tag": "direct-out"
    }
  ],
  "route": {
    "rules": [
      {
        "rule_set": ["geoip-cn", "geosite-cn"],
        "action": "reject",
        "method": "drop",
        "no_drop": false
      }
    ],
    "rule_set": [
      {
        "tag": "geoip-cn",
        "type": "remote",
        "format": "binary",
        "url": "https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-cn.srs"
      },
      {
        "tag": "geosite-cn",
        "type": "remote",
        "format": "binary",
        "url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-cn.srs"
      }
    ],
    "final": "direct-out"
  }
}

# 退出编辑
ctrl + o + 回车

# 配置检查
sing-box check

启动sing-box

# 启动sing-box
systemctl start sing-box

# 设置开机自启
systemctl enable sing-box

sing-box的相关命令可以在sing-box网站中查看

可选但建议

部署cloudreve,不过再这里在写个cloudreve的教程篇幅就太长了,所以直接用官方的教程吧,如果碰到什么问题,欢迎给我留言。

cloudreve部署教程

如果服务器内存不够,可以通过谷歌搜索相关的网站

# 谷歌搜索,往后多翻几页,只要域名和cloudreve的官方域名不一样的就行
intitle:cloudreve

# 通过多地ping查看域名的真实ip,如果显示出不只一个ip,说明网站使用了cdn,换一个网站
http://ping.chinaz.com/

# 修改sing-box配置
"fallback": {
        "server": "真实ip",
        "server_port": 真实端口
      },

# 修改配置文件后需要重启sing-box
systemctl restart sing-box

客户端使用

客户端用你习惯的就好,小火箭,nekoray这些都不错。我感觉应该不用教了吧?如果真的有纯新手,欢迎留言,看了肯定会回复的。