ssh代理与端口转发
https://zhuanlan.zhihu.com/p/57630633
1、正向代理
参数 -L
l应该是表示local,再本地开监听端口,将收到的流量转发到绑定端口上
举例
ssh -L 0.0.0.0:1314:192.168.1.2:1314 root@192.168.1.2
再本地开1314端口,将收到的流量转发到root@192.168.1.2服务器可以访问的192.168.1.2:1314端口上
可知,只要是root@192.168.1.2能够访问的端口,都可以转发。
比如,本机无法访问192.168.1.3:1314,但是本机可以访问root@192.168.1.2,root@192.168.1.2可以访问192.168.1.3:1314,可以绑定端口:
ssh -L 0.0.0.0:1314:192.168.1.3:1314 root@192.168.1.2
这样本机的0.0.0.0:1314和本机无法访问的192.168.1.3:1314通过root@192.168.1.2作为桥梁绑定到一起。
2、反向代理
参数 -R
r应该是表示remote,再远程机器开监听端口,将收到的流量转发到绑定端口上
举例
ssh -R 192.168.1.2:1314:192.168.1.4:1314 root@192.168.1.2
在root@192.168.1.2上开1314端口,将收到的流量转发到本机可以访问的192.168.1.4:1314端口上
前面的是远程机器上要开的监听端口,后面是本机可访问的要暴露出去的端口
3、socks5代理
参数 -D
d应该是dynamic,动态。本机开监听端口,将收到的流量通过远程ssh程序发出。就是一个socket代理程序。
举例
ssh -D 0.0.0.0:1080 root@192.168.1.2
这时候,root@192.168.1.2就成了socket5代理服务器,本地ssh成了客户端,客户端监听的端口是1080
4、优化
ssh -CqTnN -L 0.0.0.0:PortA:HostC:PortC user@HostB
其中 -C
为压缩数据,-q
安静模式,-T
禁止远程分配终端,-n
关闭标准输入,-N
不执行远程命令。此外视需要还可以增加 -f
参数,把 ssh 放到后台运行。
5、socks5反向代理
比如想提供socks5代理的服务端没有公网IP,客户端有公网IP,客户端想通过服务端代理上网。
首先,服务端启动socks5代理服务
ssh -CqTnNf -D 127.0.0.1:1080 root@127.0.0.1
这是服务端可以通过本地的1080端口,代理上网,自己代理自己,没有意义。
但是下面将这个代理端口绑定到客户端
服务端启动反向代理
ssh -CqTnNf -R clientHost:1080:127.0.0.1:1080 root@clientHost
这样,客户端可以通过本地的1080端口访问到服务端的1080端口,进而访问到服务端提供的socks5代理。