Ubuntu下的代理配置

1. 软件选择:

在2022年,clash已经成为了主流的VPN工具,因此这篇笔记也主要推荐clash的软件,至于随着技术变革,也只有软件的变化,其余操作仍然维持不变的~

说到clash,在Linux下,Clash for windows就是一个最好用的软件,这个软件支持mac os,windows和Liinux。(尽管他的名字带有for windows,或许这个软件最初只是为windows准备的)

2. 代理配置:

Ubuntu系统配置代理,按照如下进行操作:设置 -> 网络 -> 网络代理(齿轮图标)-> 手动

随后,在HTTP代理HTTPS代理上填写IP: 127.0.0.1和port: 7890

这里IP127.0.0.1即可,至于端口,要看软件中选择监听的端口号。clash相关软件一般是7890

! 注意:不推荐在Ubuntu下使用socket代理,因为截至2022年,越来越多的网站开始使用websocket进行数据交互,根据实际体验,开启socket代理会导致此类网站连接异常(出现connection error的情况),比如grammarly的word插件就无法正常运行。
不过socket代理只有maclinux才需要考虑,windows并不存在(或者说我没有感知到)。

2.1 配置命令行代理:

1
2
3
4
# HTTP_PROXY 和 http_proxy 都行
export http_proxy=127.0.0.1:7890
export https_proxy=127.0.0.1:7890
export no_proxy="localhost,127.0.0.1,10.96.0.0/12,192.168.0.1/16,192.168.49.2"

当然更完整的是这个:

1
2
3
4
5
6
7
export proxy_ip=10.11.57.211
export http_proxy=http://$proxy_ip:7890
export https_proxy=http://$proxy_ip:7890
export HTTP_PROXY=http://$proxy_ip:7890
export HTTPS_PROXY=http://$proxy_ip:7890
export no_proxy=localhost,127.0.0.1,10.96.0.0/12,192.168.0.1/16,192.168.49.2
export NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,192.168.0.1/16,192.168.49.2

在命令行输入如下命令后,一般命令行中大部分程序会遵循此代理,然而事无绝对,因此后面会给出部分程序的代理设置方式。

在ubuntu较早版本,我记得git的代理是不经过http_proxy的, 需要这样设置

1
2
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy https://127.0.0.1:7890

但是在使用Ubuntu20.04和Ubuntu22.04时, 发现git会使用http_proxy中的代理了, 因此git就不单独讲了

Docker的代理则更为复杂, 因为在Dockerfile构建过程中, 环境变量会被构建出的容器自身覆盖(或者说本不存在覆盖,只是自立更生罢了), 而且容器与Host之间的网络映射和端口问题又蒙上一层纱, 因此Docker的代理设置会单独列出一节, 不过等日后我再次遇到这种场景时再仔细总结一下.

2.2 apt-get代理设置

有两种可选的方式:

  1. sudo vim /etc/apt/apt.conf
  2. /etc/apt/apt.conf.d/下创建一个单独的配置文件(推测该目录应该是APT的配置导入目录), 然后添加内容
1
2
3
Acquire::http::Proxy "http://yourproxyaddress:proxyport";
# 如果你的代理需要登陆, 那么将url改为:
# "http://username:password@yourproxyaddress:proxyport";

2.3 socks代理配置

对于某些应用程序是无法使用HTTP代理的,这时候,需要设置socket代理, Linux命令行并没有直接设置的方法,需要在系统设置里设置,如果用的软件是cfw,则设置为127.0.0.1:7890.但不是很推荐设置系统里的socks代理,只设置终端就够了.

1
2
# terminal
export all_proxy=socks5://127.0.0.1:7890

2.4 git ssh端口代理

这里还列出git的原因是, 有时候, 并不通过htps拉取和上传代码, 设置的是SSH端口的仓库链接, 这时候代理就完全没用了, 需要额外设置.

编辑~/.ssh/config, 然后基本应该没得问题了~ 就再不会因为连接超时报错:kex_exchange_identification: Connection closed by remote host fatal: Could not read from remote repository.

1
2
3
Host github.com
ProxyCommand nc -X connect -x 127.0.0.1:7890 %h %p
ServerAliveInterval 10

用Windows的同学就发现了,模仿上面的内容是没用的,上面只是为Linux和Mac os准备,windows用户需要这样设置:

注意: GIT_PATH和username请务必替换为自己的,不要把方框和变量名也照抄了

  • 安装好git,并记录好git的安装目录: 用变量GIT_PATH指代
  • 找到ssh的配置文件: c:\Users\[username]\.ssh\config
1
2
3
Host github.com
ProxyCommand "[GIT_PATH]\mingw64\bin\connect.exe" -S 127.0.0.1:7890 %h %p
ServerAliveInterval 10

2.5 Docker代理配置:

Docker在默认情况下不会继承环境变量中的http_proxy和https_proxy, 需要再额外设置:https://docs.docker.com/network/proxy/

由于Docker创建的是虚拟机,因此代理配置应该使用LAN下的ip!

2.5.1 修改配置文件方式: ~/.docker/config.json

每当创建容器时,都会从配置文件读取代理配置:(代理服务器别忘了换成自己的)

1
2
3
4
5
6
7
8
9
10
11
{
"proxies":
{
"default":
{
"httpProxy": "http://192.168.8.2:7890",
"httpsProxy": "http://192.168.8.2:7890",
"noProxy": "localhost,127.0.0.1/8,127.0.0.1,10.96.0.0/12,192.168.99.0/24,192.168.39.0/24,192.168.49.2,github.com"
}
}
}

对于k8s,官方有对应的proxy设置指南:https://minikube.sigs.k8s.io/docs/handbook/vpn_and_proxy/

1
set NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,192.168.59.0/24,192.168.49.0/24,192.168.39.0/24
1
2
# 事实上,minikube支持根据国家自动设置镜像
minikube start --image-mirror-country=cn

2.5.2 参数指定的方式:

VariableDockerfile exampledocker run example
HTTP_PROXYENV HTTP_PROXY="http://192.168.1.12:3128"--env HTTP_PROXY="http://192.168.1.12:3128"
HTTPS_PROXYENV HTTPS_PROXY="https://192.168.1.12:3128"--env HTTPS_PROXY="https://192.168.1.12:3128"
FTP_PROXYENV FTP_PROXY="ftp://192.168.1.12:3128"--env FTP_PROXY="ftp://192.168.1.12:3128"
NO_PROXYENV NO_PROXY="*.test.example.com,.example2.com"--env NO_PROXY="*.test.example.com,.example2.com"

2.5.3 在使用minukube的情况下:

1
minikube start --docker-env http_proxy=http://127.0.0.1:7890 --docker-env https_proxy=http://127.0.0.1:7890 --docker-env no_proxy=localhost,127.0.0.1,10.96.0.0/12,192.168.0.1/16

由于no_proxy很难涵盖所有服务,导致出现莫名奇妙的问题,因此推荐用registry

1
minikube start --image-mirror-country=cn --registry-mirror https://dockerhub.azk8s.cn

Ubuntu下的代理配置
https://www.torch-fan.site/2022/07/20/Ubuntu下的代理配置/
作者
Torch-Fan
发布于
2022年7月20日
更新于
2023年2月19日
许可协议