linux下使用rinetd来实现端口转发
windows下的端口转发一般用的是自带的nat和porttunnel、portmap
linux下端口转发映射的程序叫rinetd,启动方法rinetd -c /etc/rinetd.conf ,pkill rinetd 关闭进程
工具主页: http://www.boutell.com/rinetd/
软件下载,解压安装
wget http://www.boutell.com/rinetd/http/rinetd.tar.gz tar zxvf rinetd.tar.gz make make install
把1.1.1.1的11端口映射到2.2.2.2的3389端口,配置文件如下
[root@localhost iso]# cat /etc/rinetd.conf 1.1.1.1 11 2.2.2.1 3389 1.1.1.1 12 2.2.2.2 3389 1.1.1.1 13 2.2.2.3 22 1.1.1.1 14 2.2.2.4 80 allow *.*.*.* logfile /var/log/rinetd.log
启动程序
pkill rinetd ##关闭进程 rinetd -c /etc/rinetd.conf ##启动转发
把这条命令加到/etc/rc.local里面就可以开机自动运行
查看状态
netstat -antup
如果想用iptables实现的话,可以用一下命令。
WAN_IP=”202.106.0.20″ iptables -t nat -A PREROUTING -i eth0 -p tcp ?dport 2533 -j DNAT ?to 192.168.1.88:80 iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.88 -p tcp ?sport 80 -j SNAT ?to $WAN_IP:2533
第一句定义一个变量
第二句实现对端口为2533的请求转发到192.168.1.88的80端口
第三句修改从etho输出的源地址为192.168.1.88,端口为80的数据包的源地址为本机的2533端口,以便对方收到
数据包之后能正确返回。
=============================================================
rinetd 在生产环境要谨慎使用
阿里云的redis节点,但是默认阿里云不提供公网IP,所以我在一台阿里云的机器启动了rinetd,做端口的转发服务,开始一切正常,一段时间以后,随着并发力度加大。我们发现redis连不上了,提示Connection reset by peer
直接使用nginx的tcp proxy模块,问题解决,并且CPU使用率也不高