首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >rinetd实践:跨网段访问内网MySQL数据库的轻量实现

rinetd实践:跨网段访问内网MySQL数据库的轻量实现

作者头像
俊才
发布2026-03-31 12:24:58
发布2026-03-31 12:24:58
810
举报
文章被收录于专栏:数据库干货铺数据库干货铺

做后端、运维的同学,可能会遇到这样的场景:

原先在云上创建的数据库和应用

需要在自建机房加节点

但是有个问题,应用程序是很多年前编译的,配置写在代码里(而不是配置文件),而且用的数据库的地址是阿里云的ECS服务器的内网地址。此时有自建机房的需求,就出现一个问题:自建机房只能访问公网IP,而不能直接访问ECS的内网地址。虽然有其他方式处理,本次优先介绍成本低的一种邪修的方式:不用复杂的网关配置,不用重量级的代理工具,用一种轻量、高效、易配置的“网络桥梁”rinetd,来解决跨机房(网段)访问难题。

一、安装及配置rinetd

1. 编译安装

以CentOS为例,因rinetd无需复杂依赖,直接通过源码安装即可,步骤如下:

代码语言:javascript
复制
# 1. 创建安装目录,安装依赖
mkdir /rinetd && cd /rinetd
yum -y install gcc gcc-c++ make automake
# 2. 下载rinetd源码包(若链接失效,可自行搜索最新版本)
wget https://github.com/samhocevar/rinetd/releases/download/v0.70/rinetd-0.70.tar.gz
# 3. 解压、编译、安装
tar xfv rinetd-0.70.tar.gz
cd rinetd-0.70/
./bootstrap
./configure
make && make install

Ubuntu系统可直接用命令

代码语言:javascript
复制
sudo apt update && sudo apt install -y rinetd

快速安装,更便捷。

2. 配置转发规则

rinetd的配置文件默认路径是/etc/rinetd.conf,配置格式极其简单,一行就是一条转发规则,格式为:

代码语言:javascript
复制
源IP 源端口 目标IP 目标端口

结合我们的场景,需要配置自建机房应用服务器上转发3307端口的请求,将其转发到目标数据库的3307端口,此时的目标数据库地址就可以配置公网IP,配置如下:

代码语言:javascript
复制
[root@vbox ~]# vim /etc/rinetd.conf 

0.0.0.0 3307 120.xx.xx.178 3307

规则说明如下:

  • 0.0.0.0:表示转发机监听所有可用的本地IP(也可指定具体IP,如192.168.1.200)
  • 3307:转发机的监听端口(与db的端口一致)
  • 120.xx.xx.178 :目标IP,即db的内网IP
  • 3307:目标端口,即db1的MySQL端口

3. 启动rinetd

可以配置成服务进行启动,或者直接启动

代码语言:javascript
复制
[root@vbox rinetd-0.70]# /usr/local/sbin/rinetd -c /etc/rinetd.conf
[root@vbox rinetd-0.70]# ss -lntp|grep 3307
LISTEN     0      128          *:3307                     *:*                   users:(("rinetd",pid=3057,fd=4))

4. 配置回环地址

此时其实还不能访问:

因此还需要加个回环地址(为了不影响内网其他机器的访问)

代码语言:javascript
复制
[root@vbox ~]# ip addr add   172.16.38.45/32 dev lo

再次测试(注意云服务器的白名单设置):

此时便已经可以访问了。

二、rinetd的更多实用场景

除了app访问数据库,rinetd还有很多实用场景,覆盖日常运维、业务部署的多个需求,尤其适合简单的端口转发场景:

1. 内网服务对外暴露(谨慎使用)

若内网有一台Web服务器(例如192.168.2.100:80),想让外网用户访问,可通过rinetd将转发机的80端口,转发到内网Web服务器的80端口,外网用户访问转发机的公网IP,就能间接访问内网服务。

注意:对外暴露内网服务时,建议限制访问来源IP,避免安全风险。

2. 服务器主备切换(快速容错)

当db1(主数据库)出现故障时,可快速修改rinetd配置,将转发规则切换到备用数据库(如192.168.2.201:3306),无需修改app1的连接配置,实现数据库的无缝切换,减少业务中断时间。

3. 负载均衡(简单场景适用)

可通过配置多条转发规则,将来自同一端口的请求,转发到多台后端服务器,实现简单的负载均衡,减轻单台服务器的压力(适合流量不大的场景,高流量场景建议用Nginx、HAProxy)。

4. 跨网段服务调用(与当前案例类似)

除了app与db,其他跨网段的服务调用(如内网Redis、FTP以外的TCP服务),都能通过rinetd实现连通,配置逻辑和app访问db1完全一致。

注: 很多转发的场景可以用haproxy、nginx、socat来代替,其中rinetd及socat最为简单,不过能力也相对单一。

三、 总结

rinetd是一款小而美的端口转发工具,没有复杂的功能,却能精准解决跨网段访问的核心痛点,尤其是app与数据库的连通场景,配置简单、轻量高效,是运维、后端同学的必备工具之一。

如果觉得有用,转发给身边做运维、做数据库的同事,一起避坑~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-03-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据库干货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档