1、概念
ssh隧道大致可以分为3种,分别为本地端口转发,远程端口转发,动态端口转发,本文将让你彻底搞懂这3个转发的命令表达形式,让你能够灵活运用解决生活中的各种特殊场景。
如果你正在使用mobaxterm、xshell、secureCRT、putty这类工具,可直接可视化界面简单配置即可使用,若你没有使用工具,通过本教程可直接通过命令进行隧道转发。
2、应用场景
针对部分企业或者个人为了安全只允许ssh登录堡垒机或者防火墙允许的机器访问内部的一些服务。主要作用在于加密 SSH Client 端至 SSH Server 端之间的通讯数据,突破防火墙的限制完成一些之前无法建立的 TCP 连接。
例如:一个互联网用户需要访问公司内网服务器,该服务器不对外提供服务,只是对于管理需要,在防火墙上开了ssh映射端口用于管理内网服务器。对于内网服务器上其它服务的访问无法直接访问的。现有一些需求:
1、需要访问内网服务器的一个web服务;
2、通过内网服务器再访问内网的其他web服务;
3、需要挂内网端口代理进行使用,比如聊天工具使用的SOCK5代理流量交给内网的某个代理进行处理(自行脑补)。
4、本地的一个临时web服务需要通过vps临时让对外访问。
5、突破防火墙,达到内网穿透的效果。
3、本地端口转发
连接从客户端主机转发到SSH服务器主机,然后转发到目标主机端口。
语法:
ssh -g -N -L -f [本地端口]:[远程IP]:[远程端口] [ssh帐号]@[ssh服务IP] -p [ssh服务端口]
举个栗子:
ssh -CfNgL 9999:192.168.100.100:80 root@www.test.com -p 22
输入命令之后才会让你输入ssh的连接密码,上面的命令意思是,访问本机电脑的 http://本地IP:9999 可以直接访问到远程机器的 http://192.168.100.100:80所在的web服务。
参数说明:
- -g:开启网关,表示访问本地的所有IP地址都可以;
- -N:表示创建隧道以后不连接到 ssh服务端,连接之后界面会直接卡住,若你要建立之后并连接ssh服务端操作,可以直接取消本参数;
- -L:表示local,本地端口转发;
- -f:表示在后台运行,注意在后台运行只能通过杀进程的方式结束
- 9999:192.168.100.100:80:这个表示[本地端口8888]:[远程IP192.168.100.100]:[80];
- root@www.test.com -p 22:使用root用户连接 www.test.com 的ssh服务,ssh端口是22,若你不是22端口则需要修改;
上面命令实现了和 mobaxterm 一样的功能如下:
4、远程端口转发 (内网穿透)
将端口从服务器主机转发到客户端主机,然后转发到目标主机端口。
语法:
ssh -g -N -R -f [远程端口]:[目标机器IP]:[目标机器端口] [ssh帐号]@[ssh服务IP] -p [ssh服务端口]
举个栗子:
ssh -g -N -R -f 5707:192.168.164.174:3081 root@120.46.199.14 -p 22
输入命令之后才会让你输入ssh的连接密码,上面的命令意思是,访问ssh所在机器的5707端口,相当于访问了目标机器的 192.168.164.174:3081 所在的web服务。这里需要注意,默认ssh只会绑定端口在127.0.0.1换回地址上面,若需要绑定到所有 IP,需要在远程机器 sshd 配置文件中打开GatewayPorts:on。
参数说明:
-g:开启网关,表示访问本地的所有IP地址都可以;
-N:表示创建隧道以后不连接到 ssh服务端,连接之后界面会直接卡住,若你要建立之后并连接ssh服务端操作,可以直接取消本参数;
-R:表示remote,远程端口转发;
-f:表示在后台运行,注意在后台运行只能通过杀进程的方式结束 5707:192.168.164.174:3081:这个表示[远程端口5707]:[目标IP 192.168.164.174]:[3081]; root@120.46.199.14 -p 22:使用root用户连接 120.46.199.14的ssh服务,ssh端口是22,若你不是22端口则需要修改;
上面命令实现了和 mobaxterm 一样的功能如下:
访问 http://120.46.199.14:5707/ 相当于访问 http://192.168.161.174:3081
访问结果如下:
5、动态端口转发(SOCKS代理)
相当于启动了一个代理服务器
创建SOCKS代理服务器,该服务器允许跨多个端口进行通信。
无论是本地端口转发还是远程端口转发,都是将某固定主机及其端口映射到本地或远程转发端口上,也就是说,本地或远程转发端口和目标端口所代表的应用层协议是一对一的关系,若需要将一个聊天软件所有流量代理都交由ssh远程服务器进行中转的话,一个一个的映射软件所需要的端口就比较麻烦,那么我们就可以使用第三种方式动态端口转发,由ssh自动判断不同协议的请求作不同的处理。
语法:
ssh -g -N -D -f [本地监听端口] [ssh帐号]@[ssh服务IP] -p [ssh服务端口]
举个栗子:
ssh -g -N -D -f 8888 root@120.46.199.14 -p 22
输入命令之后才会让你输入ssh的连接密码,上面的命令意思是,在本地开启一个socks端口8888进行监听,只要代理这个端口的流量都会被转发到ssh远程服务器上进行通过。
在使用代理的时候需要客户端手动设置,比如QQ、微信、tg都有相应的位置设置代理,请大家自行探索更多好玩的。
上面命令实现了和 mobaxterm 一样的功能如下:
访问本机的 8888 端口,就代理就行访问
6、ssh设置socks5代理,curl代理下载及yum配置代理
curl -x socks5h://127.0.0.1:8888 http://bilibili.com/ -I
curl代理
测试 curl -x socks5h://127.0.0.1:38080 www.baidu.com/ -I
下载
curl -x socks5h://127.0.0.1:38080 -o linux.html www.linux.com
yum代理
在文件 /etc/yum.conf 的最后加入一行:
proxy=http://<ss5_username>:<ss5_password>@<ss5_ip>:<ss5_port>
请将 <ss5_username>
和 <ss5_password>
替换为您在 ss5 代理服务器上的账号和密码,将 <ss5_ip>
替换为 ss5 代理服务器的 IP 地址,将 <ss5_port>
替换为 ss5 代理服务器的端口号。
运行以下命令以使更改生效:
yum clean all
yum makecache
git配置socks5代理
git config --global http.proxy 'socks5://127.0.0.1:7070'
To disable the proxy, run command:
git config --global --unset http.proxy
// http:
git config [--global] http.proxy[protocol://][user[:password]@]proxyhost[:port]
// https:
git config [--global] https.proxy[protocol://][user[:password]@]proxyhost[:port]
配置示例
git config --global http.proxy 'socks5://eco:dm123456@10.9.26.22:1080'
全局代理
在CentOS系统上,为了实现更快速、更安全的网络访问,我们可以配置socks5代理。本文将向您介绍在CentOS上如何配置socks5代理的方法。
在终端中可以使用以下命令配置SOCKS5代理IP,假设您要使用的代理IP地址为192.168.0.1:1080,则可以在终端中输入以下命令:
export ALL_PROXY="socks5://192.168.0.1:1080"
也可以使用以下命令进行单个应用程序的代理IP设置:
firefox --proxy-server=socks5://192.168.0.1:1080
在全局配置文件中添加代理IP:
同样可以在/etc/profile文件或者/etc/bashrc文件中添加代理IP设置,例如:
export ALL_PROXY="socks5://192.168.0.1:1080"
保存之后,需要重新登录或重启当前终端才能生效。
针对yum包管理器的代理配置
可以在/etc/yum.conf文件中添加SOCKS5代理IP设置,
例如:
proxy=socks5://192.168.0.1:1080