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

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

作者:VLX@Tech | 博客:effmac.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"

常用运维命令速查

命令 功能说明
ml 或 ml 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

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

相关文章

评论