今天往 bitbucket.org push 时才发现 bitbucket 被 GFW 了。我的仓库为 Mercurial hg,hg 项目根目录下的 .hg/hgrc
配置文件中可指定 http_proxy,试了一下不支持 socks 代理(我的浏览器用它来翻墙),最终使用 tsocks 或 proxychains 实现翻墙访问 bitbucket.org 仓库。
使用 ssh 服务代理网络访问
创建本地 socks 代理的脚本 ssh_proxy.sh
#!/bin/bash n=`ps waux | grep 'bash .*/ssh_proxy.sh' | grep -v grep | wc -l` if [ $n -lt 3 ]; then while [ true ]; do n=`ps aux | grep 'ssh' | grep '7070' | grep -v grep | wc -l` if [ $n -lt 1 ]; then echo "start ssh connecting" ssh -qTnNf -D 7070 user@host fi echo "wait for next checking" sleep 30 done fi echo "ssh_proxy.sh already running"
请将 user@host 改为你的 vps 用户及主机,并配置为免输入密码。
启动 socks 代理脚本
nohup bash ./ssh_proxy.sh &
通过 ssh 隧道是最简单的方式,vps 一般都会开 ssh 服务,拿来即用。
使用 shadowsocks 服务代理网络访问
vps 上安装并启动 shadowsocks 服务器(ss-server),配置文件 /etc/shadowsocks.json
内容如下
{ "server":"0.0.0.0", "server_port":8989, "password":"7FdiirqD", "timeout":600, "method":"aes-256-cfb", "fast_open": false, "workers": 1 }
password
请自行进行修改。
pc 上安装并启动 shadowsocks 客户端(ss-local),配置文件 /etc/shadowsocks.json
内容如下
{ "server":"X.X.X.X", "server_port":8989, "local_port":7070, "password":"7FdiirqD", "timeout":600, "method":"aes-256-cfb", "fast_open": false, "workers": 1 }
server
请自行修改为真正的 shadowsocks 服务器外网 IP。
透明代理
firefox 可以配置为通过 socks 代理联网,但绝大多数应用是不支持的,而透明代理(Transparent Proxy)可以使这些应用也使用代理联网。
ss-redir
shadowsocks 自带的本地透明代理客户端,可以使整个系统都使用代理访问网络。
参考 man ss-redir (1): shadowsocks client as transparent proxy, libev port
tsocks
安装
yaourt -S tsocks
配置
/etc/tsocks.conf
# We can access 192.168.0.* directly local = 192.168.0.0/255.255.255.0 local = 10.0.0.0/255.0.0.0 # Otherwise we use the server server = 127.0.0.1 server_port = 7070
具体用法
man tsocks.conf
使用
让 hg 用上 socks 代理功能
tsocks hg push
tsocks 看起来很通用,应该也可以让 git 等进行 socks 代理访问。
proxychains
tsocks 不支持代理访问 https
$ tsocks curl https://www.baidu.com curl: (7) Failed to connect to www.baidu.com port 443: Connection refused
proxychains 支持代理访问 https
$ proxychains curl https://www.baidu.com [proxychains] config file found: /etc/proxychains.conf [proxychains] preloading /usr/lib/libproxychains4.so [proxychains] DLL init: proxychains-ng 4.11 [proxychains] Dynamic chain ... 127.0.0.1:7070 ... www.baidu.com:443 ... OK <html> <head> <script> location.replace(location.href.replace("https://","http://")); </script> </head> <body> <noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript> </body> </html>
proxychains 的安装配置请参考:用tsocks和proxychains代理Linux下所有软件 - 蜗牛图书馆
将 socks 代理转换为 http 代理
go get 不支持 proxychains(应该是 go 是静态链接的原因),可以使用 privoxy
将 socks 代理转换为 http 代理。
安装 privoxy
yaourt -S privoxy
修改 privoxy
配置文件 /etc/privoxy/config
,添加以下配置行
forward-socks5 / 127.0.0.1:7070 . # local network do not use proxy forward 192.168.*.*/ . forward 10.*.*.*/ . forward 127.*.*.*/ .
启用 privoxy
服务
sudo systemctl enable privoxy sudo systemctl start privoxy
通过 http 代理使用 go get
export http_proxy=http://127.0.0.1:8118 export https_proxy=http://127.0.0.1:8118 go get golang.org/x/net