Skip to content

ffei2963-ai/ipv6-proxy-pool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 

Repository files navigation

IPv6 多出口代理池 — 部署与使用指南

版本: 1.0.0 | 适用系统: Debian 11/12 / Ubuntu 20.04/22.04/24.04 | 协议栈: IPv4 + IPv6 双栈 VPS


1. 方案概述

1.1 项目定位

本项目是一个完整的 IPv6 多出口代理池解决方案,在单台拥有 IPv4 + IPv6 双栈的 VPS 上实现:

  • 多出口落地 IP:从 VPS 的 IPv6 网段中动态分配数十至数百个出口地址
  • 可视化管理:基于 Python Flask 的 Web 管理后台,实时监控所有出口状态
  • 动态分流:支持随机轮询、加权轮询、最少延迟等多种负载均衡策略
  • 协议调度:集成 Xray-core + 3x-UI,支持 VLESS+Reality、VMess、Trojan 等主流协议

1.2 适用场景

场景 说明
跨境业务代理 利用多 IPv6 出口实现高可用、低封禁率的代理服务
爬虫/数据采集 轮换出口 IP 降低目标站点的反爬风控
多地区模拟 不同出口 IP 可配置到不同目标区域的路由
高并发服务 多出口分担连接负载,突破单 IP 并发限制

1.3 架构概览

┌─────────────────────────────────────────────────────────────────────────────┐
│                              VPS (双栈)                                      │
│  ┌──────────────┐  ┌──────────────┐  ┌────────────────────────────────────┐ │
│  │   IPv4 地址   │  │  IPv6 /64   │  │  IPv6 出口池 (2001:db8::1001-10ff) │ │
│  │  203.0.113.1  │  │ 2001:db8::1 │  │  • 2001:db8::1001 (出口-1)         │ │
│  └──────┬───────┘  └──────┬───────┘  │  • 2001:db8::1002 (出口-2)         │ │
│         │                 │          │  • ...                             │ │
│         │                 │          │  • 2001:db8::10ff (出口-N)         │ │
│         │                 │          └────────────────────────────────────┘ │
│         │                 │                           │                     │
│         │          ┌──────▼──────┐                  │                     │
│         │          │  nftables   │  NAT66 转换       │                     │
│         │          │  NAT 规则   │◄─────────────────┘                     │
│         │          └──────┬──────┘                                        │
│         │                 │                                              │
│  ┌──────▼─────────────────▼──────┐                                       │
│  │        Xray-core              │                                       │
│  │  ┌─────────────────────────┐  │                                       │
│  │  │  Inbound (VLESS+TLS)   │  │  ← 客户端连接入口                      │
│  │  │  Port: 443              │  │                                       │
│  │  └─────────────────────────┘  │                                       │
│  │              │                │                                       │
│  │  ┌───────────▼────────────┐  │                                       │
│  │  │  Routing + Balancer    │  │  ← 动态分流策略                        │
│  │  │  • random              │  │                                       │
│  │  │  • round-robin         │  │                                       │
│  │  │  • least-ping          │  │                                       │
│  │  └───────────┬────────────┘  │                                       │
│  │              │                │                                       │
│  │  ┌───────────▼────────────┐  │                                       │
│  │  │  Multiple Outbounds    │  │  ← 每个出口对应一个 freedom outbound   │
│  │  │  sendThrough: IPv6-x   │  │                                       │
│  │  └────────────────────────┘  │                                       │
│  └───────────────────────────────┘                                       │
│                              │                                             │
│  ┌───────────────────────────▼──────────────────────────────────────────┐  │
│  │              Python Web 管理后台 (Flask + Gunicorn)                   │  │
│  │  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐        │  │
│  │  │ 仪表盘   │ │ IP管理  │ │ 策略切换 │ │ 流量统计 │ │ 日志查看 │        │  │
│  │  └─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘        │  │
│  │  Port: 8080 (可自定义)                                                 │  │
│  └──────────────────────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────────────────────┘

2. 核心特性

2.1 多出口 IPv6 地址池

  • 自动派生:从 VPS 主 IPv6 地址的 /64 前缀自动派生多个子地址
  • 灵活数量:默认生成 10 个,可通过参数自定义 (10-200+)
  • 持久化:通过 systemd service 确保重启后自动恢复
  • 动态增删:通过 Web 界面或 API 实时添加/删除出口地址

2.2 NAT66 流量转换

  • 有状态 NAT66:使用 nftables 将内网 IPv6 流量映射到多个公网出口
  • 持久连接random,persistent 模式确保同一连接始终使用同一出口
  • 双栈兼容:同时处理 IPv4 和 IPv6 流量

2.3 负载均衡策略

策略 说明 适用场景
random 随机选择出口 (默认) 均衡分布,防止单点
round-robin 轮询分配 均匀利用所有出口
least-ping 选择延迟最低的出口 追求最优速度
weighted 按权重分配 不同出口性能差异大

2.4 Web 管理后台

  • 实时仪表盘:IPv6 出口健康状态、活跃连接数、系统负载
  • IP 管理:查看、测试、添加、删除出口地址
  • 策略切换:一键切换负载均衡策略
  • 流量统计:每个出口的上下行流量、连接数
  • 日志查看:Xray 服务日志集成
  • 服务控制:一键重启 Xray 服务

3. 部署指南

3.1 环境要求

项目 要求
操作系统 Debian 11/12 / Ubuntu 20.04/22.04/24.04
架构 x86_64 (amd64) 或 aarch64 (arm64)
网络 必须拥有 /64 或更大的 IPv6 网段 (推荐 /64)
内存 最低 512MB,推荐 1GB+
磁盘 最低 10GB
权限 root 权限

3.2 前置检查

在运行安装脚本前,请确认 VPS 已正确配置 IPv6:

# 检查 IPv6 地址
ip -6 addr show

# 应输出类似以下内容 (需有 scope global 的地址):
# inet6 2001:db8:1234:5678::1/64 scope global

# 测试 IPv6 连通性
ping6 -c 3 2001:4860:4860::8888

如果未配置 IPv6,请联系 VPS 提供商或在控制面板中启用。

3.3 一键安装

# 下载安装脚本
curl -fsSL https://raw.githubusercontent.com/your-repo/ipv6-proxy-pool/main/install.sh -o install.sh
chmod +x install.sh

# 默认安装 (生成 10 个 IPv6 出口)
./install.sh

# 自定义安装 (生成 50 个出口,Web 端口 8443)
./install.sh --ipv6-count 50 --admin-port 8443 --admin-user root --admin-pass YourStrongPass

3.4 安装参数

参数 默认值 说明
--ipv6-count N 10 生成 N 个 IPv6 出口地址
--ipv6-range 自动派生 指定 IPv6 网段 (如 2001:db8::/64)
--admin-port 8080 Web 管理台端口
--admin-user admin Web 管理用户名
--admin-pass 随机生成 Web 管理密码
--install-dir /opt/ipv6-proxy-pool 安装目录

4. 安装后配置

4.1 登录 3x-UI 面板配置入站

安装完成后,访问 3x-UI 面板:

http://你的VPS-IP:54321

默认账号密码在安装时设置(或查看 /usr/local/x-ui/bin/config.json)。

在面板中创建 Inbound(以 VLESS + Reality 为例):

字段
Protocol VLESS
Port 443
UUID 点击 Generate 自动生成
Flow xtls-rprx-vision
Security reality
Dest www.google.com:443
Server Names www.google.com, google.com
Private Key 执行 xray x25519 生成
Short IDs 随机 8 位十六进制

4.2 配置多出口 Outbounds

3x-UI 面板 → Xray Settings → Outbounds 中:

  1. 删除默认的 direct outbound(或保留作为 fallback)
  2. 为每个 IPv6 出口添加一个 freedom outbound:
{
  "protocol": "freedom",
  "settings": {"domainStrategy": "UseIPv6"},
  "sendThrough": "2001:db8::1001",
  "tag": "ipv6-out-2001-db8--1001"
}

批量生成:使用提供的辅助脚本自动生成完整配置:

# 生成完整 Xray 配置
/opt/ipv6-proxy-pool/venv/bin/python /opt/ipv6-proxy-pool/scripts/gen_xray_config.py

# 输出将保存在 /opt/ipv6-proxy-pool/config/xray_full_config.json
# 可将此配置导入 3x-ui 或替换 /usr/local/x-ui/bin/config.json

4.3 配置负载均衡 Routing

Xray Settings → Routing Rules 中添加 Balancer:

{
  "domainStrategy": "IPIfNonMatch",
  "balancers": [
    {
      "tag": "ipv6-pool-lb",
      "selector": [
        "ipv6-out-2001-db8--1001",
        "ipv6-out-2001-db8--1002",
        "..."
      ],
      "strategy": {
        "type": "random"
      }
    }
  ],
  "rules": [
    {
      "type": "field",
      "network": "tcp,udp",
      "balancerTag": "ipv6-pool-lb"
    }
  ]
}

简化方式:直接通过 Web 管理台一键切换策略,后台自动同步到 Xray 配置。


5. Web 管理台使用

5.1 访问管理台

http://你的VPS-IP:8080

使用安装时设置的用户名和密码登录。

5.2 仪表盘功能

仪表盘布局

功能区域 说明
统计卡片 IPv6 出口总数、Xray 状态、活跃连接数、系统负载
IP 状态表 每个出口的健康状态、延迟、流量、连接数
快速操作 添加新 IP、切换负载策略、重启 Xray
自动刷新 每 30 秒自动刷新状态数据

5.3 API 接口

管理台提供 RESTful API,可用于自动化管理:

接口 方法 说明
/api/stats GET 获取所有 IPv6 出口实时状态
/api/ip/add POST 添加新 IPv6 出口地址
/api/ip/remove POST 移除 IPv6 出口地址
/api/ip/test POST 测试单个 IP 连通性
/api/switch_lb_strategy POST 切换负载均衡策略
/api/get_lb_strategy GET 获取当前策略
/api/restart_xray POST 重启 Xray 服务
/api/nftables_status GET 获取 nftables 规则状态

API 调用示例

# 获取实时统计
curl -u admin:密码 http://VPS-IP:8080/api/stats

# 切换负载策略为 round-robin
curl -u admin:密码 -X POST http://VPS-IP:8080/api/switch_lb_strategy \
  -H "Content-Type: application/json" \
  -d '{"strategy": "round-robin"}'

# 添加新出口地址
curl -u admin:密码 -X POST http://VPS-IP:8080/api/ip/add \
  -H "Content-Type: application/json" \
  -d '{"ip": "2001:db8::2001"}'

6. 系统服务管理

6.1 服务列表

服务名 说明 命令
x-ui 3x-UI / Xray 代理核心 systemctl status x-ui
ipv6-proxy-admin Web 管理后台 systemctl status ipv6-proxy-admin
ipv6-proxy-monitor 监控守护进程 systemctl status ipv6-proxy-monitor
ipv6-pool-ips IPv6 地址池持久化 systemctl status ipv6-pool-ips
nftables 防火墙/NAT 规则 systemctl status nftables

6.2 常用操作

# 重启所有服务
systemctl restart x-ui ipv6-proxy-admin ipv6-proxy-monitor

# 查看 Web 管理台日志
journalctl -u ipv6-proxy-admin -f

# 查看监控日志
journalctl -u ipv6-proxy-monitor -f

# 查看 Xray 日志
journalctl -u x-ui -f

# 查看 nftables 规则
nft list ruleset

# 临时停止防火墙 (排查用)
systemctl stop nftables

# 重新加载 nftables 规则
nft -f /etc/nftables.conf

7. 故障排查

7.1 常见问题

Q: 安装后无法访问 Web 管理台

# 检查服务状态
systemctl status ipv6-proxy-admin

# 检查端口监听
ss -tlnp | grep 8080

# 检查防火墙
nft list ruleset | grep 8080

# 查看详细日志
journalctl -u ipv6-proxy-admin -n 50 --no-pager

Q: IPv6 出口地址无法连通

# 检查地址是否已添加到网卡
ip -6 addr show dev eth0

# 从特定地址发起 ping 测试
ping6 -I 2001:db8::1001 -c 3 2001:4860:4860::8888

# 检查内核转发是否启用
sysctl net.ipv6.conf.all.forwarding

# 检查 nftables NAT 规则
nft list table ip6 nat

Q: Xray 多出口不生效

# 检查 Xray 配置语法
xray -test -config /usr/local/x-ui/bin/config.json

# 检查 outbound tags 是否正确
# 确认 routing 中 balancer 的 selector 包含正确的 tag

# 查看 Xray 日志
journalctl -u x-ui -f

Q: nftables 规则无法应用

系统可能使用 iptables 而非 nftables:

# 检查当前防火墙后端
update-alternatives --display iptables

# 如果 iptables-nft 未安装,安装后重试
apt install -y iptables-nft

# 或使用备用 iptables 方案
systemctl enable netfilter-persistent
systemctl start netfilter-persistent

7.2 关键日志位置

日志 路径/命令
Web 管理台 journalctl -u ipv6-proxy-admin
监控进程 journalctl -u ipv6-proxy-monitor
Xray 核心 journalctl -u x-ui
系统内核 dmesg | grep -i ipv6
nftables nft list ruleset

8. 安全加固

8.1 修改默认端口

# 修改 Web 管理台端口
sed -i 's/PROXY_ADMIN_PORT=8080/PROXY_ADMIN_PORT=8443/' /etc/systemd/system/ipv6-proxy-admin.service
systemctl daemon-reload
systemctl restart ipv6-proxy-admin

# 修改 3x-ui 端口
x-ui settings  # 按提示修改

8.2 配置 HTTPS (推荐)

使用 Caddy 或 Nginx 反向代理管理台:

# 安装 Caddy
apt install -y caddy

# 配置 Caddyfile
cat > /etc/caddy/Caddyfile << 'EOF'
proxy.yourdomain.com {
    reverse_proxy localhost:8080
    tls admin@yourdomain.com
}
EOF

systemctl restart caddy

8.3 修改默认密码

# 编辑服务环境变量
systemctl edit ipv6-proxy-admin

# 添加:
[Service]
Environment="PROXY_ADMIN_PASS=YourNewStrongPassword"

systemctl daemon-reload
systemctl restart ipv6-proxy-admin

9. 技术实现细节

9.1 IPv6 地址生成算法

# 从 /64 前缀派生子地址
# 主地址: 2001:db8:1234:5678::1/64
# 提取前缀: 2001:db8:1234:5678
# 生成: 2001:db8:1234:5678::1001, ::1002, ..., ::10ff

# 添加方式 (noprefixroute 避免创建路由)
ip -6 addr add 2001:db8:1234:5678::1001/128 dev eth0 noprefixroute

9.2 NAT66 规则原理

# 出站流量: 内部地址 -> 随机选择出口池中的公网地址
# 入站响应: 根据 conntrack 状态自动映射回原地址

nftables 规则:
table ip6 nat {
    chain postrouting {
        type nat hook postrouting priority 100;
        # 非本网段源地址的出站流量做 NAT
        ip6 saddr != 2001:db8::/64 masquerade random,persistent
    }
}

9.3 Xray sendThrough 机制

Xray-core 的 sendThrough 参数支持:

  • 单个 IP: "sendThrough": "2001:db8::1001" — 固定出口
  • CIDR 段: "sendThrough": "2001:db8::/64" — 段内随机选择
  • 特殊值: origin / srcip — 保持源地址

本方案使用 单个 IP per outbound 的方式,配合 Balancer 实现精细控制。

9.4 负载均衡策略实现

策略 Xray Balancer 配置 工作原理
random "strategy": {"type": "random"} 每个连接随机选择一个出口
round-robin "strategy": {"type": "roundRobin"} 按顺序轮询分配
least-ping 需自定义 结合管理台健康检查数据选择最优出口

10. 文件结构

/opt/ipv6-proxy-pool/
├── config/
│   ├── ipv6_pool.txt           # IPv6 出口地址列表
│   ├── lb_strategy.json        # 当前负载均衡策略
│   ├── xray_outbounds.json     # Xray outbounds 配置片段
│   ├── xray_routing.json       # Xray routing 配置片段
│   ├── xray_full_config.json   # 完整 Xray 配置 (生成)
│   └── credentials.txt         # 安装凭证 (权限 600)
├── proxy_admin/
│   ├── app.py                  # Flask Web 应用主文件
│   └── templates/
│       ├── base.html           # 基础布局
│       ├── login.html          # 登录页
│       ├── dashboard.html      # 仪表盘
│       ├── settings.html       # 设置页
│       ├── logs.html           # 日志页
│       └── error.html          # 错误页
├── scripts/
│   ├── monitor.py              # 监控守护进程
│   └── gen_xray_config.py      # Xray 配置生成器
├── runtime/
│   └── status.json             # 运行时状态
└── venv/                       # Python 虚拟环境

11. 开源协议

本项目采用 MIT 协议开源,可自由使用、修改和分发。


12. 参考资源

About

IPv6 多出口代理池 - 一键部署 / Xray / NAT66 / Web管理台

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages