将特定networkingstream量转发到其他服务器

是否有可能redirect到我的Ubuntu Linux服务器机器的特定端口上的传入stream量到另一个服务器(有另一个公共IP地址,并位于另一个网站)? 我正在其他服务器上运行一个游戏服务器,但我希望人们能够连接到旧的IP地址。 这可以通过某种与VPN相结合的NAT / PAT来完成吗?

这是我的iptables规则的testing结果…

root@oldserver:~# tcpdump -n -i eth0 port 83 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 17:47:40.349492 IP client.63633 > oldserver.83: Flags [S], seq 783927589, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0 17:47:40.597801 IP client.63634 > oldserver.83: Flags [S], seq 924277477, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0 17:47:43.349118 IP client.63633 > oldserver.83: Flags [S], seq 783927589, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0 17:47:43.596024 IP client.63634 > oldserver.83: Flags [S], seq 924277477, win 8192, options [mss 1460,nop,wscale 2,nop,nop,sackOK], length 0 17:47:49.349400 IP client.63633 > oldserver.83: Flags [S], seq 783927589, win 8192, options [mss 1460,nop,nop,sackOK], length 0 17:47:49.600172 IP client.63634 > oldserver.83: Flags [S], seq 924277477, win 8192, options [mss 1460,nop,nop,sackOK], length 0 

这两条线

iptables -t nat -A PREROUTING -p tcp --dport <yourgameserverport> -j DNAT --to <yournewserver>:<yournewport>

iptables -t nat -A POSTROUTING -p tcp -d <yournewserver> --dport <yournewport> -j MASQUERADE

应该

  • 将stream量redirect到新的服务器(如果是公共stream量则不需要VPN)
  • 将redirect的数据包伪装成源自您的“旧”服务器,因此它肯定会在路由path中反向映射转发的连接的响应数据包。

有关DNAT和MASQUERADE目标的详细信息,请参阅iptables的相应手册页部分 。

请注意,这种redirect很容易设置,但会破坏目标服务器上的IP日志logging – 每个转发的连接都将显示为源自<youroldserver> 。 只要这只是一个过渡的解决scheme,它应该解决。 如果你想永久地做,你可以通过一个虚拟接口(例如一个VPN)来查看转发的请求,并确保你的转发主机<youroldserver>在响应数据包的路由path中,通过路由响应返回虚拟接口使用备用路由表 。

啊,你需要通过发出echo "1" > /proc/sys/net/ipv4/ip_forward (用于临时改变)或者编辑/etc/sysctl.cfg并设置net.ipv4.ip_forward=1在重新启动后有效)。