充当原始 TCP 数据包的反向代理

充当原始 TCP 数据包的反向代理

我正在尝试使用 OVH 节点作为多个 minecraft 服务器的反向代理(主要用于 DDoS 保护和防火墙定制)。minecraft 主机也运行 ubuntu,无论是 12.04 还是 14.04,OVH 上也有 ubuntu。目前我尝试这样做:

sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport port -j DNAT --to-destination ip:port
iptables -t nat -A POSTROUTING -j MASQUERADE

大部分情况下,这种方法都很好用,但有一个显而易见的例外,即所有客户端的 IP 都与我执行此操作的服务器相同。我能否设置这些设备中的任何一个,以便它保留原始源 IP?我读到 tcpproxy (http://www.quietsche-entchen.de/cgi-bin/wiki.cgi/proxies/TcpProxy) 是一个很好的解决方案,但我认为这个问题没有理由不会继续存在。

我还想知道使用这个是否会导致来自 minecraft 服务器的回复绕过代理,泄露真实 IP,这是我想避免的。

答案1

在您的情形下,保留代理服务器的 IP 地址不起作用。如果客户端最初连接到代理(我们称之为代理:1111)并收到来自 minecraft1:2525 的响应,客户端会如何处理它。客户端无法将此响应映射到原始请求。

继续按你现在的方式去做。

相反,您可以在一系列端口上使用多个规则集。例如,minecraft1 是代理:1111,minecraft2 是代理:1112,mincraft3 是代理:1113,等等。

然后你可以像这样设置规则:

iptables -t nat -A PREROUTING -p tcp --dport 1111 -j DNAT --to-destination ip:port
iptables -t nat -A PREROUTING -p tcp --dport 1112 -j DNAT --to-destination ip:port
iptables -t nat -A PREROUTING -p tcp --dport 1113 -j DNAT --to-destination ip:port
iptables -t nat -A POSTROUTING -j MASQUERADE

然后,要连接到 minecraft1,您需要使用 proxy:1111。对于 minecraft2,请使用 proxy:1112 等。实际运行 Minecraft 服务器的端口无关紧要,因为规则将中继到正确的端口。

相关内容