你可以帮帮我吗?
sudo echo "1" > /proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 1.1.1.1
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 2.2.2.2
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
我正在使用这些 iptables 规则来创建负载平衡服务器。我只是分发 .mp4 和 .mp3 内容,但这些规则使用的是我用于进行此转发的服务器带宽,而不是目标服务器带宽。
我该如何解决这个问题?用户必须使用目标服务器带宽,而不是重定向服务器。谢谢。
答案1
我该如何解决这个问题?用户必须使用目标服务器带宽,而不是重定向服务器。谢谢。
一般有以下几种方式:
- 使用轮询 DNS。所有服务器共享同一个名称,但位于不同的 IP 上。客户端将随机选择一个服务器。
- 使用重定向将用户发送到适当的服务器。
- 使用 Anycast。所有服务器都具有相同的 IP。由于路由的工作方式,用户通常会连接到本地服务器。
循环 DNS 和重定向通常是您可以自行配置的。对于任播,您必须能够自行在多个地区宣布 BGP,并与世界各地的多个 ISP 合作。
另一个好主意是直接忽略这个问题,在前面放一个 Cloudflare 或 Akami 等服务,让它们处理负载平衡。如果您想要更多的控制权,也可以将内容托管在 Azure 或 Google Cloud 等云解决方案中,这样您就不必担心从 blob 存储中获取内容的负载。
你的规则的作用
使用规则,您可以重写数据包的目的地,并将其发送到不同的服务器。添加你伪装他们,这样后端服务器就会觉得这个包来自你的前端。后端会尽职尽责地回答,将回复包发回你的前端,前端会在表中查找该连接的来源,然后将包发送到原始客户端。服务器(实际上是一个路由器)必须接触数据包以重写标头,并且所有数据包都必须通过该服务器。
在许多情况下,这样的设置非常有意义。路由大量流量相当简单,配置起来也简单且可靠。它允许高可用性,您可以丢弃没有响应的服务器,并且对于无状态的负载,增加容量非常容易 - 只要您的路由器可以处理流量。