将特定网络流量转发到其他服务器

将特定网络流量转发到其他服务器

是否可以将我的 Ubuntu Linux 服务器计算机特定端口上的传入流量重定向到另一台服务器(该服务器具有另一个公共 IP 地址并位于另一个站点)?我正在另一台服务器上运行游戏服务器,但我希望人们能够连接到旧 IP 地址。是否可以通过某种 NAT/PAT 与 VPN 结合来实现这一点?

这是我使用 iptables 规则的测试结果...

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

答案1

这两行

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

应该

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

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

请注意,这种重定向设置起来很简单,但会破坏目标服务器上的 IP 日志记录 - 每个转发的连接都将显示为来自<youroldserver>。只要这只是一个过渡解决方案,它就应该有效。如果您想永久执行此操作,您可以考虑通过虚拟接口(例如 VPN)隧道传输转发的请求,并<youroldserver>通过相同的虚拟接口将响应路由回去,以确保您的转发主机位于响应数据包的路由路径中使用备用路由表

啊,您需要通过发出echo "1" > /proc/sys/net/ipv4/ip_forward(临时更改)或编辑 /etc/sysctl.cfg 并设置net.ipv4.ip_forward=1(重启后生效)来启用路由。

相关内容