小心灵学院
欢迎您的光临

linux使用socat进行端口转发 支持tcp/udp数据转发

端口转发程序已经介绍过rinetd了,但是rinetd不支持域名动态解析功能,如果域名对应的ip发生改变,需要重新才能重新加载新的地址。这里自然找到了端口转发工具socat,它完美的解决了动态dns的问题。且由于工作模式的不同,socat的转发效率更高。

socat是一个长期维护的项目,rinetd已经很久没有更新了。如果只有少数几个端口需要转发,socat将是非常不错的选择。socat长期维护所以可以直直接在线支持redhat/centos/debian等发行版本。

linux使用socat进行端口转发,支持tcp/udp数据转发

socat项目

socat项目地址:http://www.dest-unreach.org/socat/

源代码下载:http://www.dest-unreach.org/socat/download/

socat安装

使用包管理工具进行安装:

#CentOS系统
yum install -y socat

#Ubuntu或Debian系统
apt-get update
apt-get install -y socat

socat的使用

2.1转发TCP流量
nohup socat TCP4-LISTEN:10000,reuseaddr,fork TCP4:1.1.1.1:10000 >> socat.log 2>&1 &

1、TCP4-LISTEN:10000监听ipv4的10000TCP端口,10000改成你自己需要转发的端口;

2、fork TCP4:1.1.1.1:10000`转发到1.1.1.1的10000端口,根据需求修改自行修改ip和端口;

3、nohup后台运行,可以把这个命令写到/etc/rc.local里面开机启动启动。

2.2转发UDP流量
nohup socat -T 600 UDP4-LISTEN:10000,reuseaddr,fork UDP4:1.1.1.1:10000 >> socat.log 2>&1 &

说明对照tcp流量转发,如果想要开机自己动可以将命令吸入到/etc/rc.local。更好的办法是将命令写作shell脚本,开机自启动。

开机自启动

创建一个systemd服务

echo "[Unit]
Description=/etc/rc.local
ConditionPathExists=/etc/rc.local
 
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
 
[Install]
WantedBy=multi-user.target
" > /etc/systemd/system/rc-local.service

创建配置文件:

echo "#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
" > /etc/rc.local

将socat端口转发配置写入文件即可

echo "nohup socat TCP4-LISTEN:10000,reuseaddr,fork TCP4:1.1.1.1:10000  >> /root/socat.log 2>&1 &
nohup socat -T 600 UDP4-LISTEN:10000,reuseaddr,fork UDP4:1.1.1.1:10000   >> /root/socat.log 2>&1 &
" >> /etc/rc.local

附加执行权限

chmod +x /etc/rc.local

加载开机自动并启动服务

systemctl enable rc-local
systemctl start rc-local

总结

socat转发时,流量进程时一对一模式,可以动态伸缩调整,转发效率更加优秀。总体性能比rinetd好,且作为一个长期维护的项目,可以有专业人员修复bug和新增功能。

 

赞(0)
未经许可不得转载:小心灵学院 » linux使用socat进行端口转发 支持tcp/udp数据转发
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址