在天朝要做一名合格的程序员,翻墙上Google是必备技能。我之前有写过一篇文章来教大家搭建自己的翻墙服务器,里面关于VPS推荐的部分已经过时了,但是操作步骤还是有用的。
但是等你把一切都配置好之后你会发现似乎只有浏览器可以正常访问被屏蔽的网站,常用的一些服务比如git、ssh、npm、terminal、telegram等不是连接出错就是慢的要死,其实这些服务的数据其实根本没有经过我们的代理服务器,所以还是和原来一样。这是为什么呢?
当我们启动了Shadowsocks客户端的时候,就设置了几个系统级别的环境变量比如http_proxy
,浏览器在发送http请求的时候就会去检测这个环境变量是否存在,如果存在就会把请求数据包通过代理地址发送给本地的代理服务器,本地的代理服务器再把数据包发送给远程的代理服务器,然后再转发给真正的目的服务器。如下图所示:
虽说这些个环境变量是全局的,但却不是强制的,应用程序可以决定是否使用这些个环境变量。所以实际情况是,除了浏览器以外的大多数应用都默认不会使用这些个环境变量。虽然默认不会使用代理环境变量,但是一般他们都会提供命令或者界面来进行代理的配置,我们后面会详细说一说常用的一些服务和应用配置代理的方式。
查看本地端口
设置代理之前我们首先得知道本地代理服务监听的地址和端口。以ShadowsocksX-NG为例,在它的偏好设置面板的高级选项可以看到本地socks5监听地址和端口:
我们可以看到socks5的地址和端口是socks5://127.0.0.1:1086
。同样的,在HTTP选项可以看到HTTP代理地址和端口是http://127.0.0.1:1087
设置代理
Git
其实给git设置代理的方法我之前已经写过一篇文章了,这里再说一下。
设置http代理
1
$ git config --global http.proxy socks5://127.0.0.1:1086
取消代理设置
1
$ git config --global --unset http.proxy
对特定网址设置代理
1
2
$ git config --global http.<要设置代理的URL>.proxy socks5://127.0.0.1:1086
$ git config --global http.https://github.com.proxy socks5://127.0.0.1:1086
我们知道git除了支持http协议,还支持ssh协议。ssh协议代理配置有些不一样。
SSH
如果是单次ssh登录的时候使用代理,就可以用下面的命令:
1
$ ssh username@host -o ProxyCommand='nc -X 5 -x 127.0.0.1:1086 %h %p'
-X表示代理协议,5就表示的是socks5,所以端口号我们使用1086。
当我们在git中使用ssh协议的时候,没办法采用上面的方法,但是可以通过修改ssh全局配置文件来达到目的。
首先打开文件:
1
$ vi ~/.ssh/config
然后把下面的内容添加进去并保存:
1
2
Host *
ProxyCommand=nc -X 5 -x localhost:1086 %h %p
Host表示要访问地址,可以为不同的host配置不同的代理。这里用星号*表示不管是什么host都走这个代理。
CocoaPods
一般来说你设置了Git的代理之后,使用pod install
、pod update
命令都会没有问题,但是使用pod repo update
的时候就会报如下的错误:
$ pod repo update master --verbose
Updating spec repo `master`
[!] Failed to connect to GitHub to update the CocoaPods/Specs specs repo - Please check if you are offline, or that GitHub is down
/Library/Ruby/Gems/2.3.0/gems/cocoapods-core-1.6.0.beta.2/lib/cocoapods-core/github.rb:105:in `rescue in modified_since_commit'
...
打开/Library/Ruby/Gems/2.3.0/gems/cocoapods-core-1.6.0.beta.2/lib/cocoapods-core/github.rb
这个文件查看CocoaPods的源码之后就可以知道pod repo update
命令使用git拉取Spec之前会请求https://api.github.com,因此如果你无法直接访问github的话,就卡在这一步无法更新repo了,解决办法就是按照下面的方法先设置终端Terminal的代理,然后在使用pod repo update
。
Terminal
其实我们上面说的不管是git还是npm,大多数情况下都是在终端里使用的,我们可以通过直接给终端设置代理来让这些在终端中进行的操作走代理。
在终端中运行下面的命令就可以给终端设置临时代理:
1
$ export http_proxy=http://127.0.0.1:1087;export https_proxy=http://127.0.0.1:1087;
同样的,要让终端下一次打开也能使用代理就需要修改配置文件。
1
$ vi ~/.bash_profile
然后在其中加入下面两行内容并保存:
1
2
export http_proxy=http://127.0.0.1:1087
export https_proxy=http://127.0.0.1:1087
然后在运行下面的命令来让配置生效:
1
$ source ~/.bash_profile
NPM
由于npm的默认源https://registry.npmjs.org/
在天朝访问很慢,所以很多人都建议使用淘宝的镜像源https://registry.npm.taobao.org/
,只需要使用下面的一行命令就可以完成:
1
$ npm config set registry https://registry.npm.taobao.org/
这种方式有时候还是会出现一些问题,我们也可以通过下面的命令给npm设置代理来加快访问速度:
1
$ npm config set proxy=http://127.0.0.1:1087
取消代理
1
$ npm config delete proxy
其实上面这两个命令其实都是在修改~/.npmrc
文件,你也可以直接打开它进行查看和修改。
Telegram
相对于我们上面提到的这些程序,telegram不能通过命令来设置代理,而是通过用户界面来设置。
当你第一次打开telegram并输入手机号进行登录的时候,由于还没有设置代理,它发起的登录请求肯定会失败。当请求失败之后会询问你要不是使用代理,我们点击Use Proxy
-> Add Proxy
来添加一个socks5代理,然后填入地址和端口,用户名和密码留空就好了,如下图所示: