一种基于抄袭配置文件的透明代理配置方式 & 近况汇报
1. 《一种基于照搬配置文件的透明代理配置方式》

最近几个月在玩 Steam 平台的碧蓝档案,一开始用传统的 *_proxy 环境变量是可以正常运行的,但最近登陆越来越卡,最近几天要重试好几次才能登陆进去,我怀疑是(最后也确实是)一些组件封装了自己的网络层,没有读环境变量,所以没走代理。我寻思透明代理这一块是绕不过去了。
1.1. 背景
之前用透明代理是 Shadowsocks 时代给树莓派刷了 OpenWRT ,里面有开箱即用的透明代理,确实方便,后来自己用 ArchLinux DIY 路由器就没搞过透明代理,因为我完全不了解 iptables 啥的,看别人的博客都是需要一大堆 iptables 指令,每一条我都不知道什么意思,所以没敢搞,但现在不一样了, AI 太好用了你们知道吗, ChatGPT 能帮我给每一行指令写出注释,所以我大胆地抄了 XTLS 的教程,最终是 works 的,所以想分享一下
我家里的网络大概是这样的:
1.2. Xray 客户端配置
Xray 服务端不需要变动,新增一份用于透明代理的客户端配置:
1 | { |
保存到 xray 配置目录,比如我保存到了 /etc/xray/tproxy.json
1.3. 路由配置
1 | # 给路由表 100 添加一条默认本地路由,所有目标地址都走本地回环 |
现在所有打上标记 1 的数据包都会走本地回环,而不是外部网关,以便后续 Xray 接收。
1.4. 配置 Netfilter
配置 Netfilter ,我用 nftables :
注意:我家路由用的是 192.168.1.0/24 子网,所以下面 nftables 配置 24-25, 33-34 行写了 192.168.0.0/16 是可以正常工作的,如果你的路由使用其他子网,就可能需要改一下
1 | #!/usr/bin/nft -f |
1.5. 透明代理客户端
这样就完成了透明代理配置,需要科学上网的设备只需要配置这台机器为网关 & DNS即可,如我的台式机用 netctl ,我的 NAS 使用 192.168.1.222 :
1 | # ... |
1.6. 持久化
把上面的 nftable 保存成一个文件,比如我保存到了 xray 配置目录里 /etc/xray/nft.conf ,然后搞一个 systemd unit
1 | [Unit] |
设置成自动运行
1 | systemctl enable xray@tproxy |
1.7. 配置 Aria2c 等不走 Xray
上面配置后, NAS 本机所有流量也会走 TProxy , Aria2c 也会,这很明显会蛋疼,因为 BT 很多 Peer 都是国外 IP ,都走代理一方面大幅度加重了代理的使用量,另一方面也有点脱裤子放屁,但这只是我觉得,所以我希望 Aria2c 不要走 TProxy 。
我知道 Xray 可以给
"protocol": ["bittorrent"]单独配置路由,但在我的 NAS 上 Xray 识别不到 Aria2c 的 Bittorrent 流量,仍然会走代理还有 cloudflared ,这个东西不知道为啥走 TProxy 会有一个域名解析失败的问题,也需要绕过 TProxy
我觉得最简单、方便的做法就是再搞一个网络命名空间,然后给那个 netns 配置路由走光猫(没错,我家是光猫直接拨号当主路由):
1 | # 创建一个名为 direct-ns 的 netns |
这样 direct-ns 就会走 192.168.1.1 ,可以测试一下:
1 | ip netns exec direct-ns curl -v https://www.google.com |
预期的结果是连接不上, DNS 解析的结果是被污染的。现在让 Aria2c 用 direct-ns ,我是用 systemd 进行管理的,只需要加一行
1 | [Service] |
就可以了
需要注意的是
direct-ns里目前只有192.168.1.150这个 IP ,所以 Aria2c 的 Json RPC 地址会变为192.168.1.150:6800
2. 近况汇报
变身 995 社畜快一年了
TODO