使用proxychain去代理tcp流量


概述

问题起因是git clone 代码的时候,发现会卡住拉取不下来

因此边使用telnet工具去测试一下端口是否是通的

telnet github.com 22

如果端口通的,应该会如下图展示
alt text
否则端口是不通的。

对于这种情况,我们一般是需要通过代理服务器中转流量。

Linux的http代理

linux原生就支持通过https_proxy, http_proxy两个环境变量,去分别设置http/https的代理。

简单回顾下用法示例:

# 设置环境变量,会话内的所有http流量都走http://localhost:7890转发
export http_proxy=http://localhost:7890
# 设置环境变量,会话内的所有https流量都走http://localhost:7890转发
export https_proxy=http://localhost:7891

如果需要鉴权,也可以在代理地址用加入用户名和密码

# 设置环境变量,会话内的所有http流量都走http://localhost:7890转发
export http_proxy=http://user:pass@localhost:7890
# 设置环境变量,会话内的所有https流量都走http://localhost:7890转发
export https_proxy=http://user:pass@localhost:7891

还可以添加代理规则的豁免,比如对某些内网IP和域名进行跳过

export NO_PROXY=127.0.0.1,aaa.com

上述命令会对当前会话起的程序生效,如果需要一登录就生效,需要添加到~/.bashrc文件末尾去

此外注意,对于一些后台服务,比如docker之类的,需要转而去systemctl service配置中,去设置Env,来使环境变量能够传递到进程中去的。

但是对于其他TCP协议,就不能用这种方式了。

proxychains是用于解决TCP流量的代理问题的。

安装

以Ubuntu 24.04 为例

sudo apt-get install proxychains

对于发行版包中没有的, 可以自行编译安装

git clone https://github.com/haad/proxychains
./configure --prefix=/usr/local # prefix按需设置为一个有权限的目录
make
sudo make install

用法

基本用法如下:

proxychains <command>

在使用之前,需要先添加配置文件,支持多个配置文件配置优先级,具体如https://github.com/haad/proxychains?tab=readme-ov-file#configuration 所示

比如我有一个http的代理127.0.0.1:7890, 可以这样修改配置(/etc/proxychains.conf):

## 其他部分不变
[ProxyList]
http 127.0.0.1 7890

然后便可以愉快的去拉取github仓库了

proxychains git clone https://github.com/deepwzh/deepwzh

alt text


Author: deepwzh
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source deepwzh !
  TOC