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

avatar
avatar
自然
3257
文章
472
评论
2020年6月11日23:39:18 评论 1759字阅读5分51秒

端口转发程序已经介绍过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和新增功能。

 

weinxin
自然博客
快来关注一下,一个linux运维爱好者的个人博客!
Linux最后更新:2020-6-12
avatar
  • 本文由 发表于 2020年6月11日23:39:18
全网通流量卡/物联卡 SIM专用上网卡
AlphaSSL 域名通配符型DV SSL证书
iptables一键配置端口转发脚本,支持tcp和udp Linux

iptables一键配置端口转发脚本,支持tcp和udp

iptables是一款非常强大的防火墙管理工具,同样支持端口转发,同时也支持端口段转发。上一篇文章使用iptables进行端口转发配置对于小白非常不友好,自然在网络上面找到了一键脚本,对小白非常友好,...
使用iptables进行端口转发,支持端口段转发 Linux

使用iptables进行端口转发,支持端口段转发

端口转发自然已经介绍过了rinetd和socat这两个简单易用的工具,今天来介绍一下系统自带的iptables防火墙转发方案。iptables防火墙转发方案适用于拥有iptables工具的系统,其最大...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: