Posted on 

如何让软件走代理

[toc]

Docker

Dockerfile 更改apt源

在Dockerfile中添加如下两句代码:

1
2
RUN  sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get clean

更新apt源的Dockerfile如下:

1
2
3
4
5
6
FROM ubuntu:latest
MAINTAINER itdream "itdream6@163.com"

RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get clean
RUN apt-get update

proxychains linux命令行代理

ProxyChains是Linux和其他Unix下的代理工具。 它可以使任何程序通过代理上网, 允许TCP和DNS通过代理隧道, 支持HTTP、 SOCKS4和SOCKS5类型的代理服务器, 并且可配置多个代理。 ProxyChains通过一个用户定义的代理列表强制连接指定的应用程序, 直接断开接收方和发送方的连接。

img

ProxyChains 是一个强制应用的 TCP 连接通过代理的工具,支持 Tor、HTTP、与 Socks 代理。与 sshuttle 不同的是,ProxyChains 只会将当前应用的 TCP 连接转发至代理,而非全局代理。

你可以从这里下载到源代码,编译后安装即可

1
2
3
4
git clone https://github.com/rofl0r/proxychains-ng
cd proxychains-ng
./configure
sudo make && make install

不过我在自己的Ubuntu16.06上可直接通过:

1
apt-get install proxychains

5s内安装完毕。

安装完毕之后需要设置代理配置:

ProxyChains 的配置文件位于 /etc/proxychains.conf ,打开后你需要在末尾添加你使用的代理。例如:

1
2
3
4
5
6
7
8
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
#socks4 127.0.0.1 9050

# example
socks5 127.0.0.1 8888

OK,基础的配置到这里就搞定了。除此之外,这个文件里还用一堆可选的配置供你调整,自己去看啦。

用法

ProxyChains 的使用方式非常简单,直接在应用程序前加上 proxychains4 即可。例如:

1
proxychains4 git clone https://github.com/rofl0r/proxychains-ng

有没有明显感觉到 clone 的速度变快了很多。当然,除此之外你可以在任何你想通过代理的应用上使用:

1
2
3
4
5
6
7
8
9
10
# 在 Ubuntu 上更新软件包
sudo proxychains4 apt-get update

# 安装 npm 依赖(国内慢得一B啊)
proxychains4 npm install

# 使用 docker(再也不用切换源了)
docker run helloworld

# 下面请读者自行发挥。。。。

也有例外啦。这样使用并没有任何效果:

1
2
3
4
5
6
7
8
9
10
proxychains4 ping google.com

[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/local/lib/libproxychains4.dylib
PING google.com (172.217.27.142): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
Request timeout for icmp_seq 4

因为 proxychains 只会代理 TCP 连接,而 ping 使用的是 ICMP。记住这一点即可。

真机测试:

比如测试自己在公网上的IP,我都是使用

1
curl cip.cc

response如下图:

img

这是直接使用公网IP得到的IP地址,*.98.*.127。

再使用proxychains测试(已编辑/etc/proxychains.conf配置文件,且代理可用)

img

效果很明显,可以看到IP已经更改。