A .正向的TCP端口转发代理

ssh -L 2000:121.43.198.241:80 121.43.198.241             #将自己的2000端口映射到远程的80端口。访问自己的 curl http://127.0.0.1:2000 就相当于访问121.43.198.241的80端口

ssh -L  10.10.10.10:2000:121.43.198.241:80 121.43.198.241          #访问 http://10.10.10.10:2000   就相当于访问121.43.198.241的80端口

B.使用 ssh -R 建立反向/远程TCP端口转发代理 

意思是:我能进来,那么你也能出去。

实际的应用场景如, 1. 家里的网络是动态拨号网络, 没有固定IP, 如果想在上班的时候控制家里的电脑怎么办呢? 如果公司有一台服务器是可以在家拨号过去访问的, 那么你可以在家里的电脑上建立和这台公司服务器的反向代理, 到公司后, 就可以连接这台服务器上的反向代理(监听)来连接家里的电脑了.

2. 有的客户可能不希望提供×××给你去访问他们的服务器, 但是又需要得到你的远程协助, 怎么办呢?

你可以提供一台服务器让客户主动来访问你的服务器, 客户建立这样的反向代理, 然后你通过这个反向代理来连接客户开放的端口如VNC桌面共享, 进行远程协助. (这种方法比QQ远程协助是更安全的, 因为客户和这台服务器之间的数据时加密的, QQ远程协助毕竟有一定的风险存在.)

例子1:

     a主机是内网192.168.1.104 ,但是通过网关可以ssh到b主机。

     b主机是外网10.10.10.10

     现在从外网要访问a主机内网的网页。

     步骤:a主机:ssh -R 10.10.10.10:2000:192.168.1.104:8090 10.10.10.10

b主机:vi /etc/ssh/sshd_config  修改 GatewayPorts yes ,这样netstat -antp|grep -i listen  就看到监听的是0.0.0.0:2000 而不是127.0.0.1:2000了

测试:

从外网访问 curl http://10.10.10.10:2000/a.html  就相当于在公司内网访问curl http://192.168.1.104:8090/a.html

例子2:

a:公网ip 10.10.10.10

b:公网ip 20.20.20.20

c:公网ip  30.30.30.30

他们都有防火墙,现在希望a   ssh到c  ;但是他们的防火墙都不允许各自ssh

于是,出现b ;             c可以单项ssh到b.  b不可以ssh到c【也就是c的防火墙不允许a ,b ssh;但是他自己可以ssh到b】

原理,既然c可以单项ssh到b; 能进到b,那也能从b到c ; a 也可以ssh到b ; 那么就借助b 连接到c

步骤:

c机器上:ssh -R 2000:c机器的ip:22       b机器ip     #ssh远程到b机器,并且开启b机器的2000端口转发到c机器的22端口【b机器 开启GatewayPorts yes】

测试:a机器:ssh 20.20.20.20 -p 2000