Linux 上的 IP 转发是否充当反向代理?

Linux 上的 IP 转发是否充当反向代理?

我环顾四周,发现许多 IP 转发解决方案都将请求从一台服务器上的 IP 转发到另一台服务器上的另一个 IP。(基本上,将发往服务器 X 上的 123.45.67.89 的请求转发到服务器 Y 上的 98.76.54.321。)这些解决方案通常涉及在 Linux 内核中启用 IP 转发并添加 iptables 规则以使一切正常运行。

但是,我不确定在进行转发时服务器 Y(及其 IP 98.76.54.321)是否会暴露。我基本上是针对反向代理,但针对 TCP/UDP 上的任何端口或协议。

基本上,Linux IP 转发是否会自动充当反向代理,还是必须采取其他步骤来确保服务器 Y(其 IP)的身份不会通过服务器 X 泄露?还是我完全在考虑错误的解决方案?

答案1

Linux IP 转发基本上就是路由。它本身并不代理,也不会真正改变第 3 层及以上层的流量。

也就是说,如果您想要某种东西来掩盖流量的位置,您可以考虑使用 iptables 设置 NAT 来伪装(或源 NAT)流量,以便源 IP 是 Linux 服务器的 IP。这与转发一起工作。

要做到这一点,你必须对入站流量进行 DNAT(更改其目标地址):

iptables -t nat -A PREROUTING -d ${server_x} -j DNAT --to-destination ${server_y}

然后,您必须更改源地址,以便隐藏服务器通过转发器将流量发回:

iptables -t nat -A POSTROUTING -d ${server_y} -j SNAT --to ${server_x}

如果您愿意,您也可以考虑根据协议和端口来预测这些。

答案2

您还没有完全解释您要解决的问题,只是您认为您可以如何解决它,然后要求其他选择......所以这个答案可能有些模糊,但我还是会给出它。

首先,出于对一切神圣事物的热爱,避免 NAT。拜托。每次创建新的 NAT 时,独角兽都会哭泣。

解决方案 1

如果您的服务器具有公共 IP,只需使用路由(IP 转发)和适当的防火墙规则(iptables)来控制允许通过的内容。

例如:

Internet <==> Perimeter (123.45.67.89) <==> Server (98.76.54.321)

在外围主机上启用 IP 转发(路由),然后输入防火墙规则以仅允许您希望能够到达服务器的流量DROPREJECT所有其他流量。

解决方案 2

如果您确实想“隐藏”服务器,以便“互联网”认为它实际上正在与“外围”对话,即使它实际上是在与“服务器”打交道,那么请在“外围”上安装适当的反向代理软件并让它发挥作用。这将需要外围主机上的更多资源,但会隐藏“服务器”并避免 NAT(我是否提到过避免 NAT?)

解决方案 3

如果您确实必须这样做,因为因为某种原因 1 和 2 不可行,请遵循 NAT 建议。

相关内容