index

自建家宽节点+中转站教程:从0到1搭建家宽节点并部署简易中转站(DMIT+VIRCS)

来源: https://linux.do/t/topic/2086346

线路机(DMIT)

一、登录VPS

1. 连接VPS

  1. 工具推荐FinalShell
  2. 新建连接:输入VPS的IP,端口22,使用公钥方式登录,用户名root,选择DMIT提供的私钥

2. 更新系统

apt update -y && apt upgrade -y && apt install sudo curl -y

二、VPS加固

1. 创建普通用户并授权

# 创建用户
useradd -m -s /bin/bash wahaha

# 设置密码
passwd wahaha

# 复制 root 的 ssh 密钥以允许新用户登录
cp -r /root/.ssh /home/wahaha/
chown -R wahaha:wahaha /home/wahaha/.ssh

# 允许 wahaha 用户免密执行 sudo
echo 'wahaha ALL=(ALL) NOPASSWD: ALL' | tee /etc/sudoers.d/wahaha-nopasswd
chmod 0440 /etc/sudoers.d/wahaha-nopasswd

新开本地终端

ssh wahaha@你的服务器IP
sudo whoami # 输出 root,无需输入密码

2. 修改SSH端口号并配置 UFW 防火墙

# 修改 SSH 端口(此处以 8866 为例)
sudo sed -i 's/^#Port 22/Port 8866/' /etc/ssh/sshd_config
sudo sed -i 's/^Port 22/Port 8866/' /etc/ssh/sshd_config

# 验证配置语法是否正确
sudo sshd -t

# 安装并重置 UFW 防火墙
sudo apt update && sudo apt install -y ufw
sudo ufw reset # 输入 y 确认

# 设置默认进出站规则
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 放行新的 SSH 端口
sudo ufw allow 8866/tcp
# 放行 80 与 443 端口
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# 重启 SSH 服务
sudo systemctl restart ssh

# 启用防火墙
sudo ufw enable # 输入 y 确认

# 检查状态(确保只能看到 8866/tcp 被允许)
sudo ufw status

注意:此时不要关闭当前的终端窗口!新开一个本地终端测试连接:

ssh wahaha@你的服务器IP -p 8866

验证连接成功后,再继续后续步骤

如果连接不成功:

# 按顺序执行
sudo sshd -t
sudo systemctl restart ssh
sudo ss -tlnp | grep ssh

# 如果还是显示:22,继续执行
sudo systemctl status ssh.socket

# 如果看到active,继续
sudo systemctl disable --now ssh.socket
sudo systemctl restart ssh
sudo ss -tlnp | grep ssh

# 再次尝试连接
ssh wahaha@你的服务器IP -p 8866`

3. 禁用 Root 登录

确认新用户和新端口登录成功后,彻底关闭 Root 远程权限:

# 修改 SSH 配置,禁止 root 登录
sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config

# 禁止密码登录
sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config

# 检查配置语法并重启 SSH 服务
sudo sshd -t
sudo systemctl restart ssh

新开终端测试 ssh root@你的服务器IP -p 8866,提示:Permission denied (publickey).


三、网络测试

# 切换到 root 环境
sudo -i
# 运行融合怪脚本
bash <(curl -sL https://run.NodeQuality.com)
9cgN9n42E9bj0ZKULiBUrnIi1HU
9cgN9n42E9bj0ZKULiBUrnIi1HU
t75R2bjiwTOJVVYK2csYaUVVzyw
t75R2bjiwTOJVVYK2csYaUVVzyw

脚本跑完大概10几分钟,可以看到IP质量、网络质量等信息,该说不说大妈的三网优化真的不错

IP质量检测:


四、 安装 3x-ui 面板

# 安装/更新 3x-ui
bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)

一路回车,安装完成后会输出以下信息,保存下来:

Username:    Tgsk3EESA
Password:    FDS9WwCsa
Port:        56545
WebBasePath: 4b54asSDH2asHSad9Rw
Access URL:  https:xxxxxxxxxxxxx:56545/4b54asSDH2asHSad9Rw

输入:x-ui,回车,会看到

miwj6mtnW8FZjUlCAc0ATLv3sUM
miwj6mtnW8FZjUlCAc0ATLv3sUM
vnAk1cYDMCLRqDXeza1uXsxP2nW
vnAk1cYDMCLRqDXeza1uXsxP2nW

开启BBR加速:输入:24,回车,1,回车,不需要知道它是干啥的,反正它能让节点的网速变快

使用 ufw allow 上面的Port/tcp 放行面板的端口


五、配置 3x-ui 面板

  1. 访问Access URL,输入刚才保存的用户名和密码,登录
g2jcskvcJBLTG3X6ZXvLfqIWGgC
g2jcskvcJBLTG3X6ZXvLfqIWGgC
  1. 入站列表:添加入站

c8I2djhIS64Rm8VexkuMSCRSvPf
c8I2djhIS64Rm8VexkuMSCRSvPf
  1. 到这里一个订阅节点就创建完成了
uNOozEXOMl4wEJEmgSqmywis2fn
uNOozEXOMl4wEJEmgSqmywis2fn

点击二维码就会得到订阅链接

vless://4f150654-4fba-44fxxxxxxxx@xxxx.com:43465?type=tcp&encryption=none&security=reality&pbk=XhDS2133rSiqpyNj0GgGjhkjvrTvacE1tuV72jA&fp=chrome&sni=www.samsung.com&sid=47744bxxxxx151&spx=%2F#AI-l7amr6wm
  1. 使用 ufw allow 节点的端口 放行节点的端口
  2. 如有需要,可以点击添加客户端,设置流量、到期日期,就可以开车了

六、Cloudflare添加DNS

  1. 进入Cloudflare,点击域名,DNS-添加记录
  2. 填写名称、VPS的IP地址、关闭代理状态
  3. 保存,等待5分钟解析生效
7ceyRj0CG1uo3GJan7kkojgrtYu
7ceyRj0CG1uo3GJan7kkojgrtYu
  1. 进入命令行,ping 刚设置的名称.域名,有回应,说明解析成功

七、SSL 证书申请与自动续期

  1. 使用 acme.sh 申请证书,并将其安装到 x-ui 指定目录,同时设置证书更新后自动重启面板。
  2. x-ui面板本身自带SSL证书申请,但是不知道什么原因我这台VPS无法生成pem,所以手动生成证书

1. 申请证书

注意:申请前请确保域名已解析到服务器 IP,且 80 端口未被占用。

# 申请 ECC 证书
~/.acme.sh/acme.sh --issue -d 名称.域名 --standalone -k ec-256

2. 安装证书到指定目录

# 创建证书存放目录
mkdir -p /etc/x-ui/ssl

# 安装证书并配置重载命令
~/.acme.sh/acme.sh --install-cert -d 名称.域名 --ecc \
--key-file /etc/x-ui/ssl/privkey.key \
--fullchain-file /etc/x-ui/ssl/fullchain.pem \
--reloadcmd "systemctl restart x-ui"

3. 修改面板默认的证书路径

面板设置-证书,修改公钥文件路径:/etc/x-ui/ssl/fullchain.pem,密钥文件路径:/etc/x-ui/ssl/private.key,保存并重启

ycVH4kFUvApGlaego0phL9PDMuD
ycVH4kFUvApGlaego0phL9PDMuD

4. 测试域名登录

将上面的Access URL: https:xxxxxxxxxxxxx

/4b54asSDH2asHSad9Rw替换为:https
.域名
/4b54asSDH2asHSad9Rw,访问成功


落地机(VIRCS)

一、配置IP白名单

er3vXzjNFcW7nJL55pQ13Z3sjMk
er3vXzjNFcW7nJL55pQ13Z3sjMk

将线路机的IP加入到白名单,保证只有线路机IP才能登录

二、登录VPS

同线路机

三、VPS加固

同线路机

四、网络测试

iSTQXNPQsFiS4YgNoq4WZh3uOw
iSTQXNPQsFiS4YgNoq4WZh3uOw
1wFKHsOI35LEkgU1pssmdyGVJda
1wFKHsOI35LEkgU1pssmdyGVJda

VIRCS家的家宽IP质量毋庸置疑,贵有贵的道理


五、sing-box脚本一键生成订阅

# 切换到 root 用户
sudo -i
# 运行安装脚本
bash <(wget -qO- -o- https://github.com/233boy/sing-box/raw/main/install.sh)

得到以下内容:

使用协议: VLESS-REALITY
-------------- VLESS-REALITY-7599.json -------------
协议 (protocol)         = vless
地址 (address)          = 家宽IP
端口 (port)             = 7599
用户ID (id)             = xxxxxxxxxxxxxx-b5c2-97b1228d1a432
流控 (flow)             = xtls-rprx-vision
传输协议 (network)      = tcp
传输层安全 (TLS)        = reality
SNI (serverName)        = www.paypal.com
指纹 (Fingerprint)      = chrome
公钥 (Public key)       = xxxxxxxxxxxxxxxiVElGhW-b2qsm20UXI

------------- 链接 (URL) -------------
vless://xxxxxxxxxxxxxx-b5c2-97b1228d1a432@家宽IP:7599?encryption=none&security=reality&flow=xtls-rprx-vision&type=tcp&sni=www.paypal.com&pbk=xxxxxxxxxxxxxxxiVElGhW-b2qsm20UXI&fp=chrome#233boy-reality-家宽IP

默认生成的是协议是VLESS-REALITY,但是落地机作为出口节点,主要追求速度和稳定性,不承担入口伪装职责,所以改为Shadowsocks,配置更简单、开销更低、速度更快。

sb

出现sing-box的面板

vvVdhxWHmEZYhJ0apSiGVyiMRgM
vvVdhxWHmEZYhJ0apSiGVyiMRgM

输入2回车,1回车,1回车,8回车,回车,输入密码,回车
这里将得到一个ss链接,保存下来

-------------- Shadowsocks-7599.json -------------
协议 (protocol)         = shadowsocks
地址 (address)          = xx.xx.xx.xx
端口 (port)             = 7599
密码 (password)         = UXxxxxxxxxxxxxxxVtmrfKJ4=
加密方式 (encryption)   = 2022-blake3-aes-256-gcm
------------- 链接 (URL) -------------
ss://MjAxxxxxxxxxxx206VVhUMUVYQU9xV2tPSxxxxxxxY2wyT0h2RHJWdG1yZktKND0=@xx.xx.xx.xx:7599#233boy-ss-xx.xx.xx.xx
# 放行端口 7599
sudo ufw allow 7599/tcp

六、在线路机的3x-ui面板配置中转

  1. Xray设置→出站规则→添加出站→JSON→粘贴落地机的ss链接→添加出站
aXMr1IkdcoreWncGEIfXudnGSmc
aXMr1IkdcoreWncGEIfXudnGSmc
  1. 点击测试按钮
ag453eRhYWrxBG2vDBFHgtYbjf
ag453eRhYWrxBG2vDBFHgtYbjf
  1. 路由规则→添加规则
    • Inbound Tags:选入站节点名称
    • Outbound Tag:选出站节点名称
tczG8FAguEj12RKf8V2huPH0HKv
tczG8FAguEj12RKf8V2huPH0HKv
  1. 保存-重新启动Xray(别忘了)

使用节点

工具推荐Clash Verge(https://github.com/clash-verge-rev/clash-verge-rev/releases/tag/v2.4.7

1. 节点转换

  1. 推荐猫佬的https://linuxdo.icmpmiao.cc/
  2. 将转换后的链接导入到订阅中
  3. 选择对应的节点,进入https://ping0.cc/测试,发现显示的是家宽节点而不是中转节点
pJEIUk6I5trgCFczkdpLwa96Oxi
pJEIUk6I5trgCFczkdpLwa96Oxi

2. 已经有机场了,想把家宽节点加入到机场中(可选)

目的:不想把自建节点作为一个独立的订阅,可以通过全局扩展脚本,将自建节点加入到现有机场的节点组中,这样就可以灵活切换机场/自建节点

gXLXeeiyL8khxD77MtwMzi9Ntde
gXLXeeiyL8khxD77MtwMzi9Ntde

将线路机的vless链接中的信息补充到下面的脚本中,直接把这个模板和你的链接扔给AI,输出一个完整的

function main(config) {
  const homeNodeName = '🏠 美国家宽' // 节点名称
  const targetGroupName = '🤖 Claude' // 机场订阅组

  const homeNode = {
    name: '🏠 美国家宽', // 节点名称
    type: 'vless', // 协议名称
    server: 'xxxx.com', // 节点域名
    port: 43465, // 节点端口
    uuid: 'xxxxxxxxxxa-44f6-xxx-9d53607192eb', // uuid
    network: 'tcp',
    tls: true,
    udp: true,
    servername: 'www.samsung.com',
    'client-fingerprint': 'chrome',
    'reality-opts': {
      'public-key': 'XhDSg9ggcxxxxxxxCfvrTvacE1tuV72jA',
      'short-id': '4712312151'
    }
  }

  config.proxies = config.proxies || []
  config['proxy-groups'] = config['proxy-groups'] || []

  config.proxies = config.proxies.filter((p) => p.name !== homeNodeName)
  config.proxies.unshift(homeNode)

  const group = config['proxy-groups'].find((g) => g.name === targetGroupName)
  if (group) {
    group.proxies = group.proxies || []
    group.proxies = group.proxies.filter((p) => p !== homeNodeName)
    group.proxies.unshift(homeNodeName)
  }

  return config
}

可以看到在机场订阅组中会出现我们添加的家宽节点,点击测试,出现延迟就代表这个家宽节点可以使用了

x87B9eKI6Hm3DRp1YP5T5QoghSy
x87B9eKI6Hm3DRp1YP5T5QoghSy

PS:可以将风控较高的网站单独做一个策略组,将家宽节点配置到这个策略组中,这样就可以实现访问其他网站走机场节点,访问高风控网站走家宽节点,就像我配置的:所有Claude相关的都走家宽节点


安装CPA

线路机部署Nginx,落地机部署CPA,线路机作为入口,反向代理到落地机

一、落地机

1. 安装docker

  1. 卸载系统原有冲突 Docker 相关包
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-doc podman-docker containerd runc | cut -f1)
  1. 官方一键脚本安装 Docker
curl -fsSL https://get.docker.com | sh
  1. 把当前用户加入 docker 用户组
sudo usermod -aG docker $USER
  1. 立即生效不用重启服务器
newgrp docker
  1. 安装测试
docker run hello-world

2. 部署CPA

  1. 创建config.yaml和生成高强度随机key
mkdir -p ~/cpa && cd ~/cpa
cat <<EOF > config.yaml
# CPA 配置
host: "0.0.0.1"
port: 8317
auth-dir: "~/.cli-proxy-api"
request-retry: 3
quota-exceeded:
  switch-project: true
  switch-preview-model: true
# 自动生成高强度随机密钥
api-keys:
  - "sk-cpa-$(tr -dc 'a-z0-9' </dev/urandom | head -c 32)"
remote-management:
  allow-remote: true
  # 后台管理密钥
  secret-key: "mgt-cpa-$(tr -dc 'a-z0-9' </dev/urandom | head -c 32)"
  disable-control-panel: false
logging-to-file: true
usage-statistics-enabled: true
logs-max-total-size-mb: 100
EOF

echo "*** --config.yaml-- *** 已生成"
echo "*** --仅显示一次,请记录你的明文密钥-- ***"
grep -E '(sk-cpa-|mgt-cpa-)' config.yaml

将密钥记录下来,将密钥记录下来,将密钥记录下来

  1. 创建 docker-compose.yml
cat <<'EOF' > docker-compose.yml
services:
  cli-proxy-api:
    image: eceasy/cli-proxy-api:latest
    pull_policy: always
    container_name: cli-proxy-api
    network_mode: host
    volumes:
      - ./config.yaml:/CLIProxyAPI/config.yaml
      - ./auths:/root/.cli-proxy-api
      - ./logs:/CLIProxyAPI/logs
    restart: unless-stopped
EOF
  1. 启动
docker compose up -d
  1. 登录线路机,测试
curl http://落地机IP:8317

成功输出:{"endpoints":["POST /v1/chat/completions","POST /v1/completions","GET /v1/models"],"message":"CLI Proxy API Server"}

二、线路机

1. 安装Nginx

sudo apt update
sudo apt install -y nginx

2. 确保防火墙放行 80/443 端口

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
sudo ufw status

3. 写入 Nginx 配置

sudo tee /etc/nginx/sites-available/cpa >/dev/null <<'EOF'
server {
    listen 80;
    server_name 你的域名;

    location / {
        proxy_pass http://落地机IP:8317;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_buffering off;
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
    }
}
EOF

4. 写入 Nginx 配置

sudo ln -sf /etc/nginx/sites-available/cpa /etc/nginx/sites-enabled/cpa

5. 重启 Nginx

sudo nginx -t
sudo systemctl reload nginx

6. 访问测试

http://你的域名/management.html

7. 加HTTPS

sudo apt install -y certbot python3-certbot-nginx # 1.输入你的邮箱用于接收证书到期通知 2.y 3.n
sudo certbot --nginx -d 你的域名

打开nginx的配置文件/etc/nginx/sites-available/cpa,会发现配置自动修改成了如下格式:

server {
    listen 443 ssl;
    server_name 你的域名;

    ssl_certificate /etc/letsencrypt/live/你的域名/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem;

    location / {
        proxy_pass http://落地机IP:8317;
        ...
    }
}

server {
    listen 80;
    server_name 你的域名;

    return 301 https://$host$request_uri;
}

访问:https://你的域名/management.html,成功进入管理登录页

8. 登录CPA

1nvMDZ9HicH1rNW2qxHkkz4wBW
1nvMDZ9HicH1rNW2qxHkkz4wBW

输入部署CPA时生成的mgt-cpa-密钥,登录

2SGkYauyhA7ugzBpvHManXryJec
2SGkYauyhA7ugzBpvHManXryJec

到这里,整个过程就结束了,最终获得了一个家宽节点订阅和CPA,后续如有需要,可以再加一个new-api来管理额度,我这里就不再做演示了