Debian+v2rayA+Xray 搭建旁路由透明代理完整指南

本指南基于 J1900 小主机、Debian 12 系统,实现:

  • 旁路由模式(局域网设备将网关指向本机即可科学上网)

  • 透明代理(无需客户端手动设置代理)

  • Web 管理界面(v2rayA)

  • 兼容 Docker 服务与 EasyTier 异地组网(不冲突)


📦 一、全新安装 Debian 12 后的基础环境

1.1 更新系统并安装必要工具

bash

sudo apt update && sudo apt upgrade -y
sudo apt install curl wget git iptables iptables-persistent net-tools -y

1.2 确认网卡名称与 IP 地址

bash

ip addr show          # 查看网卡名,如 enp3s0、eth0 等
ip route | grep default   # 确认默认网关,例如 192.168.1.1

假设你的 Debian 固定 IP 为 192.168.1.2,主路由 IP 为 192.168.1.1


🚀 二、安装 Xray 核心(由官方脚本管理)

⚠️ 不要用 apt install xray,它缺少 systemd 服务文件。

bash

# 安装 Xray(自动创建 systemd 服务)
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
# 验证版本
xray -version

此时 Xray 已安装但先不启动(让 v2rayA 来管理它)。如果你之前启动过,请停止并禁用:

bash

sudo systemctl stop xray
sudo systemctl disable xray

🧩 三、安装 v2rayA

3.1 添加官方 APT 源并安装

bash

# 添加公钥
wget -qO - https://apt.v2raya.org/key/public-key.asc | sudo tee /etc/apt/keyrings/v2raya.asc
# 添加源
echo "deb [signed-by=/etc/apt/keyrings/v2raya.asc] https://apt.v2raya.org/ v2raya main" | sudo tee /etc/apt/sources.list.d/v2raya.list
# 更新并安装
sudo apt update
sudo apt install v2raya -y

3.2 启动 v2rayA 并设置开机自启

bash

sudo systemctl start v2raya
sudo systemctl enable v2raya
sudo systemctl status v2raya   # 应显示 active (running)

🌐 四、配置 v2rayA Web 界面

4.1 登录管理页面

浏览器访问 http://你的DebianIP:2017,首次访问时创建管理员账户并登录。

4.2 导入订阅节点

  • 点击左侧菜单 “导入”“订阅链接”

  • 粘贴机场订阅 URL,点击 “确定”

  • 等待节点列表刷新

4.3 核心设置(关键项)

  • 进入 “设置”“透明代理/系统代理”

    • 启用:GFWList模式

    • 勾选 “开启IP转发”“开启端口分享”

    • 实现方式:redirect(最稳定)

  • “防止DNS污染”:建议 关闭(让代理自动处理即可)

  • “地址与端口”(保持默认):

    • HTTP 端口:20171

    • SOCKS5 端口:20170

4.4 运行代理

  • 在节点列表中右键点击任意可用节点 → “连接”

  • 点击右上角 “运行” 按钮(变成 “停止” 即表示运行中)

4.5 验证代理核心正常工作

在 Debian 终端执行:

bash

curl -x http://127.0.0.1:20171 https://www.google.com -I

若返回 HTTP/2 200301,说明代理核心 OK。


🛠️ 五、透明代理规则配置(最重要的一步)

⚠️ v2rayA 有时不会自动添加 iptables 规则,需手动添加。下面提供一套无副作用的规则集,确保:

  • 访问 Debian 本机服务(SSH、v2rayA 管理页面、Docker 端口)不被劫持

  • 局域网其他设备流量被正确重定向到 v2rayA

5.1 确认网卡名

bash

NIC=$(ip route | grep default | awk '{print $5}')
echo $NIC   # 记住输出,如 enp3s0

5.2 添加规则(一次性执行)

bash

# 清空旧的 nat 规则(可选,但推荐)
sudo iptables -t nat -F PREROUTING

# 规则1:放行所有目标为本机 IP 的流量(避免管理页面、SSH 等被劫持)
sudo iptables -t nat -A PREROUTING -d 192.168.1.2 -j RETURN

# 规则2:放行本地回环接口
sudo iptables -t nat -A PREROUTING -i lo -j RETURN

# 规则3:放行已建立的连接
sudo iptables -t nat -A PREROUTING -m conntrack --ctstate RELATED,ESTABLISHED -j RETURN

# 规则4:放行 v2rayA 的 Web 端口和代理端口(避免自循环)
sudo iptables -t nat -A PREROUTING -p tcp --dport 2017 -j RETURN
sudo iptables -t nat -A PREROUTING -p tcp --dport 20171 -j RETURN

# 规则5:将所有其他 TCP 流量重定向到 v2rayA
sudo iptables -t nat -A PREROUTING -i $NIC -p tcp -j REDIRECT --to-port 20171

5.3 验证规则

bash

sudo iptables -t nat -L PREROUTING -n -v --line-numbers

你应该看到 5 条 RETURN 规则(放行) + 1 条 REDIRECT 规则。

5.4 永久保存规则

bash

sudo netfilter-persistent save

之后每次重启自动加载。


🧪 六、客户端测试

6.1 手动修改 Windows/Mac 网络设置

  • 将默认网关改为 Debian 的 IP(例如 192.168.1.2

  • DNS 服务器也可改为 192.168.1.2(或公共 DNS,如 114.114.114.114

  • 保存后,浏览器访问 https://www.google.com 应能打开

  • 同时访问 http://192.168.1.2:2017 应能打开 v2rayA 管理页面

6.2 若希望全自动(所有设备)

在主路由的 DHCP 设置中,将“默认网关”改为 192.168.1.2,并设置 DNS 为 192.168.1.2 或公共 DNS。重启设备或 renew IP 后自动生效。


🐳 七、与 Docker 服务共存(无冲突)

  • 规则已经放行访问本机 IP 的流量,因此 Docker 容器映射到宿主机的端口(例如 192.168.1.2:3002)依然可以从局域网正常访问。

  • 容器主动联网(如 apt update)默认不走代理。若需要容器使用代理,请参考:

    yaml

    # docker-compose.yml 中为特定容器添加环境变量
    environment:
      - HTTP_PROXY=http://192.168.1.2:20171
      - HTTPS_PROXY=http://192.168.1.2:20171
  • 不要在 iptables 中添加 -s 172.17.0.0/16 之类的规则劫持 Docker 网段,否则会导致容器网络异常。


🔗 八、与 EasyTier 异地组网共存

  • EasyTier 创建的虚拟网卡(如 tun0)流量默认不被劫持,因为其目标 IP 通常不是局域网段。

  • 如果你需要让 EasyTier 的流量也走代理,需额外添加策略路由。一般不需要

  • 若遇到 EasyTier 连接失败,检查是否被 iptables 拦截(可以临时 sudo iptables -P FORWARD ACCEPT 并观察)。


❓ 九、常见问题与解决方案

Q1:curl -x http://127.0.0.1:20171 测试成功,但 Windows 改网关后无法打开外网?

  • 原因:iptables 规则缺失或错误。

  • 解决:按照第五章重新添加规则。

Q2:v2rayA 管理页面(192.168.1.2:2017)打不开?

  • 原因:透明代理将访问管理页面的流量也重定向了。

  • 解决:确认规则中有 -p tcp --dport 2017 -j RETURN。如果已经存在,检查顺序是否在 REDIRECT 之前(用 -I 插入到前面)。

Q3:v2rayA 运行后,节点列表为空或不可用?

  • 检查订阅链接是否有效(浏览器直接打开看能否返回节点配置)。

  • 在 v2rayA 设置中更换“核心”为 Xray(如果显示“找不到核心”,确认 Xray 已安装且路径为 /usr/local/bin/xray)。

Q4:透明代理生效但国内网站也走代理导致变慢?

  • 在 v2rayA 设置中选择 “GFWList模式”(只代理被屏蔽的网站),或 “大陆白名单模式”(更激进,不推荐)。GFWList 模式最合适。

Q5:重启后透明代理失效?

  • 检查 iptables-persistent 是否已保存规则:sudo iptables -t nat -L PREROUTING -n -v

  • 重新执行第五章的保存命令:sudo netfilter-persistent save

Q6:想要完全卸载 v2rayA 并恢复系统?

bash

sudo systemctl stop v2raya
sudo apt remove v2raya
sudo iptables -t nat -F PREROUTING   # 清空规则
sudo netfilter-persistent save

✅ 十、总结

按照本指南,你的 Debian 旁路由将具备:

  • ✅ 稳定的透明代理科学上网

  • ✅ Web 界面方便管理节点和切换模式

  • ✅ 与 Docker、EasyTier 等服务和平共处

  • ✅ 重启后自动恢复所有规则

关键要点

  • 不要使用 apt install xray,用官方脚本。

  • 手动添加 iptables 规则(v2rayA 自动规则可能无效)。

  • 放行本机 IP 和 v2rayA 端口,避免管理页被劫持。

  • 保存规则到 iptables-persistent

评论