侧边栏壁纸
博主头像
Tech • VPS • Network vlx@tech

行动起来,活在当下

  • 累计撰写 29 篇文章
  • 累计创建 4 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

告别风控!为 VPS 接入 100+ 全球住宅 IP,全链路纯净出站指南

vlongx
2026-05-30 / 0 评论 / 0 点赞 / 94 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

作者:VLX@Tech | 博客vlongx.com | 频道:YouTube · VLX@Tech
项目地址baoweise-bot/aimili-vpngate
适用系统:Ubuntu 20.04 / 22.04 / 24.04(强烈推荐,脚本默认仅支持 Ubuntu)
SSH工具Finalshell
IP检测工具ipinfo
IP欺诈值测试scamalytics
IP综合信息 & 欺诈检测ip.net.coffee

目录

架构原理解析

单机拓扑图

┌─────────────────────────────────────────────────────────────────┐
│                        客户端(Client)                           │
│            Xray / Clash / V2RayN / Surge 等任意客户端             │
└───────────────────────────────┬─────────────────────────────────┘
                                │  VLESS / VMess / Trojan(加密传输)
                                ▼
┌─────────────────────────────────────────────────────────────────┐
│                       单台 VPS 服务器                             │
│                                                                 │
│   ┌──────────────────────────────────────────────────────────┐  │
│   │                     3x-ui 面板                            │  │
│   │              (Xray-core 驱动,流量调度层)                │  │
│   │                                                          │  │
│   │    Inbound(入站)──► Routing(路由)──► Outbound(出站)  │  │
│   └──────────────────────────────┬───────────────────────────┘  │
│                                  │  127.0.0.1:7928              │
│                                  │  HTTP / SOCKS5(本机回环)    │
│                                  ▼                              │
│   ┌──────────────────────────────────────────────────────────┐  │
│   │              aimili-vpngate(本地监听 Port 7928)          │  │
│   │                                                          │  │
│   │   自动抓取 VPNGate 节点 ──► 多线程测速过滤 ──► 节点池     │  │
│   │                    ↓ 连接最优节点                         │  │
│   │              OpenVPN 隧道(tun0 虚拟网卡)                │  │
│   │         策略路由表 100(代理流量走 tun0)                  │  │
│   │         SSH / 面板管理流量 仍走 eth0(防失联)             │  │
│   │         SO_BINDTODEVICE 零泄漏防护                        │  │
│   └──────────────────────────────────────────────────────────┘  │
│                                  │  OpenVPN 加密隧道             │
└──────────────────────────────────┼──────────────────────────────┘
                                   │
                                   ▼
                      VPNGate 公开落地节点
                  (日本 / 美国 / 欧洲等,动态切换)
                                   │
                                   ▼
                          目标网站 / 服务

各层职责说明

① 客户端层:用户设备运行 Xray / Clash 等代理客户端,通过 VLESS+XTLS、VMess+WS+TLS 等加密协议连接本机 3x-ui 的入站端口。客户端层完全感知不到后端 VPNGate 链路的存在。

② 3x-ui 流量调度层:Xray-core 在本机承担协议解密与流量调度职责,分三个环节:

  • Inbound(入站):监听公网加密连接,完成协议解密,获得裸流量;
  • Routing(路由):根据规则将解密后的流量精确匹配到指定出站;
  • Outbound(出站):将流量通过 127.0.0.1:7928(本机回环)转发给 aimili-vpngate 的代理网关。

在此层,3x-ui 是纯粹的协议中继与流量调度器,本身不决定最终出口 IP。

③ aimili-vpngate 出口层:决定最终出站 IP 的核心。它在本机 7928 端口提供一个 HTTP/SOCKS5 双协议代理网关,流量进来后:

  1. 自动从 VPNGate.net 公开 API 拉取全球 OpenVPN 候选节点;
  2. 多线程并发测试延迟与可用性,动态维护优质节点池;
  3. 通过 OpenVPN 建立 tun0 虚拟隧道,采用**策略路由(Policy Routing,路由表 100)**将代理 Socket 的出站流量强制绑定到 tun0,而 SSH 管理流量继续走物理网卡 eth0,彻底杜绝操作 VPS 期间的失联风险;
  4. 通过 SO_BINDTODEVICE 实现零泄漏防护:VPN 隧道一旦断开,代理请求立即返回 502 Bad Gateway,而非悄无声息地回落到 VPS 真实 IP。

单机部署的核心要点

两个服务部署在同一台机器上,3x-ui 出站的目标地址固定为本机回环地址 127.0.0.1,端口 7928。流量不经过公网,在内核网络栈内部完成交接,延迟极低,也不存在外部暴露风险。

环境准备

服务器要求

项目 要求
操作系统 Ubuntu 20.04 / 22.04 / 24.04(强烈推荐,脚本默认仅支持 Ubuntu)
架构 KVM / XEN(需支持 TUN 设备);OpenVZ 架构不适用
最低配置 1 核 512MB RAM,带宽不限
需放行端口 3x-ui 面板端口(默认 2053)、客户端入站端口(如 443

⚠️ 关键检查:OpenVPN 需要内核支持 TUN 设备。OpenVZ 架构的 VPS 通常不支持,部署前务必确认。

系统初始化检查

# 确认系统版本(务必为 Ubuntu)
lsb_release -a

# 检查 tun 设备是否存在(输出 /dev/net/tun 即正常)
ls /dev/net/tun

# 预装必要依赖(全新极简系统必做,防止安装脚本下载失败)
sudo apt-get update && sudo apt-get install -y curl ca-certificates

# 按需放行防火墙端口
ufw allow 2053/tcp    # 3x-ui 面板(后续可改端口)
ufw allow 443/tcp     # 客户端入站示例端口
ufw reload

# 确认 7928 端口仅本机监听,无需对外放行
# aimili-vpngate 默认绑定 127.0.0.1:7928,不暴露到公网

💡 注意:aimili-vpngate 的 7928 端口绑定在 127.0.0.1(本机回环),无需在防火墙放行,也不存在被外部扫描的风险。

部署 aimili-vpngate

一键安装

以 root 或 sudo 权限执行以下命令:

bash <(curl -Ls https://raw.githubusercontent.com/baoweise-bot/aimili-vpngate/main/install.sh)

脚本将自动完成所有安装步骤:Python 3 运行环境、OpenVPN 依赖、策略路由规则注入、Systemd 服务注册、ml 快捷管理命令安装。整个过程约 2-5 分钟,取决于网络速度。

Debian 系统兼容运行方案

若你的服务器运行 Debian,脚本内置的系统检测会阻止安装。可用以下方式绕过:

# 下载安装脚本到本地
curl -Ls https://raw.githubusercontent.com/baoweise-bot/aimili-vpngate/main/install.sh -o install.sh

# 用 sed 将系统类型检测替换为 ubuntu
sed -i 's/"${ID:-}"/"ubuntu"/g' install.sh

# 执行安装
sudo bash install.sh

验证服务状态

安装完成后,执行以下命令确认服务正常运行:

# 查看完整状态(代理端口、活跃节点、Web UI 地址)
ml status

正常运行时,输出示例如下:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 AimiliVPN Gateway — Running ✅
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 Proxy Port   : 7928  (HTTP/SOCKS5)
 Web UI       : http://127.0.0.1:8787/EJsW2EeBo9lY/
 Active Node  : jp-osaka-01 (12ms)
 Exit IP      : 202.xx.xx.xx (Residential · JP)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

关注两个核心指标:Proxy Port: 7928 确认监听正常;Exit IP 显示的是 VPNGate 节点 IP 而非本机真实 IP,说明 OpenVPN 隧道已建立。

本地验证代理出口

在服务器本地执行测试,确认 aimili-vpngate 代理网关工作正常:

# 通过 SOCKS5 协议测试出口 IP
curl -x socks5h://127.0.0.1:7928 https://ipinfo.io

# 通过 HTTP 协议测试出口 IP
curl -x http://127.0.0.1:7928 https://ipinfo.io

返回的 IP 和地区应为 VPNGate 落地节点,而非本机真实 IP,即代理网关工作正常。

查看实时日志

# 观察 VPNGate 节点抓取过程与 OpenVPN 连接状态
ml logs

日志中可以看到节点探活、延迟测试、OpenVPN 握手等关键信息,有助于判断当前节点池质量。

安装并配置 3x-ui

一键安装 3x-ui

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

安装完成后,面板默认监听 2053 端口,初始账号密码均为 admin

登录与安全加固

  1. 浏览器访问 http://服务器公网IP:2053,使用默认账号登录;
  2. 立即进入面板设置,修改以下内容:
    • 管理员用户名与密码(默认 admin/admin 必须更改);
    • 面板监听端口(改为非标准端口);
    • 访问 Secret Path(开启后 URL 加随机路径,防扫描);
  3. 建议上传域名 SSL 证书,或使用面板内置 Let’s Encrypt 功能申请,开启 HTTPS 访问。

3x-ui 核心配置实操

单机方案中,3x-ui 需完成三步核心配置:出站(指向本机 aimili-vpngate)、入站(接收客户端连接)、路由(将两者精确关联)。建议按此顺序操作。

Step 1:创建出站(Outbound)— 指向本机 aimili-vpngate

进入面板 Xray 配置 → 出站(Outbounds),点击「添加」,切换到 JSON 模式,填写以下配置:

SOCKS5 协议(推荐):

{
  "tag": "aimili-socks5-out",
  "protocol": "socks",
  "settings": {
    "servers": [
      {
        "address": "127.0.0.1",
        "port": 7928,
        "users": []
      }
    ]
  },
  "streamSettings": {
    "network": "tcp"
  },
  "mux": {
    "enabled": false
  }
}

HTTP 协议(备选):

{
  "tag": "aimili-http-out",
  "protocol": "http",
  "settings": {
    "servers": [
      {
        "address": "127.0.0.1",
        "port": 7928,
        "users": []
      }
    ]
  }
}

字段说明

  • address:固定填写 127.0.0.1(本机回环,流量不经过公网);
  • port:固定填写 7928(aimili-vpngate 默认监听端口);
  • tag:该出站的唯一标识符,路由规则通过此 tag 引用,不可与其他出站重名
  • mux.enabled:SOCKS5 出站设为 false,避免多路复用带来兼容性问题。

Step 2:创建入站(Inbound)— 接收客户端连接

进入入站列表 → 添加入站,以 VLESS + TCP + XTLS-Reality 为例(推荐方案,抗检测性强,适合需要隐蔽性的场景):

字段 填写内容
备注 relay-reality-in(自定义,便于识别)
协议 VLESS
监听地址 0.0.0.0
监听端口 443(或自定义非标准端口)
传输方式 TCP
安全性 Reality
Dest(SNI) www.microsoft.com:443(或其他真实可达的 HTTPS 域名)
Public Key 点击「获取」自动生成公私钥对
Flow xtls-rprx-vision

入站创建成功后,面板会为其自动分配一个 tag,格式为 inbound-{端口号},例如端口填 443 则 tag 为 inbound-443记录此值,下一步路由配置需精确引用。


Step 3:配置路由(Routing)— 将入站流量导向 aimili 出站

路由层是整套架构的核心调度器,决定哪个入站的流量通过哪个出站发出。

进入面板 Xray 配置 → 路由(Routing),添加规则(JSON 模式):

{
  "rules": [
    {
      "type": "field",
      "inboundTag": ["inbound-443"],
      "outboundTag": "aimili-socks5-out"
    }
  ]
}

路由逻辑:来自 inbound-443 的所有流量,被强制路由到 aimili-socks5-out 出站。链路完整闭环:客户端 → 本机 3x-ui 入站 → 路由匹配 → 本机出站 → 127.0.0.1:7928 → aimili-vpngate → OpenVPN 隧道 → VPNGate 落地节点 → 目标网站。

Step 4:完整 Xray 配置 JSON 参考

以下为完整的 Xray-core 配置结构,可在面板「JSON 配置」页面直接导入。注意替换所有带注释的占位字段

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "inbound-443",
      "listen": "0.0.0.0",
      "port": 443,
      "protocol": "vless",
      "settings": {
        "clients": [
          {
            "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
            "flow": "xtls-rprx-vision"
          }
        ],
        "decryption": "none"
      },
      "streamSettings": {
        "network": "tcp",
        "security": "reality",
        "realitySettings": {
          "show": false,
          "dest": "www.microsoft.com:443",
          "xver": 0,
          "serverNames": [
            "www.microsoft.com"
          ],
          "privateKey": "在面板中点击获取自动生成",
          "shortIds": [
            "在面板中点击获取自动生成"
          ]
        }
      },
      "sniffing": {
        "enabled": true,
        "destOverride": ["http", "tls"]
      }
    }
  ],
  "outbounds": [
    {
      "tag": "aimili-socks5-out",
      "protocol": "socks",
      "settings": {
        "servers": [
          {
            "address": "127.0.0.1",
            "port": 7928
          }
        ]
      },
      "streamSettings": {
        "network": "tcp"
      },
      "mux": {
        "enabled": false
      }
    },
    {
      "tag": "direct",
      "protocol": "freedom"
    },
    {
      "tag": "block",
      "protocol": "blackhole"
    }
  ],
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "inboundTag": ["inbound-443"],
        "outboundTag": "aimili-socks5-out"
      }
    ]
  }
}

Step 5:保存并重启 Xray

在面板右上角点击「保存配置」,然后点击「重启 Xray」,配置立即生效。

重启后,在面板「日志」页面确认 Xray 启动无报错。正常启动日志示例:

Xray 2025/xx/xx started

端到端验证

客户端导入节点

从 3x-ui 面板的入站列表中,点击对应入站的「二维码」或「复制链接」图标,将节点信息导入 Xray / Clash / V2RayN 等客户端,开启代理模式。

验证出口 IP 与链路正确性

在你的本地设备上,通过以下方式验证:

# 命令行验证(代理软件设置系统代理后执行)
curl https://ipinfo.io

或在浏览器访问以下地址:

  • https://ipinfo.io — 查看出口 IP 与归属地
  • https://ip.sb — 查看出口 IP
  • https://ipleak.net — 验证 DNS 是否泄漏

预期结果

  • 出口 IP 为 VPNGate 节点 IP,而非你的服务器真实 IP;
  • 归属地为 VPNGate 节点所在国家(日本、美国、欧洲等);
  • ipleak.net 的 DNS 检测项显示与出口 IP 一致,无泄漏。

在服务器本地进行链路连通性核查

# 在服务器本地直接测试 aimili 代理网关的出口 IP
curl -x socks5h://127.0.0.1:7928 https://ipinfo.io

# 确认 3x-ui 出站到 aimili 的本地连接是否正常
curl -v -x socks5h://127.0.0.1:7928 https://ipinfo.io 2>&1 | head -30

排错指南

❌ 问题一:客户端连接成功,但网页无法打开(超时)

现象:3x-ui 面板入站显示有连接,但实际流量无法通过,客户端持续超时。

排查步骤

# 第一步:确认 aimili-vpngate 服务正在运行
ml status

# 第二步:在服务器本地直接测试代理网关连通性
curl -x socks5h://127.0.0.1:7928 https://ipinfo.io --connect-timeout 15

# 第三步:查看实时日志,观察是否有节点连接报错
ml logs

常见原因与解决方案

原因 解决方案
aimili-vpngate 服务停止 ml start 重新启动
VPNGate 节点池耗尽,无可用节点 ml restart 触发重新抓取节点
VPS 所在网络对 UDP 有限制,OpenVPN 无法建立隧道 更换 VPS 或联系服务商确认 UDP 通行情况
3x-ui 出站配置中 address 填写了公网 IP 而非 127.0.0.1 进入 3x-ui 出站配置,将 address 改为 127.0.0.1

❌ 问题二:路由规则未生效,流量走向 direct 直连出站

现象:客户端检测到出口 IP 为服务器真实 IP,而非 VPNGate 节点 IP。

定位方式

在 3x-ui 面板查看 Xray 日志,若看到以下警告:

[Warning] app/router: no matching rule. default route to direct

说明路由规则中的 inboundTag 与实际入站 tag 不匹配,流量 fallback 到了 direct 出站。

解决方案

进入 3x-ui 入站列表,找到目标入站节点,查看其 tag 字段(格式为 inbound-{端口号},如监听 443 端口则 tag 为 inbound-443)。确保路由规则中 inboundTag 数组内的字符串与之完全一致,区分大小写。

❌ 问题三:VPN 断开后出现 IP 泄漏(回落到服务器真实 IP)

现象:使用过程中偶发出口 IP 变为服务器真实 IP,而非预期的 502 报错。

原因分析

aimili-vpngate 正常情况下通过 SO_BINDTODEVICE 将代理 Socket 强制绑定到 tun0 虚拟网卡。VPN 一旦断开,tun0 消失,绑定失败,代理请求应当立即返回 502 Bad Gateway。若出现泄漏,通常是系统策略路由表(路由表 100)被意外修改或清空。

解决方案

# 查看当前策略路由状态
ip rule list
ip route show table 100

# 若路由表 100 为空或规则缺失,重启服务重建路由规则
ml stop && ml start

# 验证防护机制恢复后的状态
ml logs | grep -E "502|tun0|OpenVPN|CONNECTED"

常用运维命令速查

命令 功能说明
mlml status 查看运行状态、代理端口、当前活跃节点、Web UI 访问地址
ml start 启动 AimiliVPN 服务
ml stop 停止服务(自动清理策略路由规则与 OpenVPN 进程)
ml restart 重启服务(节点切换或更新配置后建议执行)
ml logs 查看实时 Systemd 运行日志
ml web 切换 Web UI 绑定地址(127.0.0.1 仅本地 / 0.0.0.0 允许公网访问)
ml port 修改 Web 管理控制台监听端口
ml password 重新生成 12 位随机安全管理密码
ml uninstall 完全卸载服务并清理所有相关文件与环境

附录:常见安装报错处理

Apt 包管理器锁冲突

若一键安装时出现 Could not get lock /var/lib/dpkg/lock-frontend 报错:

# 停止自动更新服务,终止相关进程
sudo systemctl stop unattended-upgrades 2>/dev/null
sudo killall apt apt-get dpkg 2>/dev/null

# 清理残留锁文件
sudo rm -f /var/lib/dpkg/lock* /var/lib/apt/lists/lock /var/cache/apt/archives/lock

# 修复受损包状态,重新更新软件源
sudo dpkg --configure -a
sudo apt-get update

# 重新执行一键安装脚本
bash <(curl -Ls https://raw.githubusercontent.com/baoweise-bot/aimili-vpngate/main/install.sh)

相关资源

资源 链接
aimili-vpngate 项目 github.com/baoweise-bot/aimili-vpngate
3x-ui 项目 github.com/mhsanaei/3x-ui
VPNGate 官网 vpngate.net
Telegram 交流群 t.me/arestemple
社区论坛 339936.xyz
配套视频教程 YouTube · VLX@Tech

本文首发于 vlongx.com,转载请注明出处。

0

评论区