![Linux 上的 IP 转发是否充当反向代理?](https://linux22.com/image/802981/Linux%20%E4%B8%8A%E7%9A%84%20IP%20%E8%BD%AC%E5%8F%91%E6%98%AF%E5%90%A6%E5%85%85%E5%BD%93%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%EF%BC%9F.png)
我环顾四周,发现许多 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 转发(路由),然后输入防火墙规则以仅允许您希望能够到达服务器的流量DROP
或REJECT
所有其他流量。
解决方案 2
如果您确实想“隐藏”服务器,以便“互联网”认为它实际上正在与“外围”对话,即使它实际上是在与“服务器”打交道,那么请在“外围”上安装适当的反向代理软件并让它发挥作用。这将需要外围主机上的更多资源,但会隐藏“服务器”并避免 NAT(我是否提到过避免 NAT?)
解决方案 3
如果您确实必须这样做,因为因为某种原因 1 和 2 不可行,请遵循 NAT 建议。