###1.场景需求:
有些公司喜欢把svn或者git,或者是内部测试服务器放在公司,一般来说,由于NAT的原因,这种访问是单向的,举个例子,我们可以访问百度的服务器,但是百度服务器是没法访问我们电脑的。由于只能通过公司内网访问,员工回家之后就无法访问了,安全是安全了,但是万一有个需求需要从公司外部访问呢?
对路由器比较熟悉的童鞋会说:“在路由器上作端口映射转发即可”。这个方案确实可以,但是有2个问题,首先,你得能控制路由器并且可以在上面做设置。其次,一般公司的宽带都没有固定ip,这意味着这个公网ip每隔10-20小时就会变动...
###2.场景假设:
>1.公司内部有一台服务器1,ip地址为: 192.168.1.125,只有公司内部同一网段的设备才能访问
2.公司外面有一台公网ip的服务器2,ip地址为: 45.32.127.32,所有人都可以访问
假如我们需要公司外部的人也能访问服务器1需要怎么做呢?解决方案就是采用SSH端口转发,命令如下:
```
ssh -fNR 8000:localhost:80 root@45.32.127.32
```
>这段命令的意思是把对服务器2的8000端口请求转发到服务器1的80端口,这样我们访问http://45.32.127.32:8000 就相当于访问 http://192.168.1.125:80. 当然你还可以转发其他端口,比如常见的3306, 22, 21等端口。
###3.总结:
上面所说的这种方式又被称为SSH端口远程转发,具体的命令细节这里不作过多解读,与之对应的还有一种方式称为本地转发,其命令如下:
```
ssh -fNR 8000:45.32.127.32:80 root@192.168.1.125
```
>这段命令的意思是把对本地8000端口的请求转发到45.32.127.32的80端口上面去,这时候访问 http://127.0.0.1:8000 就相当于访问 http://45.32.127.32:80 。举个例子,你们公司有2台服务器,它们之间可以互联,其中有一台服务器可以上网,但是另一台呢被防火墙挡着了,这时候通过这个命令就可以“FQ”了。
还有一种方式叫作动态转发,命令如下:
```
ssh -D 50000 root@45.32.127.32。
```
> 这种方式其实就是相当于socks代理,他会把本地的所有请求都转发到远程服务器上面,很实用哦,假如说你的那台服务器是在国外的话,你懂的!
最后,有一点需要说明的是,所有的流量都会走中间服务器过,这种端口转发其实就是一种代理,类似于VPN。其实利用SSH转发我们可以把放在家里的服务器开放给朋友,不过家庭宽带上传速度有限,不拿来商用还是可以滴,商用还是买个正规云服务器靠谱!
补充:
-
又发现一个错,本地转发的时候那个参数是 -fNL ,L = local,远程转发是 -fNR , R = remote
-
忘记一件重要的事情了,需要在转发的服务器ssh里面开启一个配置:GatewayPorts yes 在Linux系统里面这个配置文件一般在/etc/ssh/sshd_config目录