Introduction
Servers
搬瓦工的 CN2 GT 服务器 S1(2g 2core)
CN2 GIA 服务器 S2(0.5g 1core)
阿里云服务器 S3
need
我拥有三台服务器,其中需要使用 S1 开服,但是由于线路原因,游戏丢包情况十分严重,相比之下配置较低的 cn2 gia 服务器就拥有很优质的线路,且 S2 还不够,仍然会有少许丢包,导致mc掉线,故再加上阿里云服务器 S3 进行中转,通过利用 S2 和 S3 作为跳板机对流量进行中转,便可以达到较佳的游戏体验。
graph
mc客户端 <------> 阿里云 S3 <------> cn2 gia 服务器 S2 <------> mc服务器 S1
Configuration
参考资料:nat-with-iptables
ip_forward
服务器的流量转发功能默认关闭,需要手动开启
sudo sysctl net.ipv4.ip_forward # CentOS or Ubuntu
net.ipv4.ip_forward = 0 #表明未开启流量转发
sudo echo "net.ipv4.ip_forward = 1"|sudo tee /etc/sysctl.d/99-ipforward.conf
net.ipv4.ip_forward = 1 
# CentOS
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
# Ubuntu
便可以开启转发,但重启后会恢复,我们需要将其写入配置
sudo sysctl -p /etc/sysctl.d/99-ipforward.conf
# CentOS
sudo sysctl -p
# Ubuntu
net.ipv4.ip_forward = 1 # 写入配置
iptables
install & start
- 对于 Ubuntu 系统,自带 iptables
 - 对于 CentOS 系统,默认安装了 firewall ,需要先将 firewall 关闭,再安装 iptables
 
参考此文章:centos如何开启iptables
systemctl stop firewalld.service # 停止firewall
systemctl disable firewalld.service # 禁止firewall开机启动
# yum -y install iptables-services 安装iptables(有的系统不需安装,视情况而定)
service iptables start # 启动iptables
Configuration
sudo iptables -F
sudo iptables -t nat -F
# 清除iptables原有的配置文件
流量转发配置
自行替换 Gateway_IP、Gateway_Port、Dest_IP、Dest_Port
分别对应 跳板机的ip和端口,目标机器的ip和端口
这里的协议我设置为了 tcp, 根据你需要转发的协议类型进行设置
sudo iptables -t nat -A PREROUTING -p tcp --dport Gateway_Port -j DNAT --to-destination Dest_IP:Dest_PORT # 将进入跳板机的流量转发到目标ip
sudo iptables -t nat -A POSTROUTING -p tcp -d Dest_IP --dport Dest_Port -j SNAT --to-source Gateway_ip # 将目标ip返回的流量转发给原ip
sudo iptables -t nat -L -n # 查看iptables配置情况
查看配置无误之后,即完成
若希望保存配置
service iptables save
# CentOS
sudo iptables-save | sudo tee /etc/iptables.up.rules
# Ubuntu
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
Q&A
1. 阿里云无法转发
阿里云采用了 弹性ip 的技术, 即在你访问其公网ip之后又经过一层nat,转发到内网
所以我们的 iptables 配置也应该将本机ip修改为内网ip
这时我们的 Gateway_IP 应该填写内网ip, 即 172 . 17. . (具体请自行查询)
[root@izuf6eyc1ac8d7lj4j6q2oz /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.*.*  netmask 255.255.192.0  broadcast 172.17.*.*
        ether 00:16:3e:10:91:52  txqueuelen 1000  (Ethernet)
        RX packets 3528831  bytes 368948380 (351.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3485951  bytes 321121112 (306.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1  (Local Loopback)
        RX packets 6260  bytes 392377 (383.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6260  bytes 392377 (383.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
2. 多层跳板如何搭建
多层跳板,就是将跳板机 src 的 目的地址 设置为下级跳板 dest ,层层中转即可
即配置 S1 、 S2
- 
使 S3 中转给 S2
 - 
使 S2 中转给 S1