0 前言
目前我使用 wsl 过程中有以下两个场景需要使用到代理:
- 场景一: 某些科学上网的场景, 比如 github 加速等
- 场景二: 公司内网机器需要通过公司提供的代理上网
针对场景一, 可以通过将代理设置为 clash 或者其他客户端提供的端口, 如使用 clash 记得打开设置中的允许局域网
针对场景二, 直接设置公司提供的代理地址即可
1 配置
wsl 中添加如下脚本, 实现常规的系统代理, git 仓库代理以及 apt 的代理
cat > ~/proxy
#!/bin/bash
# normal proxy
# 指定 url 的方式
# proxy_type="http"
# proxy_ip="proxy1.bj.petrochina"
# proxy_port="8080"
# 使用 windows 主机上运行的代理程序, 例如 clash
# wsl 中的地址是不固定的, 这里通过脚本获取, 每次启动 wsl 都可以实时更新
proxy_type="http"
proxy_ip=$(cat /etc/resolv.conf |grep "nameserver" |cut -f 2 -d " ")
proxy_port="7890"
proxy="${proxy_type}://${proxy_ip}:${proxy_port}"
# 系统全局代理
export ALL_PROXY="${proxy}"
export all_proxy="${proxy}"
export http_proxy="${proxy}"
export https_proxy="${proxy}"
# apt 代理
# 如果不加 sudo, 会导致用 sudo 执行 apt 等命令时无法识别 alias
alias sudo='sudo '
alias apt="apt -o Acquire::http::proxy=${proxy}"
alias apt-get="apt-get -o Acquire::http::proxy=${proxy}"
# git 的 http 或者 https 代理
git config --global http.https://github.com.proxy ${proxy}
git config --global https.https://github.com.proxy ${proxy}
# git 的 ssh 代理
cat > ~/.ssh/config <<- EOF
# git-bash 环境: 注意替换 connect.exe 的路径
# ProxyCommand "C:\\APP\\Git\\mingw64\\bin\\connect" -S ${proxy_ip}:${proxy_port} -a none %h %p
# linux 环境
# ProxyCommand nc -v -x ${proxy_ip}:${proxy_port} %h %p
Host github.com
User git
Port 22
Hostname github.com
ProxyCommand nc -v -x ${proxy_ip}:${proxy_port} %h %p
IdentityFile "/home/lvbibir/.ssh/id_rsa"
TCPKeepAlive yes
Host ssh.github.com
User git
Port 443
Hostname ssh.github.com
ProxyCommand nc -v -x ${proxy_ip}:${proxy_port} %h %p
IdentityFile "/home/lvbibir/.ssh/id_rsa"
TCPKeepAlive yes
EOF
加入环境变量, 每次启动 wsl 自动设置 proxy
cat >> ~/.bashrc <<- 'EOF'
source ${HOME}/proxy
EOF
source ~/.bashrc
2 docker 代理
修改 docker pull 等操作的代理可以通过 docker 的 daemon.json 文件或者 service 两种方式进行修改, 推荐使用第一种
- 修改
/etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://jc0srqak.mirror.aliyuncs.com",
"http://hub-mirror.c.163.com"
],
"proxies": {
"http-proxy": "http://proxy1.bj.petrochina:8080",
"https-proxy": "http://proxy1.bj.petrochina:8080",
"no-proxy": "localhost,127.0.0.0/8"
}
}
- 修改 docker service
sudo vim /lib/systemd/system/docker.service
# 在 [Service] 下添加如下三行
Environment=HTTP_PROXY=http://proxy1.bj.petrochina:8080
Environment=HTTPS_PROXY=http://proxy1.bj.petrochina:8080
Environment=NO_PROXY=localhost,127.0.0.1
上述两种方式任意一种修改完成后重启 docker 即可
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo docker info | grep proxy
以上