Share World

分享世界

Centos的TCP端口转发(TCP内网穿洞)

我曾运营过一个MineCraft服务器,但是因为部分原因,选择的机房没有移动线路,但是服务器中有不少移动玩家,但服务器只有电信联通双线,MineCraft对于网络要求较高,移动玩家连接电信、网通线路都会感到明显掉包和掉线,MineCraft的PC服务端数据传输基于TCP协议,所以转念一想,能不能用阿里云的五线BGP使用TCP转发的方式使移动玩家能流畅的进行游戏。

我曾经使用过Windows下的端口转发工具TCP Mapping的工具,在少量玩家下运行情况良好,但是大量玩家连接的话,就会出现未响应、停止运行等等大大小小的问题,Linux下使用IPtable进行转发,但是外网转发效果并不好,经过一段时间搜索发现Rinetd这个工具。

1、安装必备

yum -y install gcc* wget

2、下载Rinetd

wget http://www.boutell.com/rinetd/http/rinetd.tar.gz

3、解压

tar zxvf rinetd.tar.gz

4、进入目录

cd rinetd

5、然后修改工具源码中的两个错误

vi rinetd.c

搜索bindPort >= 65536connectPort >= 65536然后把65536均改为65535

6、然后编译

make

7、创建目录

mkdir /usr/man

8、安装

make install

9、创建配置文件 ,可以自己指定目录此处我放在etc文件

vi /etc/rinetd

配置如下

0.0.0.0 25565 222.168.254.168 25565

格式为源地址 源端口 目的地址 目的端口

10、开启端口转发,-c后面为配置文件路径

./rinetd -c /etc/rinetd

关闭进程

pkill rinetd

启动转发

rinetd -c /etc/rinetd

把上方这条命令加到/etc/rc.local里面就可以开机自动运行

同样,这个东西可以有许多应用的地方,在一台外网服务器搭建VPN内网服务器连接VPN,或者通过gre隧道的方式将内网和外网的机器构建一个虚拟内网环境,然后在外网的服务器通过虚拟的内网IP转发到内网的机器上,就可以做到类似TCP穿洞的效果。

我也将这个用于外网访问内网RDS上,经过对源代码研究发现此还是主要通过iptable的nat转发功能来实现,无法实现IP透传。

点赞
  1. 头像 john0526说道:

    :smile: 請問一下 版主有試過 rinetd + BBR 然後用於MineCraft 嗎? 可以分享一下嗎?

    1. 華落 華落说道:

      已测试BBR+Rinetd,使用BBR与不使用BBR实际感觉相同,也许是大陆内机器连接普遍延迟在50ms以内所以没有多大感觉,对于高延迟可能会有所效果。

发表评论

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据