ssh代理与端口转发


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代理。