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

赞赏 2016-07-18

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


rinetd 配置方法

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

apt-get install rinetd -y

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

1. 下载解压 rinetd 软件包:

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

2. 修改编译配置: 

sed -i 's/65536/65535/g' rinetd.c# 修改端口范围,否则会报错

3. 编译安装:

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

4. 创建配置文件: 

cat >>/etc/rinetd.conf <>/etc/rc.local          
# allow 192.168.2.
# deny 192.168.1.
# bindadress bindport connectaddress connectport
0.0.0.0 3306 example.rds.aliyuncs.com 3306
logfile /var/log/rinetd.logend

echo rinetd >>/etc/rc.local

5. 使用:

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

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



SSH Tunnel 配置方法

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

其数据流向如下示意图: 
1.png

 

前置条件

  • 客户 PC 终端可以 ssh 登录有公网的服务器。
  • 有公网的服务器可以通过内网访问其他内网服务器。
  • 有公网的服务器可以通过内网访问 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.png


8.png


7. 内网的 RDS 也可以实现:


9.png


10.png


8. 可以在客户 PC 终端直接使用数据库客户端程序来连接 RDS 中的数据库,非常方便。


11.png


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


12.png

登陆后阅读全文
阅读 2104 赞赏 0 有用 1 没用 0 收藏 0 分享

   



0 条留言

linux分享的头像

linux分享

每个软件都有确定的用途

相关文章

Linux SSH 基于密钥交换的自动登录原理是怎样的?

安全组设置允许SSH登录到 Linux 实例

SSH 服务启动时出现如下错误:main process exited, code=exited

SSH 登录时出现如下错误:Permission denied, please try again

Linux SSH连接交互过程是怎样的?

启动SSH服务时出错:Bad configuration options,怎么解决?

Linux下SSH如何配置更安全? (改端口 禁root 限IP)

Linux 如何启动或禁止用户或 IP 通过 SSH 登录?

SSH 登录时出现如下错误:login: Module is unknown

SSH 登录时出现如下错误:pam_listfile(sshd:auth): Refused user root for

有料推荐

这世界欠我一个这样的老公!

高校学生模仿“世界名画”摆拍,可以说是戏精本精了

iPhone X 跌破发行价,苏宁200亿入股恒大 | 财经日日评

果然是高手!这次在日本,特朗普竹杠敲得不是一般狠

资深黄牛现身说法:iPhone X价格秒变不停,就像炒股一样

长一样的双胞胎也能识别?蚂蚁金服发布「眼纹识别」技术

苏联是怎么被阿富汗拖垮的?

美团或入局「分时租赁」共享汽车,王兴要大笔投入「泛出行」领域了? | 36氪独家

你或许被“一盘番茄炒蛋”刷屏了,但有人辛酸,有人质疑

iPhone X发售前夜,黄牛与苹果公司的不安

他的文章

我是如何执行 "rm -rf ~" 的

正态分布为什么常见?(财富的分布却不符合正态分布)

Linux下窗口管理器 xmonad 的使用教程

用披萨做比喻来解释 IaaS,PaaS,SaaS 的区别

如何制作CSR(证书私钥和证书请求文件)文件?

php RedisException with message read error on connection

Windows环境下ping丢包或不通时链路测试工具推荐

Linux下ping丢包或不通时链路测试工具推荐

链路测试结果分析说明及常见链路异常场景和测试报告

SSH 登录时出现如下错误:login: Module is unknown

手机扫一扫
分享文章