Linux 实例通过端口转发来访问内网服务

概述

通过端口映射的方式,通过具有公网的 ECS 实例访问用户名下其它未购买公网带宽的内网 ECS 实例上的服务。端口映射的方案有很多,比如 Linux 下的 SSH Tunnel、rinetd,Windows 下的 portmap 等,本文简要介绍 rinetd,和 ssh tunnel 的配置方法。

 

详细信息

提示:本文相关配置和说明仅用于示例和操作指引,阿里云不对相关操作结果及由此产生的问题负责。

 

rinetd 配置方法

安装 rinetd

  • 如果是 Ubuntu 系统,可以直接执行如下命令安装。

    apt-get install rinetd -y

  • 也可以按照如下介绍使用源代码安装和配置。

    • 执行如下命令,下载并解压 rinetd 软件包。

      wget http://www.boutell.com/rinetd/http/rinetd.tar.gz&&tar -xvf rinetd.tar.gz&&cd rinetd

    • 执行如下命令,修改编译配置。修改端口范围,否则会报错。

      sed -i ‘s/65536/65535/g’ rinetd.c

    • 执行如下命令,编译安装。

      mkdir /usr/man&&make&&make install

    • 执行如下命令,创建配置文件。

      cat >>/etc/rinetd.conf <>/etc/rc.local

      如下所示。

      allow 192.168.2._# deny 192.168.1._# bindadress bindport connectaddress connectport0.0.0.0 3306 example.rds.aliyuncs.com 3306logfile /var/log/rinetd.logendecho rinetd >>/etc/

 

使用 rinetd

rinetd 启动后,就已经可以通过云服务器的 3306 端口连接到处于内网模式的 example RDS 数据库了。除了这个场景,其它的内网端口转发配置也类似。不过,由于 FTP 协议端口是随机的,所以无法通过此方法实现转发。另外,配置文件中可以对某个 IP 或者 IP 段进行允许或拒绝,藉此提高内网端口的安全性。

 

SSH Tunnel 配置方法

通过 putty 和有公网 IP 的 ECS 之间建立 SSH 隧道,然后通过本地端口转发,实现在客户 PC 终端上对内网 ECS 和 RDS 的直接访问,为客户的远程管理提供了巨大的方便。其数据流向如下示意图。
null

 

前置条件

  • 客户 PC 终端可以 ssh 登录有公网的 ECS 服务器。

  • 有公网的 ECS 服务器可以通过内网访问其他内网 ECS 服务器。

  • 有公网的 ECS 服务器可以通过内网访问 RDS(ECS 的内网 IP 在 RDS 的白名单中)。

 

客户端配置

  1. 客户端使用 putty,填写有公网 ECS 的 IP 及 ssh 端口。
    null
  2. 设置 SSH Tunnel:Source Port 是 PC 本地监听的端口,**Destination ** 填写内网 ECS 服务器的内网地址及端口。然后单击 Add,就会生成一个端口转发记录,然后单击 **Open ** 会打开 SSH 连接。
    null
  3. 在弹出的窗口中输入正常 SSH 登录有公网 IP 的 ECS 服务器。
    null
  4. 这时在客户 PC 终端上使用netstat –na命令应该可以看到一个 127.0.0.1 的 22 端口的本地监听。
    null
  5. 通过连接这个本地端口就可以连接到内网的 ECS 服务器上。
    null
  6. 这个方法同样适用于 Windows 系统,为了不与客户 PC 终端的端口冲突,这里使用 33389 端口作为本地监听端口。
    null
    null
  7. 内网的 RDS 也可以实现。
    null
    null
  8. 可以在客户 PC 终端直接使用数据库客户端程序来连接 RDS 中的数据库,非常方便。
    null
  9. 另外,在 SecureCRT 中这个功能叫做 ** 端口转发 **,进行类似的配置后也可以实现同样的功能。
    null
  
    展开阅读全文