场景需求
大部分公司内部测试服务器是放在公司内网, 一般来说, 由于 NAT 的原因, 这种访问是单向的. 例如, 我们借助电脑, 手机登设备, 可以访问百度的服务器, 但是百度服务器是没法主动访问我们终端. 由于只能通过公司内网访问, 员工回家之后就无法访问了, 安全是安全了, 但是万一有个需求需要从公司外部访问呢?
对路由器比较熟悉的童鞋会说:"在路由器上作端口映射转发即可". 这个方案确实可以, 但是有 2 个问题, 首先, 你得能控制路由器并且可以在上面做设置. 其次, 一般公司的宽带都没有固定 ip, 这意味着这个公网 ip 每隔 10-20 小时就会变动.
场景介绍
1. 公司内部有一台服务器 A,ip 地址为: 192.168.2.112, 只有公司内部同一网段的设备才能访问
2. 在腾讯云上有一台公网 IP 的 CVM,ip 地址为: 119.28.143.101, 所有人都可以利用密钥登陆.
此时, 如果外部的人员需要访问服务器 A, 普通情况下由于公司网络出口使用 NAT,IT 也不会开放端口转发的权限, 是无法去访问的. 但是利用 SSH 端口转发, 就能轻松实现外部人员访问内部服务器的操作, 具体命令如下:
SSH -fNR 222:localhost:22 root@119.28.143.101
还有一点非常重要, 你需要在 119.28.143.101 这台服务器开启 SSH 一个配置(Linux 系统里面一般是在 / etc/SSH/sshd_config 文件):
GatewayPorts yes
这段命令的意思是把对 CVM 的 222 端口请求转发到服务器 A 的 22 端口, 这样我们 SSH -p 222 119.28.143.101 就相当于访问 SSH 192.168.2.112 22 端口, 当然你还可以转发其他端口, 比如常见的 3389, 22, 21 等端口.
在任意一台电脑 telnet 119.28.143.101 22 端口
本地转发和动态转发
上面所说的这种方式又被称为 SSH 端口远程转发, 与之对应的还有一种方式称为本地转发, 其命令如下:
SSH -fNL 8080:119.28.143.101:80 root@192.168.2.112
-f 要求 在执行命令前退至后台. 它用于当 准备询问口令或密语, 但是用户希望它在后台进行. 该选项隐含了 -n 选项. 在远端机器上启动 X11 程序的推荐手法就是类似于 SSH -f host xterm 的命令.
-N 不执行远程命令. 用于转发端口. (仅限协议第二版)
-L port:host:hostport 将本地机 (客户机) 的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport
上面命令是把对本地 8080 端口的请求转发到 119.28.143.101 的 80 端口上面去, 这时候访问 http://127.0.0.1:8080 就相当于访问 http://119.28.143.101:80 . 例如, 公司有 2 台服务器, 它们之间可以互联, 其中有一台服务器可以上网, 但是另一台呢被限制无法访问公网, 这时候通过这个命令就可以 "翻墙" 了.
还有一种方式叫作动态转发, 命令如下:
SSH -D 50000 root@119.28.143.101
这种方式其实就是相当于 socks 代理, 他会把本地的所有请求都转发到远程服务器上面, 很实用, 如果远程的的服务器在国外的话, 就可以实现国外代理访问.
远程内网 Windows 服务器
上面讲解如何通过 SSH 端口转发一台只有内网的 Linux 服务器, 下面会介绍如何给一台只有内网, 访问外网依靠 NAT 的 Windows 机器进行转发.
Windows 转发需要借助 PuTTY 工具, 该工具界面简单友好, 操作也很方便. 详细环境信息如下:
1.Windows 内网机器 A,IP 地址: 192.168.2.110, 该机器是通过 NAT 实现访问互联网.
2. 在腾讯云有一台具有公网 IP 的 Linux CVM,IP 地址: 119.29.14.248
在机器 A 中打开 PuTTY, 输入 CVM 公网的 IP 地址以及对应的端口.
输入 CVM 的公网地址以及端口
在 PuTTY 中的 Connection-SSH-Auth-Tunnels 中配置远程的端口和需要映射的本地 IP 和端口, 点击 Add 按钮添加到 PuTTY 配置里.
Tunnels 配置介绍
点击 open, 输入账号密码登录(CVM 服务器的账号和密码)
在 CVM 上查看监听, 可以看到已经有 8080 的监听
CVM 上看到已经有 8080 端口监听
如果需要借助 RDP 登录 Windows 服务器, 由于 Windows 无法登陆自己, 所以上述方法实现远程登录 Windows, 需要借助第三台服务器做内网的转发.
来源: https://www.qcloud.com/developer/article/1466643