透明代理

举报
yd_241752946 发表于 2026/10/21 13:48:34 2026/10/21
【摘要】 宿舍网络原本是一台刷了 OpenWrt 的老路由器,跑着不兼容新加密协议的 SSRPlus+,旁边挂着一台 Debian 小主机。小主机网线连路由器 LAN,同时无线网卡连着路由器的热点,各种设备都通过这台路由上网。没有 IPv6,节点经常失效,CPU 也弱。目标很简单:让 Debian 当软路由跑 v2rayA 透明代理,老路由降级为 AP。整个过程踩的坑,几乎全部来自“单网口旁路由”这种...


宿舍网络原本是一台刷了 OpenWrt 的老路由器,跑着不兼容新加密协议的 SSRPlus+,旁边挂着一台 Debian 小主机。小主机网线连路由器 LAN,同时无线网卡连着路由器的热点,各种设备都通过这台路由上网。没有 IPv6,节点经常失效,CPU 也弱。目标很简单:让 Debian 当软路由跑 v2rayA 透明代理,老路由降级为 AP。

整个过程踩的坑,几乎全部来自“单网口旁路由”这种特殊架构。记录一下最终打通全链路的关键步骤,以及中间那些把自己绕晕的错误判断。

[图片:原先的网络连接方式]

网络拓扑与初步调整
设备:升腾 D610 瘦客户机,单千兆网口,刷了 Debian。老路由刷 OpenWrt。整个网络只有 IPv4。

最终逻辑是:

老路由关闭路由功能,只做 AP,无线客户端通过它接入。
DHCP 由路由器上继续提供(或者用静态 IP),但 下发的网关和 DNS 必须指向 Debian 的 IP。
Debian 运行 v2rayA,开启透明代理,对来自其他设备的流量进行分流,自己通过路由器的物理链路出网。
第一步是在 OpenWrt 的 LAN 设置里把网关和 DNS 都填成 Debian 的静态 IP(192.168.1.210)。然后遇到第一个问题:所有设备拿不到 IP 了。

OpenWrt 在“网关被改成非自身上级”时,DHCP 服务(dnsmasq)默认会拒绝响应。解决办法:在 LAN → DHCP 服务器 → 高级设置里勾选 强制(Force DHCP),让路由器无论网关填什么都必须下发 IP。同时在 DHCP-Options 里补两条:

3,192.168.1.210
6,192.168.1.210
这两条告诉客户端:网关和 DNS 都是 Debian。

设备重新连接后,IP、网关、DNS 全部正确,有线通路打通。

Debian 单网口下的转发与 NAT 伪装
作为旁路由,Debian 必须开启 IP 转发,并对来自其他设备的流量做 SNAT 伪装,否则回程数据包会因为源 IP 不对被丢弃。

# 永久开启转发
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

# 允许转发
sudo iptables -A FORWARD -i enp1s0 -j ACCEPT
sudo iptables -A FORWARD -o enp1s0 -j ACCEPT
Bash
NAT 伪装是个大坑。一开始我用了最简单的:

sudo iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE
Bash
这会无差别把 所有经过网卡的流量都改写成 Debian 自己的 IP,包括 v2rayA 自身发出的请求。结果就是 v2rayA 在日志里看到所有来自 192.168.1.210 的请求,透明代理陷入了“代理自己”的本地回环,外网完全不通。

正确的做法是 只对来自局域网其他设备、且目的不是本地的流量做伪装,排除 Debian 自身:

sudo iptables -t nat -F   # 先清掉之前错误的规则
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MASQUERADE
Bash
另外还需要关闭反向路径过滤,避免单网口数据包被内核当欺骗包丢弃:

sudo sysctl -w net.ipv4.conf.all.rp_filter=0
sudo sysctl -w net.ipv4.conf.default.rp_filter=0
sudo sysctl -w net.ipv4.conf.enp1s0.rp_filter=0
Bash
做完这些,流量才算真正能被透明代理接管。

v2rayA 透明代理模式选择
v2rayA 通过 Docker 部署,启动命令必须带 --privileged 和 --network=host,否则无法操作宿主网络。

docker run -d \
  --restart=always \
  --privileged \
  --network=host \
  --name v2raya \
  -e V2RAYA_ADDRESS=0.0.0.0:2017 \
  -v /lib/modules:/lib/modules:ro \
  -v /etc/resolv.conf:/etc/resolv.conf \
  -v /etc/v2raya:/etc/v2raya \
  mzz2017/v2raya
Bash
透明代理设置在单网口旁路由下极度挑剔模式:

透明代理实现方式:建议 redirect 而不是 tproxy。部分版本在 tproxy 下会把转发流量误视为本机回环,导致代理死循环。
透明代理模式:必须切到 Bypass CN(绕过大陆) 或 RoutingA,而不要用 GFWList。GFWList 模式下仅拦已知被墙域名,旁路由很容易因为 DNS 解析漏网。
防止 DNS 污染:先降到“仅防止 DNS 劫持(快速)”或“使用系统 DNS”。DoH 在校园网可能被阻断,或与透明代理规则冲突导致所有请求卡死。
[图片:v2rayA DNS 选项界面]

设置完保存,选好节点启动,节点变蓝后,其他设备断开 WiFi 重连就能测试。

那些无效的尝试与错误判断
以为 Debian 的网关要改成上级路由:在单网口、网线插在路由器 LAN 口的情况下,把 Debian 默认网关指向 192.168.1.1 物理不通,直接断网。单臂旁路由的网关必须指向它能物理通信的设备,也就是路由器(.4),然后通过正确的 MASQUERADE 和规则来防止回环。
疯狂加 iptables 转发和 mangle 规则:试图通过 iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu 等方式“强化”转发,但根本问题没解决时,这些只是掩盖症状。
听信“换 Clash Meta 一键解决”:在 v2rayA 还没修好时就考虑换装 mihomo,实际底层单网口回环问题不解决,换什么都一样。
盲目插回无线网卡:成功后想插无线网卡,这会造成双网卡同连一个路由器,形成路由环路和广播风暴,直接瘫痪。
验证与后续问题
改造完成后,连 WiFi 的设备访问国内网站正常,国外网站通过代理打开。但 Debian 本机 ping google.com 不通,这是代理的协议局限:透明代理只处理 TCP/UDP,不处理 ICMP,属于正常现象。

另外发现 Debian 升腾 D610 的 CPU 经常 99%。用 htop 排查,发现是之前跑的 Playwright 无头浏览器(Chromium)进程大量常驻,加上 QQ 机器人、Node 服务等,这颗老赛扬实在扛不住。后来开始研究硬件升级,预算 500 元,在二手市场反复避坑后,选了 N5105 工控 ITX 板,配 8G DDR4、128G NVMe 固态,功耗仅 10W,完全满足旁路由和自动化脚本需求。

总结
单网口旁路由的关键在于:

保持 Debian 网关指向实际的物理出口(路由器),不要试图越过路由器指向上级。
NAT 伪装必须谨慎限定源地址,排除本机,避免 v2rayA 抓到自己的流量。
透明代理模式优先 Bypass CN,关闭高级 DNS 功能以保证基础连通。
关闭 rp_filter,允许同网口进出流量。
DHCP 强制下发必须勾选,并正确注入 Option 3 和 6。
剩下的,就是坐下来享受全宿舍无缝的无感科学上网,以及一边看着 htop 一边搜索新小板子了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。