在 Arch Linux 上用 cgproxy Qv2ray 和 Trojan-go 实现全局代理
Last updated on 2022-10-07, Fri, 04:16 PM
自 2022-10-05 起,libbpf
版本从 0.8.1
升级到 1.0.1
后,libbpf.so.0.8.1
不复存在,cgproxy
因此失去重要依赖 libbpf.so.0
, 无法正常启动。
上游 自 2020 年 8 月起已经不再更新,在其他开发者接手之前,手动添加驱动以维持运行,仅作权宜之计。
故从 2022-10-04 的 Arch Linux Archive 获取
libbpf 0.8.1 package signature
验证后,解压,将其中的 libbpf.so.0.8.1
移到 /usr/lib/
下,添加软连接
应该足以使 cgproxy
继续运行一段时间。
但出于安全考虑,仍建议尽快转移到其他透明代理工具,例如 v2rayA
.
Mellow
麻烦多多
我想试试滥用 iptables
.
mellow
是通过虚拟网卡实现全局代理的,不过我切换配置的时候,它可能会突然崩溃,然后让网卡全部下线。我用了好几天,读了多少日志,发了多少火,直到找到这篇文章,才解决这个倒霉问题。
链接在这里。
TL; DR:
我真的想早日摆脱这玩意。明明有好用的内核工具,还要用虚拟网卡,不值得。
但是手写 iptables
规则真的太难了,我试了几次自定义的规则链,无一成功。
安装并配置 cgproxy
若您也使用 Arch Linux, 那麽可以在 AUR 上找到 cgproxy
, 不过 paru
似乎没法编译软件包,所以得亲自动手。
装好以后就可以开始配置。
一般的话,它应该长这样:
如果没有被绕过,所有的连接都会被转发到指定的端口。
这只是个预设的文件,按需修改。
想要更详细的解释,请看 这 。
对于 "programs"
这个字段,请注意:
如果您想要设置不位于 /usr/bin
中的程式,请务必填写该程式的完整路径,否则 cgproxy
将无法处理。
记得在 "program_noproxy"
里面 添加 trojan-go
的路径。
安装 v2ray-core
有好几种方法可以把 v2ray
装到你的系统中。
archlinuxcn 已经包含了
v2ray
, 直接安装即可。可执行文件是
/usr/bin/v2ray
, 资源目录在/usr/share/v2ray
.v2ray-core
的开发者预先写好了一个 shell 脚本 来帮助用家安装。可执行文件是
/usr/local/bin/v2ray
, 资源目录在/usr/local/share/v2ray
.也可以手动安装。
v2ray-core
的开发者亦提供了编译好的文件。你可以下载下来,按需解压,路径你自己定。
当心,手动安装意味着手动升级。方法一可随系统更新,方法二则内建了自启的更新。
如 cgproxy
的作者所言 -1, v2ray TPROXY 模式需要以 root 身份运行,或者特批权限。
可以添加一个 进程守护,或者
如果您的 v2ray
不在 $PATH
中,请把 $(which v2ray)
换成你的 v2ray
可执行文件的路径。
请务必注意:在每次滚包后,这个权限似乎都会掉,需要重新添加。(开机自启就是个好主意)
安装 trojan-go
我直接把预编译的二进制文件拿下来了。当然也有其他方法。
然后修改配置。 "run_type": "client"
, 差不多也就够了。反正我就自用而已。
我把这个放在另一个终端单独跑,此处使用 gnome-terminal
.
然后再写两个脚本,一个负责启动 trojan-go
, 另一个用来把这个脚本灌进 gnome-terminal
.
我加了一个参数 --maximize
来避免窗口错位。不然,在自启时,终端窗口的标题栏会躲进桌面顶部的状态栏里面。
将 2.sh
加入登录脚本以确保开机自启。
然后直接开跑,它会工作的。
安装并配置 Qv2ray
Qv2ray
可以在 archlinuxcn 和 AUR[1] [2] 找到。
安装 qv2ray-dev-git
是个不坏的主意。
如果你有 archlinuxcn
源,就可以轻易地安装预先编译好的包。
如果您安装了 AUR 助手,比如 paru
之类的,那也很简单。
你手动编译也成。
然后应该就可以打开 qv2ray
了。
图形界面长这样。
在这, qv2ray
只是作爲一个可视化的分流界面来使用,作 iptables
与 cgproxy
的补充。
打开 “首选项”,选定“内核设定”,修改 “V2Ray 核心设定” 让 qv2ray
可以正常调用 v2ray
核心。
啓用 socks5
和 http
代理。
记得设置好 dokodemo-door
的端口,要注意保持一致。
重新调节代理设置以确保全局代理正常运行。
嗅探可以不开,直接转发比较省力。
DNS 拦截可以使 fakedns
工作,但似乎慢一点。
然后添加新的连接。我单纯把请求转发给 trojan-go
, 用了一个 socks5
出站。
若要用 fakedns
, 可以右击连接,选择 “编辑为 JSON”。 若你不熟悉 Fake DNS
,可以康康 这篇文章,是 Kitsunebi
作者写的,还有 这篇,是 Sukka 写的。
双击或右击该连接,qv2ray
应该能跑起来了。
再次检查 "program_noproxy"
的路径,应该都能工作了。
Drop ICMP
最后记得加一行指令干掉 ICMP,开机启动,防止裸连泄露。
把 $OUT_NC
换成你网卡的名字。
参考
-1. https://github.com/springzfx/cgproxy#notes ↩