工作环境中,不同网络之间不能互相访问,需要先登录跳板机,再由跳板机去访问其他机器。
如果想像局域网那样去访问另一个网络的任意节点,则需要借助全局代理来进行流量转发。
1,全局代理
Windows系统可以使用Xshell和Proxifier来搭建全局代理,那Linux系统下,要怎样搭建全局代理呢?
首先,搭建全局代理,需要三样东西:
1)代理服务器
2)转发器
3)转发规则
Windows系统可以用Xshell来搭建一个sock5的代理服务器,然后用Proxifier充当转发器和转发规则,使用起来非常方便。
Linux系统可以用ssh命令代替Xshell来搭建socks5代理服务器,然后用 redsocks + iptables 来代替Proxifier做全局代理。
2,Linux方案
本方案场景如下图所示,本地机器(Linux)的浏览器需要访问 172.16.1.4:8080
步骤1:ssh搭建socks5代理服务器
可能在很多人印象中,ssh命令只是用来登录远程机器的,其实不是,ssh的本质是在本地和远程机器之间建立一个网络隧道,我们平时只是用这条隧道来登录服务器,其实它还有很多作用,例如正向代理、反向代理、socks5代理等。
执行以下命令
ssh -D :6000 -Ngf 用户名@123.45.67.89
相关参数说明:
- -D:表示搭建socks5代理
- -N:表示静默连接(即建立了连接,但看不到具体的会话)
- -f:表示放到后台运行(一般N和f是一起用)
- -g:加了g表示允许其他机器使用这个socks5代理,否则只有本机器可以使用
- :6000:表示这个socks5代理服务的监听端口
步骤2:配置redsocks全局代理
Debian 系列可以执行如下命令安装
sudo apt-get install redsocks -y
Redhat 系列可以执行如下命令安装
sudo yum install redsocks -y
或者使用源码安装 github.com/darkk/redsocks
安装完成后,配置 /etc/redsocks/redsocks.conf
base {
log_debug = off;
log_info = on;
log = "file:/tmp/reddi.log";
daemon = on;
redirector = iptables;
}
redsocks {
# 请求来源
local_ip = 127.0.0.1;
local_port = 12345;
# 转发目标地址
ip = 127.0.0.1;
port = 6000;
type = socks5;
}
这个配置的意思是:将来自127.0.0.1:12345的数据包全部转发到目标地址,即步骤1中的socks5代理服务器
配置完成后重启redsocks
sudo systemctl restart redsocks
步骤3:iptables配置转发规则
配置思路是,将要访问 172.16.1.0/24 的数据包全部转发到 步骤2的请求来源地址(127.0.0.1:12345)
sudo iptables -A OUTPUT -p tcp -m tcp -d 172.16.1.0/24 -j REDIRECT --to-ports 12345 # 符合条件的转发
sudo iptables -A OUTPUT -p tcp -m tcp -j RETURN # 其他的放行
到这里,全局代理服务器就搭建好了,
打开本地浏览器,就能直接访问172.16.1.4:8080 了。