socks5 to http
sock5 轉 http 這里采用 privoxy 進行轉換
Mac: brew install privoxy
Ubuntu: apt-get -y install privoxy
安裝成功后,需要修改配置以指定 socks5 端口以及不代理的白名單,配置文件位置如下:
Mac: /usr/local/etc/privoxy/config
Ubuntu: /etc/privoxy/config
在修改之前請備份默認配置文件,這是個好習慣,備份后修改內容如下:
# 轉發地址
forward-socks5 / 127.0.0.1:1080 .
# 監聽地址
listen-address localhost:8118
# local network do not use proxy
forward 192.168.*.*/ .
forward 10.*.*.*/ .
forward 127.*.*.*/ .
其中 127.0.0.1:1080 為你的 socks5 ip 及 端口,localhost:8118 為你轉換后的 http 監聽地址和端口;配置完成后啟動 privoxy 即可,啟動命令如下:
Mac: brew services start privoxy
Ubuntu: systemctl start privoxy
Docker 加速拉取 gcr.io 鏡像
對於 docker 來說,terminal 下執行 docker pull 等命令實質上都是通過調用 docker daemon 操作的;而 docker daemon 是由 systemd 啟動的(就目前來講,別跟我掰什么 service start…);對於 docker daemon 來說,一旦它啟動以后就不會再接受加速設置,所以我們需要在 systemd 的 service 配置中配置它的加速。
目前 docker daemon 接受標准的終端加速設置(讀取 http_proxy、https_proxy),同時也支持 socks5 加速;為了保證配置清晰方便修改,這里采用創建單獨配置文件的方式來配置 daemon 的 socks5 加速,配置腳本如下(Ubuntu、CentOS):
#!/bin/bash
set-e
OS_TYPE=$1
PROXY_ADDRESS=$2
if["${PROXY_ADDRESS}"==""]; then
echo-e"\033[31mError: PROXY_ADDRESS is blank!\033[0m"
echo-e"\033[32mUse: sudo $0 centos|ubuntu 1.2.3.4:1080\033[0m"
exit 1
fi
if["${OS_TYPE}"==""];then
echo-e"\033[31mError: OS_TYPE is blank!\033[0m"
echo-e"\033[32mUse: sudo $0 centos|ubuntu\033[0m"
exit 1
elif["${OS_TYPE}"=="centos"];then
mkdir /etc/systemd/system/docker.service.d ||true
tee /etc/systemd/system/docker.service.d/socks5-proxy.conf <<-EOF
[Service]
Environment="ALL_PROXY=socks5://${PROXY_ADDRESS}"
EOF
elif["${OS_TYPE}"=="ubuntu"];then
mkdir /lib/systemd/system/docker.service.d ||true
tee /lib/systemd/system/docker.service.d/socks5-proxy.conf <<-EOF
[Service]
Environment="ALL_PROXY=socks5://${PROXY_ADDRESS}"
EOF
fi
systemctl daemon-reload
systemctl restart docker
systemctl show docker --property Environment
將該腳本內容保存為 docker_proxy.sh,終端執行 bash docker_proxy.sh ubuntu 1.2.3.4:1080 即可(自行替換 socks5 地址);腳本實際上很簡單,就是創建一個與 docker.service 文件同級的 docker.service.d 目錄,然后在里面寫入一個 socks5-proxy.conf,配置內容只有兩行:
[Service]
Environment="ALL_PROXY=socks5://1.2.3.4:1080
這樣 systemd 會自動讀取,只需要 reload 一下,然后 restart docker daemon 即可,此后 docker 就可以通過加速端口直接 pull gcr.io 的鏡像;注意: 配置加速后,docker 將無法 pull 私服鏡像(一般私服都是內網 DNS 解析),但是不會影響容器啟動以及啟動后的容器中的網絡
Terminal 加速
腳本方式
對於終端下的應用程序,百分之九十的程序都會識別 http_proxy 和 https_proxy 兩個變量;所以終端加速最簡單的方式就是在執行命令前聲明這兩個變量即可,為了方便起見也可以寫個小腳本,示例如下:
sudo tee /usr/local/bin/proxy <<-EOF
#!/bin/bash
http_proxy=http://1.2.3.4:8118 https_proxy=http://1.2.3.4:8118 \$*
EOF
sudo chmod +x /usr/local/bin/proxy
將上面的地址自行更換成你的 http 加速地址后,終端運行 proxy curl ip.cn 即可測試加速效果
proxychains-ng
proxychains-ng 是一個終端下的工具,它可以 hook libc 下的網絡相關方法實現加速效果;目前支持后端為 http(s)/socks5(4a),前段協議僅支持對 TCP 加速;
Mac 下安裝方式:
brew install proxychains-ng
Ubuntu 等平台下需要手動編譯安裝:
# 安裝編譯依賴
apt-get -yinstall gcc make git
# 下載源碼
git clone https://github.com/rofl0r/proxychains-ng.git
# 編譯安裝
cd /proxychains-ng
./configure --prefix=/usr --sysconfdir=/etc
sudo make install
sudo make install-config
安裝完成后編輯配置使用即可,Mac 下配置位於 /usr/local/etc/proxychains.conf,Ubuntu 下配置位於 /etc/proxychains.conf;配置修改如下:
# 主要修改 [ProxyList] 下的加速地址
[ProxyList]
socks5 1.2.3.4 1080
然后命令行使用 proxychains4 curl ip.cn 測試即可
Git 加速
目前 Git 的協議大致上只有三種 https、ssh 和 git,對於使用 https 方式進行 clone 和 push 操作時,可以使用第五部分 Terminal 加速方案即可實現對 Git 的加速;對於 ssh、git 協議,實際上都在調用 ssh 協議相關進行通訊(具體細節請 Google,這里的描述可能不精准),此時同樣可以使用 proxychains-ng 進行加速,不過需要注意 proxychains-ng 要自行編譯安裝,同時 ./configure 增加 --fat-binary 選項,具體參考 GitHub Issue;ssh、git 由於都在調用 ssh 協議進行通訊,所以實際上還可以通過設置 ssh 的 ProxyCommand 來實現,具體操作如下:
sudo tee /usr/local/bin/proxy-wrapper <<-EOF
#!/bin/bash
nc -x1.2.3.4:1080 -X5 \$*
#connect-proxy -S 1.2.3.4:1080 \$*
EOF
sudo chmod +x /usr/local/bin/proxy-wrapper
sudo tee ~/.ssh/config <<-EOF
Host github.com
ProxyCommand /usr/local/bin/proxy-wrapper '%h %p'
EOF
需要注意: nc 命令是 netcat-openbsd 版本,Mac 下默認提供,Ubuntu 下需要使用 apt-get install -y netcat-openbsd 安裝;CentOS 沒有 netcat-openbsd,需要安裝 EPEL 源,然后安裝 connect-proxy 包,使用 connect-proxy 命令替代