应用场景
常见的集群架构,一般都是只有少数对外开放公网入口,而集群内部通信都是采用内网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 |
这种方式仅在需要的时候使用,而不需要改变任何服务器的网络配置,非常好用。