1. 网络代理
《好好学Linux:Linux配置SNAT上网》一文中,我们了解到,通过SNAT的方式能够让局域网中所有主机都能访问外网。
而网络代理,也能让局域网中所有主机都能访问外网。并且,如果网络代理支持科学上网,那么所有使用这个代理的主机也可以科学上网。
本文我们就来学习一下Linux中常见的网络代理配置方法,参考文档:
2. 测试代理是否正常
测试代理是否正常的方法:
1 | curl -x http://proxy-server:port -I https://www.example.com |
已知网络代理地址为:http://192.168.56.1:7890
和 socks5://192.168.56.2:10808
测试示例:
1 | curl -x http://192.168.56.1:7890 -I https://www.google.com |
如果代理配置了密码:
1 | curl -x http://username:password@192.168.56.1:7890 -I https://www.google.com |
3. bash环境网络代理
bash环境网络代理设置,是适用于全局的,因为绝大部分软件都会从环境变量中读取数据,比如curl命令、yum命令、wget命令等等。
3.1. 临时配置
1 | export https_proxy=http://192.168.56.1:7890 http_proxy=http://192.168.56.1:7890 all_proxy=socks5://192.168.56.1:7891 ftp_proxy=http://192.168.56.1:7890 no_proxy=localhost,127.0.0.1,192.168.56.0/24 |
这里的no_proxy
需要注意,不同的软件对于它有不同的处理。最典型的例子:
example.com
:大部分软件都支持精确匹配和下一级域名匹配,例如还可以匹配subdomain.example.com
.example.com
:curl剥离前缀.
,对于example.com
不会使用代理;wget不会剥离前缀.
,对于example.com
会使用代理192.168.56.0/24
:只有Go和Ruby支持这种CIDR块
详情参考We need to talk: Can we standardize NO_PROXY?
PS:取消代理的方法如下
1 | unset http_proxy https_proxy all_proxy |
3.2. 永久生效
1、写入配置内容到.bashrc
文件中
1 | export https_proxy=http://192.168.56.1:7890 |
写到.bashrc
,无论是登录session还是非登录session,都可以使用这些变量,详情参考bash_profile和bashrc的区别。
2、使生效
1 | source .bashrc |
4. wget代理
编辑文件/etc/wgetrc
,添加内容:
1 | http_proxy = http://192.168.56.1:7890 |
注意:wget是不支持 socks5 代理的,如果只有 socks5 代理,建议使用 curl 代替 wget。
1 | wget https://example.com/test.zip |
5. yum代理
编辑文件/etc/yum.conf
,添加内容:
1 | proxy=http://192.168.56.1:7890 |
6. apt代理
6.1. 临时生效
方法一:
1 | export https_proxy=http://192.168.56.1:7890 http_proxy=http://192.168.56.1:7890 all_proxy=socks5://192.168.56.1:7891 |
方法二:
1 | apt-get -o Acquire::http::proxy="http://192.168.56.1:7890/" update |
6.2. 永久生效
创建文件 /etc/apt/apt.conf.d/proxy.conf
,添加内容:
1 | Acquire::http::Proxy "http://192.168.56.1:7890/"; |
7. 浏览器上网代理
以Firefox浏览器为例:
Edit -> Preferences -> Advanced -> Network
在Connection下点击Settings,manual proxy configuration里设置IP和PORT。
8. docker pull代理
1、创建docker配置目录
1 | mkdir /etc/systemd/system/docker.service.d |
2、添加代理配置
1 | vim /etc/systemd/system/docker.service.d/http-proxy.conf |
写入内容为:
1 | [Service] |
需要注意的是,20.10.18和更早的docker版本,NO_PROXY不支持CIDR,详情参考NO_PROXY does not support CIDR notation
3、重启docker
1 | systemctl daemon-reload |
4、查看docker代理
1 | systemctl show docker --property Environment |
PS:Docker还支持使用 daemon.json 文件配置代理,详情参考Daemon proxy configuration
9. docker build代理
docker build时,容器内需要使用pip下载依赖。
1 | docker build \ |
10. pip代理
执行pip命令时直接指定代理
1 | pip install xxx --proxy http://192.168.56.1:7890 |
11. git代理
git代理,一般不用单独配置,它会使用bash环境网络代理。
但是,如果bash环境网络代理使用的是squid,那么需要单独配置下git代理。
1 | git config --global http.proxy http://192.168.56.101:3128 |
不需要git代理时,可以取消。
1 | git config --global --unset http.proxy |