身为程序员, 免不了有访问一些资料的客观需求, 各路框架 api 文档, 开源项目等等, 于是有了这里的科学上网
代理软件
ps: 鉴于现在 qv2ray
已停止更新,新的 3.0 还不太好用,推荐软件使用v2raya
,直接yay -S v2raya
安装后,systemctl enable --now v2raya
启用,然后在浏览器中配置
我现在主要使用 v2ray
, 使用 yay 直接安装 yay -S v2ray
, 之后就可以自己手动配置代理了,
当然也一般都会使用图形界面的工具, 我一般使用的是qv2ray
==> 直接安装 yay -S qv2ray-dev-git
,
之后就可以进软件配置了
v2ray 透明代理配置
上面配置之后可以通过启用系统代理的方式, 使部分软件使用代理, 比如 浏览器, 但是, 一些系统软件, 终端等等仍然是直连, 有的时候就很难受, 这里就需要透明代理了。
我这里使用 cgproxy
配和 qv2ray
实现。
cgproxy
cgproxy通过劫持系统所有的网络流量, 根据配置文件, 让某些程序的网络流量直连, 剩下的流量送入某一端口。然后我们可以让 Qv2ray
监听这个端口, 将这些流量送入高级路由设置, 根据规则选择直连或走代理, 从而实现全局透明代理。
yay -S cgproxy-git
cgproxy 配置
安装完成之后, 就是编辑cgproxy
的配置文件:/etc/cgproxy/config.json
{
"comment": "For usage, see https://github.com/springzfx/cgproxy",
"port": 12345,
"program_noproxy": ["v2ray", "qv2ray"],
"program_proxy": [],
"cgroup_noproxy": ["/system.slice/v2ray.service"],
"cgroup_proxy": ["/"],
"enable_gateway": true,
"enable_dns": true,
"enable_udp": true,
"enable_tcp": true,
"enable_ipv4": true,
"enable_ipv6": true,
"table": 10007,
"fwmark": 39283
}
配置说明:
-
在
cgroup_proxy
中括号里加上"/"(包含引号) -
port
改为Qv2ray
首选项里的透明代理的端口 -
cgproxy
默认配置是代理所有tcp
和udp
,ipv4
和ipv6
的流量, 如果不希望代理其中的某种(些)流量, 则将对应的enable_xxx
改为false
。注意这里的配置要和Qv2ray
选项里的配置一致(如,Qv2ray
选项里没有勾选udp
, 则这里务必把enable_udp
改为false
) -
为了避免流量出现死循环(即代理工具发出的流量又转回到代理工具里), 需要将代理工具排除在透明代理环境外面:
在program_noproxy
中括号里加上"v2ray","qv2ray"
(包含引号和逗号), 以使qv2ray
和v2ray
发出的流量不经过透明代理。如果你的v2ray
或qv2ray
不在 PATH 里, 则需要填写它们的绝对路径 -
如果启用了
udp
的透明代理(dns
也是udp
), 则给v2ray
二进制文件加上相应的特权, 否则udp
的透明代理可能会出问题sudo setcap "cap_net_admin,cap_net_bind_service=ep" /usr/bin/v2ray ## /usr/bin/v2ray 替换成自己的v2ray二进制文件路径 ## 这个权限在 v2ray 更新时会失效, 所以每次更新要重新跑一次。为了避免忘记或者嫌麻烦, 可以从 AUR 安装这个包, 就不用每次都跑一遍上面这个命令了。为了确保第一次有效, 还是至少跑一次吧。 yay -S v2ray-cap-git
-
启动透明代理服务:
systemctl start cgproxy.service
或systemctl enable --now cgproxy.service
-
最后在
Qv2ray
里, 勾选「首选项」->「入站设置」->「透明代理设置」, 并将端口设置为上面配置文件中的端口, 并确认网络选项中TCP
和UDP
的开关与配置文件中的一致。
完成这些步骤之后, 应该就 ok 了, 程序的所有流量自动走 Qv2ray, 按其中的规则走直连还是代理, 即全局透明代理。
终端代理
终端代理可以走软件, 也可已手动配置, 以前我建议软件, 后来我建议自己手动。。。
终端代理软件
安装终端代理软件proxychains
:
yay -S proxychains-ng-git
之后编辑/etc/proxychains.conf
文件, 在最底部配置自己的代理 url、端口
最后使用只需要在正常命令前加一个proxychains4
, 就可以了, 比如proxychains4 yay -Syu
当然, 单词有点长, 可以用alias
简化一下:alias pc="proxychains4"
手动开启代理
软件有时候总会报一些连接异常, 所以我还是建议终端代理也配上, 方便必要的时候可以手动切换代理方式
主要就是在 ~/.zshrc
文件里面加上下面两句
## 设置全部代理走sock5 后面的链接换成自己的配置
alias setproxy="export ALL_PROXY=socks5://127.0.0.1:1080"
## 取消全部代理设置
alias unsetproxy="unset ALL_PROXY"
参考文章
终端代理的两种方式因为隔得有点久了, 找不到具体的参考文章, 就不提了
『转载』使用 Qv2ray+cgproxy 配置透明代理(仅限 Linux) > cgproxy 配合 qv2ray 实现全局透明代理
Q.E.D.