Jusene's Blog

proxychain-ng+ssh快速搭建出透明代理

字数统计: 841阅读时长: 3 min
2017/03/03 Share

应用场景

常见的集群架构,一般都是只有少数对外开放公网入口,而集群内部通信都是采用内网ip,这是为了安全,也是为了减少流量费用,比如阿里云常见的部署方式就是这种常见的部署架构。但是内部服务器更新升级的过程就会变得异常麻烦,所以本文利用ssh+proxychain-ng快速搭建出一个能够利用公网入口机器做代理的透明代理来供内部服务器上网。

实现思路

通过proxychain-ng将内网服务器的请求给ssh建立的SOCKE服务,然后通过公网的服务器将请求发送出去,并通过公网服务器接受转发请求的资源给内部服务器,无需要改网络结构。

服务器环境说明

  • 公网服务器:10.211.55.24
  • 内部服务器:10.211.55.36

通过ssh创建SOCKS服务

我在前面的ssh端口转发代理中详细说明动态转发,这里就需要使用ssh的动态转发来创建SOCKS。

内部服务器

1
#ssh -Nf -D 20001 10.211.55.24

我们来查看下动态转发是否创建完成

在内部服务器上查看,可以看见一个20001的监听端口:

1
[root@node1 bin]# netstat -ntlp
2
Active Internet connections (only servers)
3
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
4
tcp        0      0 127.0.0.1:20001             0.0.0.0:*                   LISTEN      9833/ssh            
5
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1578/mysqld         
6
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1428/sshd           
7
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      1384/cupsd          
8
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1673/master         
9
tcp        0      0 ::1:20001                   :::*                        LISTEN      9833/ssh            
10
tcp        0      0 :::22                       :::*                        LISTEN      1428/sshd           
11
tcp        0      0 ::1:631                     :::*                        LISTEN      1384/cupsd          
12
tcp        0      0 ::1:25                      :::*                        LISTEN      1673/master

安装proxychain-ng

1
[root@node1 ~]# git clone https://github.com/rofl0r/proxychains-ng.git
2
[root@node1 ~]# cd proxychains-ng/
3
[root@node1 proxychains-ng]# ls
4
AUTHORS  configure  COPYING  Makefile  README  src  tests  TODO  tools  VERSION
5
[root@node1 proxychains-ng]# ./configure --prefix=/usr/local/proxychain --sysconfdir=/etc
6
[root@node1 proxychains-ng]# make 
7
[root@node1 proxychains-ng]# make install
8
[root@node1 proxychains-ng]# make install-config

proxychains-ng支持多种代理模式,默认strict_chain

  • strict_chain:严格模式,严格按照代理列表顺序使用代理,所有代理必须可用
  • dynamic_chain:动态模式,按照代理列表顺序自动寻取可用代理
  • round_robin_chain:轮询模式,自动跳过不可用的代理
  • random_chain:随机模式,随机使用代理

proxychain-ng的配置文件也很简单

1
[root@node1 bin]# grep -v -E '^$|^#' /etc/proxychains.conf 
2
strict_chain
3
proxy_dns 
4
remote_dns_subnet 224
5
tcp_read_time_out 15000
6
tcp_connect_time_out 8000
7
[ProxyList]
8
socks5 127.0.0.1 20001

测试使用proxychain-ng

通过proxychain4执行命令,即可通过公网服务器访问外网:

1
[root@node1 bin]# ./proxychains4 curl -I www.baidu.com
2
[proxychains] config file found: /etc/proxychains.conf
3
[proxychains] preloading /usr/local/proxychain/lib/libproxychains4.so
4
[proxychains] DLL init: proxychains-ng 4.12
5
[proxychains] Strict chain  ...  127.0.0.1:20001  ...  www.baidu.com:80  ...  OK
6
HTTP/1.1 200 OK
7
Server: bfe/1.0.8.18
8
Date: Fri, 03 Mar 2017 07:46:58 GMT
9
Content-Type: text/html
10
Content-Length: 277
11
Last-Modified: Mon, 13 Jun 2016 02:50:45 GMT
12
Connection: Keep-Alive
13
ETag: "575e1f85-115"
14
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
15
Pragma: no-cache
16
Accept-Ranges: bytes

这种方式仅在需要的时候使用,而不需要改变任何服务器的网络配置,非常好用。

CATALOG
  1. 1. 应用场景
  2. 2. 实现思路
  3. 3. 服务器环境说明
    1. 3.1. 通过ssh创建SOCKS服务
    2. 3.2. 安装proxychain-ng
    3. 3.3. 测试使用proxychain-ng