跳转到内容

为Linux安装配置rinetd端口转发

端口转发指的是:将发送到一台主机上特定端口的请求转发给另一台主机的特定端口,然后再原路响应。 本文基于Linux系统和rinetd来实现该功能。

需求背景

阿里云最近有99元/年的ECS活动,2核2GB,3M公网带宽,新老用户同享。买不了吃亏,买不了上当,所以我买了。ECS位于北京,3M的公网带宽对我来说足够使用,但是2GB的内存是无法满足Oracle Database 23ai Free基本安装需求的,所以我还需要另外一台至少2核4GB的ECS,不过只是临时使用,而非长期。99元的优惠ECS不容错过,肯定要买。另一台高配一点的ECS没有个人优惠,如果买的话,就想尽量省点钱——那就把它的公网带宽费用省了吧。

所以我的需求是,主机A(2C/2GB/3M)作为公网访问,同一个可用区内的另一台主机B(2C/4GB/0M)用来安装Oracle、SQL Server、MySQL、PostgreSQL等各种数据库,但没有公网带宽。当访问主机A的1521、1433、3306和5432端口时,将它们的请求转发到主机B上对应的端口,这样便可以实现将公网上的主机A当做数据库来访问,但实际的数据库部署位于主机B上,主机A只是负责转发而已。如下图所示:

Network

版本说明

操作系统用的是CentOS Stream 9。

端口转发功能用的是较为简单的rinetd,它有一个“官网”链接:https://boutell.com/rinetd/http/rinetd.tar.gz 。但是好像下载后无法使用tar -xvf正常解压缩。所以我用的是GitHub上的资源:https://github.com/samhocevar/rinetd/releases/download/v0.73/rinetd-0.73.tar.gz

安装步骤

  1. 首先下载rinetd的资源包:
    wget https://github.com/samhocevar/rinetd/releases/download/v0.73/rinetd-0.73.tar.gz
  2. 然后解压缩它,并进入到其路径中:
    tar -xvf rinetd-0.73.tar.gz
    cd rinetd-0.73
  3. 配置一下,然后编译、安装它:
    ./configure
    make && make install

配置步骤

  1. 默认的配置文件是/etc/rinetd.conf,用vim来编辑一下它,添加以下内容:
    0.0.0.0 3306 172.17.72.63 3306
    0.0.0.0 1521 172.17.72.63 1521
    0.0.0.0 1433 172.17.72.63 1433
    第1列0.0.0.0和第2列如3306,指的是本机IP和端口,是请求的源位置。第3列172.17.72.63和第4列如3306指的是另一台目标主机IP和端口,是请求转发的目标位置。
  2. 启动rinetd服务,可以使用命令:
    rinetd -c /etc/rinetd.conf
  3. 关闭rinetd服务,可以使用命令:
    pkill rinetd
  4. 查看rinetd服务的端口转发状态,可以使用命令:
    netstat -antup | grep rinetd
    其输出结果如:
    tcp 0 0 0.0.0.0:1521 0.0.0.0:* LISTEN 19777/rinetd
    tcp 0 0 0.0.0.0:1433 0.0.0.0:* LISTEN 19777/rinetd
    tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 19777/rinetd

设置开机启动

可以设置让rinetd随开机自动启动,但要注意有没有执行权限。

  1. echo或者vimrinetd -c /etc/rinetd.conf添加到/etc/rc.local文件中。
  2. ls -l /etc/rc.local检查有没有执行权限(有)。
  3. ls -l /etc/rc.d/rc.local查看有没有执行权限(没有)。
  4. chmod +x /etc/rc.d/rc.local添加后者的执行权限。

至此,基本的安装和配置便完成了。