阳光与海

不积跬步无以至千里

Linux下使用Rinetd/Socat实现端口转发

一、Rinetd和Socat简单介绍

1、Rineted

Rinetd是为在一个Unix和Linux操作系统中为重定向传输控制协议(TCP)连接的一个工具。Rinetd是单一过程的服务器,它处理任何数量的连接到在配置文件etc/rinetd中指定的地址/端口对。尽管rinetd使用非闭锁I/O运行作为一个单一过程,它可能重定向很多连接而不对这台机器增加额外的负担。

2、Socat

Socat 是 Linux 下的一个多功能的网络工具,名字来由是 「Socket CAT」。其功能与有瑞士军刀之称的 Netcat 类似,可以看做是 Netcat 的加强版。

Socat 的主要特点就是在两个数据流之间建立通道,且支持众多协议和链接方式。如ip, tcp, udp, ipv6, pipe,exec,system,open,proxy,openssl,socket等。

Socat 的官方网站:http://www.dest-unreach.org/socat/

二、Rinetd和Socat的安装

主要介绍Ubuntu下的安装方法,其他系统和编译安装参见以下两篇文章。

Rineted:https://www.hi-linux.com/posts/29683.html

Socat:https://www.hi-linux.com/posts/61543.html

1、Rineted在Ubuntu下的安装

apt-get install rinetd

2、Socat在Ubuntu下的安装

apt-get install socat

三、Rineted配置文件编辑

Rineted端口转发的配置文件在/etc/rinetd.conf中

0.0.0.0 8080 172.19.94.3 8080
0.0.0.0 2222 192.168.0.103 3389
1.2.3.4 80 192.168.0.10 80
allow *.*.*.*
logfile /var/log/rinetd.log

配置文件规则说明

0.0.0.0表示本机绑定所有可用地址
将所有发往本机8080端口的请求转发到172.19.94.3的8080端口
将所有发往本机2222端口的请求转发到192.168.0.103的3389端口
将所有发往1.2.3.4的80端口请求转发到192.168.0.10的80端口
allow设置允许访问的ip地址信息,*.*.*.*表示所有IP地址,端口转发时不需要设置
logfil设置打印的log的位置,端口转发时不需要设置

源地址和目的地址都可以是主机名或IP地址

四、Rineted和Socat的运行

1、Rineted的启动/停止/重启

/etc/init.d/rinetd start/stop/restart

2、Socat无配置文件,直接命令行参数启动。

建议先使用screen建立一个窗口再运行Socat,这样可以实时查看Socat的运行情况以及错误信息,也可以使用nohup使其后台运行。

例如将发往本机22端口的TCP流量,转移至ipv6地址[CDCD:910A:2222:5498:8475:1111:3900:2020]的3389端口,需要用如下命令:

socat TCP4-LISTEN:22,reuseaddr,fork TCP6:[CDCD:910A:2222:5498:8475:1111:3900:2020]:3389

其中

TCP4-LISTEN:在本地建立一个 TCP IPv4 协议的监听端口,也就是转发端口。这里是 22,请根据实际情况改成你自己需要转发的端口。

reuseaddr:绑定一个本地端口

fork TCP6:[CDCD:910A:2222:5498:8475:1111:3900:2020]:3389:指的是要转发到的服务器 IP 和端口,这里是CDCD:910A:2222:5498:8475:1111:3900:2020的 3389 端口。

注意如果是IPV6地址请一定添加[],否则报错。
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注