springzfx / cgproxy

Transparent Proxy with cgroup v2。透明代理,配合v2ray/Qv2ray食用最佳

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

在 gnome 3.36 下,qv2ray 登录时启动,"program_noproxy": ["qv2ray"] 无法生效。

sixg0000d opened this issue · comments

日志输出如下

systemd-cgls

Control group /:
-.slice
├─user.slice 
│ └─user-1000.slice 
│   ├─user@1000.service 
...
│   │ ├─gnome-launched-qv2ray.desktop-3205.scope 
│   │ │ └─3205 /usr/bin/qv2ray
...
└─noproxy.slice 
  └─3484 /usr/bin/v2ray -config /home/domain/.config/qv2ray/generated/config.gen.json

可以看出 gnome 在 gnome-launched-qv2ray.desktop-3205.scope 下启动了 qv2ray,该 qv2ray 进程没有在 noproxy.slice 下。
(如果这时重启 cgproxy,或重启 qv2ray ,新启动的 qv2ray 进程将会进入 noproxy.slice。但如果不重新启动 cgproxy ,注销桌面再启动,新自启的 qv2ray 进程仍不会被 "noproxy" 。)

~ $ journalctl -b 0 -u cgproxy
-- Logs begin at Sun 2020-07-26 20:53:16 CST, end at Thu 2020-09-03 02:34:45 CST. --
9月 03 02:25:06 myfedoralll systemd[1]: Started cgproxy service.
9月 03 02:25:06 myfedoralll cgproxyd[2043]: info: noproxy program: /usr/bin/v2ray /usr/bin/qv2ray /opt/electerm/electerm /usr/local/bin/tcping
9月 03 02:25:06 myfedoralll cgproxyd[2043]: info: proxied program:
9月 03 02:25:06 myfedoralll cgproxyd[2043]: info: noproxy cgroup: /noproxy.slice
9月 03 02:25:06 myfedoralll cgproxyd[2043]: info: proxied cgroup: /proxy.slice /
9月 03 02:25:06 myfedoralll cgproxyd[2043]: info: table: 10007, fwmark: 39283, mark_newin: 39271
9月 03 02:25:06 myfedoralll cgproxyd[2067]: iptables: applying tproxy iptables
9月 03 02:25:07 myfedoralll cgproxyd[2161]: iptables: noproxy cgroup: /noproxy.slice
9月 03 02:25:07 myfedoralll cgproxyd[2161]: iptables: proxied cgroup: /proxy.slice /
9月 03 02:25:07 myfedoralll cgproxyd[2043]: info: socketserver thread started
9月 03 02:25:07 myfedoralll cgproxyd[2043]: info: loading /usr/lib64/cgproxy/libexecsnoop.so
9月 03 02:25:07 myfedoralll cgproxyd[2043]: info: dlsym startThread func success
9月 03 02:25:07 myfedoralll cgproxyd[2043]: info: execsnoop thread started
9月 03 02:26:03 myfedoralll cgproxyd[2043]: info: execsnoop; noproxy: 3205 /usr/bin/qv2ray
9月 03 02:26:05 myfedoralll cgproxyd[2043]: info: execsnoop; noproxy: 3434 /usr/bin/v2ray
9月 03 02:26:05 myfedoralll cgproxyd[2043]: info: execsnoop; noproxy: 3440 /usr/bin/v2ray
9月 03 02:26:06 myfedoralll cgproxyd[2043]: info: execsnoop; noproxy: 3484 /usr/bin/v2ray

日志并无异常
(看上去 qv2ray 进程将越过透明代理,但实际上从 qv2ray 中节点的 tcping 结果皆为个位数,qv2ray 流量应该是经过了透明代理)

配置文件如下

/etc/cgproxy/config.json

{
    "comment":"For usage, see https://github.com/springzfx/cgproxy",

    "port": 60080,
    "program_noproxy": ["v2ray", "qv2ray", "/opt/electerm/electerm", "tcping"],
    "program_proxy": [],
    "cgroup_noproxy": [],
    "cgroup_proxy": ["/"],
    "enable_gateway": false,
    "enable_dns": true,
    "enable_udp": true,
    "enable_tcp": true,
    "enable_ipv4": true,
    "enable_ipv6": true,
    "table": 10007,
    "fwmark": 39283
}

~/.config/autostart/qv2ray.desktop

[Desktop Entry]
Name=qv2ray
GenericName=V2Ray Frontend
Exec=/usr/bin/qv2ray
Terminal=false
Icon=qv2ray
Categories=Network
Type=Application
StartupNotify=false
X-GNOME-Autostart-enabled=true

目前临时的解决方案是,将 ~/.config/autostart/qv2ray.desktop 中的 Exec 键改为 Exec=cgnoproxy /usr/bin/qv2ray
或者不使用 XDG Autostart 的方式,而是使用 systemd 的方式来实现开机启动 Qv2ray。

安装Qvplugin-Command插件,在插件设置里的“pre-connection”栏里加上一句 sh -c "cgnoproxy --pid $(pgrep -x qv2ray)"

使用该方法解决了