最近更新于 2024-04-08 17:27

前言

我对于终端代理的需求主要是因为要使用 git 上传代码到 GitHub 上,以及从 GitHub 克隆项目下来,还有些开源项目的编译中途需要下载依赖,经常要用到代理,毕竟国内直连十分不稳定有时候还无法访问。
之前也试过一些直接在 Linux (我这里是 Ubuntu)上安装的魔法上网客户端,但是总是存在各种问题,使用起来体验不是很好。而 Windows 和 Android 的各类客户端就挺好用的。
所以就换了一种方案,我 Windows 主机的魔法上网都是开机就运行的,如果使用 Linux 虚拟机的话,就可以用主机的魔法上网当作一个间接代理,将虚拟机内代理代主机的魔法上网客户端,再由主机的魔法上网客户端代理出去。
如果使用 Linux 物理机,可以用手机开魔法上网,同一局域网的 Linux 设置代理到手机,再代理出去。

我这里电脑用的 v2rayN,要允许局域网使用的话就要设置打开(如果是本机的虚拟机的就不是必要的)
file

手机用的 v2rayNG,因为不是本机而是局域网的,所以必须开启“允许来自局域网的连接”
file

代理设置

要设置代理就要知道代理服务器的 IP 和端口,即这里魔法上网客户端所在系统对于需要代理的 Linux 系统可访问的 IP 和端口
如果是在 Linux 虚拟机中(NAT 模式),想要获取主机 Windows 的 IP 可以打开终端执行

ip route

如果是同一局域网用手机给 Linux 代理,就要知道手机在局域网中的 IP,要么通过路由器管理获取,要么通过手机本机 WiFi 连接信息或者其它一些工具。

端口的话,可以看魔法上网客户端上面显示的或设置,比如这里安卓端 http 默认端口就是10809(看上一张图)

全终端起作用

在某个终端需要代理时就设置一下代理变量

export http_proxy=http://[ip]:[port]
export https_proxy=http://[ip]:[port]

比如 IP 是 192.168.1.141,端口是 10809 就执行

export http_proxy=http://192.168.1.141:10809
export https_proxy=http://192.168.1.141:10809

这种设置方法只在设置代理变量的终端起作用,另外开一个终端就不受影响。如果要开一个终端就自动设置,可以将执行的内容写到 ~/.bashrc (终端配置文件)的最后面

指定应用使用代理

前面的方法是对整个终端起作用,但是中间可能又夹杂着连接国内的服务,国内服务使用代理是没必要的而且可能速度更慢了

那么可以创建一个文件,比如 ~/proxy,写入下面内容(IP 和端口写自己的)

#!/usr/bin/env bash
ip=XXXXX
port=XXXXX
export http_proxy=http://$ip:$port
export https_proxy=http://$ip:$port
exec "$@"

然后给文件添加可执行权限

chmod a+x ~/proxy

比如我在 git 克隆一个项目时使用这个代理,就执行(前面加上 ~/proxy)

~/proxy git clone https://github.com/openwrt/openwrt.git --depth=1 --branch=openwrt-22.03