Skip to content

Proxy

相信很多公司都有设置网络代理,而且需要密码认证,那么如果自带笔记本或是使用虚拟机,就需要对很多依赖网络的工具设置代理。

本文主要针对Linux系统,windows系统的代理设置相对单一些,通常设置好系统代理和浏览器代理即可。

shell

要让shell使用代理,可以通过cntlm先配置好代理,默认安装cntlm后的配置文件为/etc/cntlm.conf

Username    name
Domain      corp
Password    ********

Proxy       proxy_ip:port

Listen      3128

配置完后,执行下面的指令让代理生效

sudo service cntlm restart

然后编辑~/.bashrc或其它shell的配置文件,我使用的zsh,所以修改~/.zshrc,添加代理

export http_proxy="http://127.0.0.1:3128"
export https_proxy="http://127.0.0.1:3128"
export ftp_proxy="http://127.0.0.1:3128"

最后执行source ~/.zshrc,到此可以通过wget www.baidu.com验证代理是否可行。

大部分shell指令默认都会根据上面这几个参数去访问代理服务器,但是有些特殊的工具需要单独设置代理,包括apt,git,npm等,下面逐一介绍。

apt

apt 或者 apt-get等工具的代理可以通过以下方式完成,这里同样是基于cntlm工具完成,文件25apt这个文件名可以任意,路径对了即可。

$ sudo cat << EOF > /etc/apt/apt.conf.d/25apt
Acquire::http::proxy "http://127.0.0.1:3128/";
Acquire::https::proxy "http://127.0.0.1:3128/";
Acquire::ftp::proxy "http://127.0.0.1:3128/";
EOF
$ sudo apt update

如果使用的是其它代理工具,如SS,则将所有网络地址改成http://127.0.0.1:1080即可,前提是SS客户端配置的本地端口为1080.

git

https

# for http and https
git config --global http.proxy 'http://127.0.0.1:3128'
git config --global https.proxy 'http://127.0.0.1:3128'
# for git
git config --global core.gitProxy 'http://127.0.0.1:3128'

ssh

对于git操作,为了方便我们通常使用ssh协议,而不用https,这样可以省去每次输入用户名密码去push或是pull.这个可以参考文章github ssh proxy协议代理配置

1.配置一个proxy-wrapper脚本

$ cat > $HOME/bin/proxy-wrapper
#!/bin/zsh
nc -x 127.0.0.1:3128 -X connect $*
$ chmod +x $HOME/bin/proxy-wrapper

其中-X用于指定所用协议

  • -X4 - socks4
  • -X5 - socks5, 默认为该项
  • connect - https, 需SSL支持,默认经443端口

2.配置~/.ssh/config

Host github github.com
    Hostname github.com
    User    git
    ProxyCommand    $HOME/bin/proxy-wrapper %h %p

3.通过ssh git@github.com测试连接

这里需要说明的是,如果要使用https,那就需要ssl的支持,默认对应443端口,公司网络通常是禁用的,我尝试过,会提示安全问题:

nc: Proxy error: "HTTP/1.1 502 Proxy Error ( The specified Secure Sockets Layer (SSL) port is not allowed. Forefront TMG is not configured to allow SSL requests from this port. Most Web browsers use port 443 for SSL requests. )"nc: Proxy error: "HTTP/1.1 502 Proxy Error ( The specified Secure Sockets Layer (SSL) port is not allowed. Forefront TMG is not configured to allow SSL requests from this port. Most Web browsers use port 443 for SSL requests. )"

当然啦,如果有SS支持,就可以选择socks5协议,这样就没问题了。

npm

npm config set proxy http://127.0.0.1:3128
npm config set https-proxy http://127.0.0.1:3128
npm config set registry http://registry.npm.taobao.org

貌似cntlm不支持https,所以需要在设置npm代理时将镜像源地址改为http协议

浏览器

大部分浏览器可以使用系统代理,但是在ubuntu的系统代理设置选项中,我没找到设置用户名密码的选项,所以另辟蹊径。

以Chrome浏览器为例,安装Proxy插件SwitchyOmega, 添加情景模式proxy,然后添加代理

Chrome proxy

如果使用的是其它代理工具,比如Shadowsocks,由于SS客户端通常将代理端口映射到本地的1080端口,所以这种情况只需要在SwitchyOmega中选择sock5协议,ip设为127.0.0.1,端口设为1080即可。关于这部分的详细内容参考我的另一篇文章VPS+SS翻越GFW

putty

打开putty配置选项,选择"Connection->Proxy"

Proxy hostname中填入代理IP,如127.0.0.1,在Port中填入代理端口,如1080