云服务器 ECS Linux 通过端口转发来访问内网服务

  • A+
所属分类:Linux
高性能企业级服务器首台5折

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

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

 

rinetd 配置方法


如果是 Ubuntu 系统,可以直接使用如下指令安装:

  1. 1
    <span class="pln">apt</span><span class="pun">-</span><span class="pln">get install rinetd </span><span class="pun">-</span><span class="pln">y </span>

下面介绍源代码安装配置方法:

  1. 下载解压 rinetd 软件包:
  1. 1
    <span class="pln">wget </span><a href="http://www.boutell.com/rinetd/http/rinetd.tar.gz&amp;&amp;tar"><span class="pln">http</span><span class="pun">://</span><span class="pln">www</span><span class="pun">.</span><span class="pln">boutell</span><span class="pun">.</span><span class="pln">com</span><span class="pun">/</span><span class="pln">rinetd</span><span class="pun">/</span><span class="pln">http</span><span class="pun">/</span><span class="pln">rinetd</span><span class="pun">.</span><span class="pln">tar</span><span class="pun">.</span><span class="pln">gz</span><span class="pun">&amp;&amp;</span><span class="pln">tar</span></a> <span class="pun">-</span><span class="pln">xvf rinetd</span><span class="pun">.</span><span class="pln">tar</span><span class="pun">.</span><span class="pln">gz</span><span class="pun">&amp;&amp;</span><span class="pln"><span class="hljs-built_in">cd</span> rinetd</span>
  1. 修改编译配置:
  1. 1
    <span class="pln">sed </span><span class="pun">-</span><span class="pln">i </span><span class="pun">‘</span><span class="pln">s</span><span class="pun">/</span><span class="lit">65536</span><span class="pun">/</span><span class="lit">65535</span><span class="pun">/</span><span class="pln">g</span><span class="pun">’</span><span class="pln"> rinetd</span><span class="pun">.</span><span class="pln">c</span><span class="com"><span class="hljs-comment"># 修改端口范围,否则会报错</span></span>
  1. 编译安装:
  1. 1
    <span class="pln">mkdir </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">man</span><span class="pun">&amp;&amp;</span><span class="pln">make</span><span class="pun">&amp;&amp;</span><span class="pln">make install</span>
  1. 创建配置文件:
  1. 1
    <span class="pln">cat </span><span class="pun">&gt;&gt;/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">rinetd</span><span class="pun">.</span><span class="pln">conf </span><span class="pun">&lt;&gt;/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">rc</span><span class="pun">.</span><span class="kwd">local</span>          <span class="com"><span class="hljs-comment"># allow 192.168.2.</span></span><em><span class="com"><span class="hljs-comment"># deny 192.168.1.</span></span></em><span class="com"><span class="hljs-comment"># bindadress bindport connectaddress connectport0.0.0.0 3306 example.rds.aliyuncs.com 3306logfile /var/log/rinetd.logendecho rinetd &gt;&gt;/etc/rc.local</span></span>
  1. 使用:

rinetd 启动后,就已经可以通过云服务器的 3306 端口连接到处于内网模式的 example rds 数据库了。除了这个场景,其它的内网端口转发配置也类似。不过,由于FTP 协议端口是随机的,所以无法通过此方法实现转发。

另外,配置文件中可以对某个 IP 或者 IP 段进行允许/拒绝,藉此提高内网端口的安全性。

SSH Tunnel 配置方法

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

其数据流向如下示意图:

1.png

前置条件

  • 客户 PC 终端可以 ssh 登录有公网的 ECS 服务器。
  • 有公网的 ECS 服务器可以通过内网访问其他内网 ECS 服务器。
  • 有公网的 ECS 服务器可以通过内网访问 RDS(ECS 的内网 IP 在 RDS 的白名单中)。

客户端配置

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

11.png

另外,在 SecureCRT 中这个功能叫做 端口转发 ,进行类似的配置后也可以实现同样的功能。12.png

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: