咱在国内服务器上搞开发,拉 Docker 镜像、访问 GitHub、下载依赖,动不动就超时断连,烦不烦?手动配环境变量代理又容易漏,切换也麻烦。
v2rayA 就是来解决这个问题的——它提供了一个 Web GUI 的代理客户端,支持全局透明代理、分流规则,一个面板搞定所有代理需求。Docker 部署,干净利落,不污染宿主机环境。
v2rayA 是什么?
v2rayA 是一个基于 Web GUI 的 V2Ray 客户端,核心特性:
同类工具对比
结论:Linux 服务器场景下,v2rayA 上手最简单,Web GUI + 全局透明代理是最大优势。
环境准备
1. 系统要求
2. Ubuntu 24 特殊注意
Ubuntu 24 默认使用 nftables 而非 iptables,这点非常重要!v2rayA 需要正确识别防火墙后端才能正常工作。
# 查看 Ubuntu 24 的防火墙后端
sudo iptables --version
# 如果输出含 nf_tables,说明系统用的是 nft 后端
# 确认 nftables 是否可用
sudo nft list ruleset3. 加载 tun 模块
v2rayA 的透明代理依赖 tun 内核模块:
# 加载 tun 模块
sudo modprobe tun
# 设置开机自动加载
echo "tun" | sudo tee /etc/modules-load.d/tun.conf
# 验证
lsmod | grep tunDocker 部署 v2rayA
1. 适配 1Panel 的目录结构
按照 1Panel 的标准目录规范:
/opt/1panel/docker/compose/v2raya/ # Compose 文件
└── docker-compose.yml
/opt/1panel/docker/data/v2raya/ # 持久化数据
└── etc/ # v2rayA 配置目录
# 创建目录
sudo mkdir -p /opt/1panel/docker/compose/v2raya
sudo mkdir -p /opt/1panel/docker/data/v2raya/etc2. docker-compose.yml(推荐方案)
这是适配 1Panel + Ubuntu 24(nftables)的 Compose 文件:
version: "3.8"
services:
v2raya:
image: mzz2017/v2raya:v2.2.7.5
container_name: v2raya
restart: always
privileged: true
network_mode: host # 用 host,不需要 ports 和 networks
environment:
- V2RAYA_LOG_FILE=/tmp/v2raya.log
- V2RAYA_V2RAY_BIN=/usr/local/bin/v2ray
- V2RAYA_NFTABLES_SUPPORT=on
- IPTABLES_MODE=nftables
volumes:
- /lib/modules:/lib/modules:ro
- /etc/resolv.conf:/etc/resolv.conf
- /opt/1panel/docker/data/v2raya/etc:/etc/v2raya
- /dev/net/tun:/dev/net/tun
关键参数说明:
privileged: true:必须!v2rayA 需要修改 iptables/nftables 规则和操作网络设备
network_mode: host:必须!全局透明代理需要与宿主机共享网络命名空间
V2RAYA_NFTABLES_SUPPORT=on:Ubuntu 24 必须开启,否则防火墙规则无法生效
IPTABLES_MODE=nftables:Ubuntu 24 的 iptables 使用 nft 后端
3. 不需要透明代理的方案
如果你的服务器只需要给 Docker 守护进程或特定应用做代理(不需要全局透明代理),可以用桥接网络模式:
version: "3.8"
services:
v2raya:
image: mzz2017/v2raya:latest
container_name: v2raya
restart: always
ports:
- "2017:2017" # Web 管理面板
- "20170:20170" # SOCKS5 代理
- "20171:20171" # HTTP 代理
- "20172:20172" # 带规则的 HTTP 代理
environment:
- V2RAYA_LOG_FILE=/tmp/v2raya.log
- V2RAYA_V2RAY_BIN=/usr/local/bin/v2ray
volumes:
- /opt/1panel/docker/data/v2raya/etc:/etc/v2raya
networks:
- 1panel-network
networks:
1panel-network:
external: true
两种方案选择:
需要全局透明代理(所有流量自动走代理)→ 用 host 模式
只需要手动指定代理地址给特定应用用 → 用 桥接模式,更安全隔离
4. 启动服务
cd /opt/1panel/docker/compose/v2raya
# 启动
docker compose up -d
# 查看日志
docker compose logs -f v2raya
# 查看状态
docker compose ps
初始化配置
1. 访问 Web 面板
浏览器打开:http://你的服务器IP:2017
首次访问需要创建管理员账号和密码。
2. 添加节点
v2rayA 支持多种方式添加节点:
导入链接:直接粘贴
vmess://、vless://、ss://、trojan://等链接导入订阅:填写订阅地址,自动拉取节点列表
手动添加:填写服务器地址、端口、协议等参数
3. 启动代理
选择一个节点
点击左上角 "启动" 按钮
选择代理模式:
推荐服务器场景:选择 透明代理 + 分流规则(大陆白名单模式) ,国内直连、国外走代理。
4. 代理端口说明
5. 连通性测试
1. 先确认 v2rayA 透明代理是否真的在运行
在 v2rayA Web 面板(http://IP:2017)里确认:
节点是否已选中?
是否点了 "启动"?
代理模式是否选了 "透明代理"(不是系统代理/仅代理)?
2. 用 curl 测试 TCP 连通性
# 不走代理直接测试(大概率超时)
curl -I --connect-timeout 5 https://registry-1.docker.io/v2/
# 通过 HTTP 代理端口测试
curl -I --connect-timeout 10 -x http://127.0.0.1:20171 https://registry-1.docker.io/v2/如果第二条返回 HTTP/1.1 200 或 401,说明代理是通的!
3. 测试 Docker 拉镜像
# 先来个小镜像测试
docker pull hello-worldDocker 守护进程代理配置
v2rayA 启动后,如果想给 Docker 拉镜像走代理,还需要单独配置 Docker daemon:
1. 创建 Docker 代理配置
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/proxy.conf << 'EOF'
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:20171"
Environment="HTTPS_PROXY=http://127.0.0.1:20171"
Environment="NO_PROXY=localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,*.aliyuncs.com,*.cn"
EOFNO_PROXY 说明:内网地址和国内域名不走代理,避免拉国内镜像也绕一圈。
2. 重载配置
sudo systemctl daemon-reload
sudo systemctl restart docker3. 验证代理生效
# 查看 Docker 代理配置
sudo docker info | grep -i proxy
# 测试拉取镜像
docker pull hello-world注意:Docker 重启后 v2rayA 容器也会被重启(因为
restart: always),代理服务会自动恢复。
其他应用代理配置
Shell 环境变量代理
# 写入 ~/.bashrc(当前用户)
cat >> ~/.bashrc << 'EOF'
# v2rayA 代理
export http_proxy="http://127.0.0.1:20171"
export https_proxy="http://127.0.0.1:20171"
export no_proxy="localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"
EOF
source ~/.bashrcGit 代理
# 设置 Git 代理
git config --global http.proxy http://127.0.0.1:20171
git config --global https.proxy http://127.0.0.1:20171
# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxyapt 代理
sudo tee /etc/apt/apt.conf.d/proxy.conf << 'EOF'
Acquire::http::Proxy "http://127.0.0.1:20171";
Acquire::https::Proxy "http://127.0.0.1:20171";
EOF
# 取消代理
# sudo rm /etc/apt/apt.conf.d/proxy.conf容器内部代理
如果需要让其他 Docker 容器也走 v2rayA 代理,在 docker-compose.yml 中添加环境变量:
services:
your-app:
image: your-image
environment:
- http_proxy=http://宿主机IP:20171
- https_proxy=http://宿主机IP:20171
- no_proxy=localhost,127.0.0.1
# 或者使用 1panel-network 网络时,用容器名访问
# - http_proxy=http://v2raya:20171 # 仅在桥接模式下有效host 模式下:容器与宿主机共享网络,直接用
127.0.0.1:20171即可。 桥接模式下:需要用宿主机 IP 或通过1panel-network网络用容器名访问。
1Panel 防火墙放行
如果服务器装了 1Panel,需要放行以下端口:
# 通过 1Panel 面板:安全 → 防火墙 → 添加规则
# 或命令行操作:
sudo ufw allow 2017/tcp # Web 面板
sudo ufw allow 20170/tcp # SOCKS5
sudo ufw allow 20171/tcp # HTTP 代理
sudo ufw allow 20172/tcp # 规则代理安全提示:
2017 端口(Web 面板)不要直接暴露公网,建议通过 1Panel Nginx 反代 + HTTPS + IP 白名单
代理端口仅限内网使用,不要对外暴露
Nginx 反代 Web 面板(可选)
通过 1Panel Nginx 给 v2rayA Web 面板加 HTTPS 和访问控制:
1. 1Panel 创建网站
1Panel → 网站 → 创建网站 → 反向代理
域名:
v2raya.yourdomain.com代理地址:
http://127.0.0.1:2017开启 HTTPS,申请 SSL 证书
2. Nginx 配置补充
在 1Panel 的网站配置中,添加 WebSocket 支持(v2rayA 部分功能需要):
location / {
proxy_pass http://127.0.0.1:2017;
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;
# WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 超时设置
proxy_read_timeout 86400;
proxy_send_timeout 86400;
}常见问题
Q1:启动报错 Failed to load module nf_tables
原因:Ubuntu 24 未加载 nftables 模块。
# 加载模块
sudo modprobe nf_tables
sudo modprobe nf_nat
sudo modprobe nf_conntrack
# 设置开机自动加载
cat << 'EOF' | sudo tee /etc/modules-load.d/nftables.conf
nf_tables
nf_nat
nf_conntrack
EOFQ2:透明代理启动失败,报 tun 相关错误
原因:未加载 tun 内核模块。
sudo modprobe tun
echo "tun" | sudo tee /etc/modules-load.d/tun.confQ3:Docker 拉镜像还是超时
排查步骤:
# 1. 确认 v2rayA 代理是否正常
curl -I -x http://127.0.0.1:20171 https://www.google.com
# 2. 确认 Docker 代理配置是否生效
sudo docker info | grep -i proxy
# 3. 如果代理配置显示但拉取仍失败,检查 v2rayA 是否选择了节点并启动Q4:代理影响了国内服务访问
解决方案:在 v2rayA 中设置分流规则,选择 "大陆白名单模式",国内流量直连、国外走代理。
Q5:重启服务器后代理失效
排查:
# 检查 v2rayA 容器状态
docker ps | grep v2raya
# 如果容器未运行,手动启动
cd /opt/1panel/docker/compose/v2raya
docker compose up -d
# 检查 v2rayA 内部代理是否启动(Web 面板中确认)Q6:桥接模式下其他容器无法连接 v2rayA
解决方案:
# 确认 v2raya 容器已加入 1panel-network
docker network inspect 1panel-network | grep v2raya
# 如果没有,手动加入
docker network connect 1panel-network v2rayaQ7:v2ray 核心选 v2ray 还是 xray?
默认是 xray,如需切换设置环境变量 V2RAYA_V2RAY_BIN=/usr/local/bin/v2ray 即可。
运维操作
1. 查看日志
# 容器日志
docker compose -f /opt/1panel/docker/compose/v2raya/docker-compose.yml logs -f --tail 100
# v2rayA 内部日志
docker exec v2raya cat /tmp/v2raya.log2. 升级版本
cd /opt/1panel/docker/compose/v2raya
# 拉取最新镜像
docker compose pull
# 重建容器
docker compose up -d3. 备份配置
# v2rayA 配置备份
sudo tar czf v2raya-config-backup-$(date +%Y%m%d).tar.gz \
-C /opt/1panel/docker/data/v2raya/etc .4. 完全卸载
cd /opt/1panel/docker/compose/v2raya
# 停止并删除容器
docker compose down
# 删除数据(谨慎!)
sudo rm -rf /opt/1panel/docker/data/v2raya
sudo rm -rf /opt/1panel/docker/compose/v2raya
# 清除 Docker 代理配置
sudo rm /etc/systemd/system/docker.service.d/proxy.conf
sudo systemctl daemon-reload
sudo systemctl restart docker安全加固
总结
咱在 Ubuntu 24 上用 Docker 部署 v2rayA,核心要点就三个:
Ubuntu 24 必须开启 nftables 支持:
V2RAYA_NFTABLES_SUPPORT=on+IPTABLES_MODE=nftables全局透明代理用 host 网络模式:
network_mode: host+privileged: trueDocker 代理需单独配置:Docker daemon 不吃环境变量,要走 systemd drop-in 文件
适配 1Panel 的目录规范,Compose 文件放 /opt/1panel/docker/compose/v2raya/,数据放 /opt/1panel/docker/data/v2raya/,和其他服务统一管理,清清爽爽。