MASQUERADE 是用来做什么的?

MASQUERADE 是用来做什么的?

我的服务器上使用了简单的重定向,带有 iptables 规则:

$ iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 13.37.42.1:80

$ iptables -t nat -A POSTROUTING -j MASQUERADE

我不明白第二行(伪装)的用处。为什么/为什么它在这个例子中有用?

编辑:为什么 - 不是理论上,而是现实生活中 - 你会在这样的例子中使用它?

谢谢

答案1

MASQUERADE顾名思义,它将所有内容隐藏在主机“后面”。当您只有一个上行链路 IP 地址时,您可以这样做来为多台主机提供互联网。大多数消费级互联网接入路由器都使用这项技术,称为“NAT”。

当主机 A 通过路由器 R 联系服务器 S 时MASQUERADE,服务器无法看到连接来自主机 A。相反,对于服务器来说,它看起来像是在与路由器 R 通信。但是,路由器 R 知道此连接最初来自主机 A,并将相应地转发消息。主机 A 知道它已连接到服务器 S,并且服务器 S 发送了响应。

在 IPTables 中,您通常仅在面向 Internet 的界面上使用它。类似这样的:

-t nat -A POSTROUTING -o eth0 -j MASQUERADE

这意味着每个被路由并离开的 IP 数据包都eth0将得到处理。

在您的示例中,对于13.37.42.1(主机 S) 来说,它看起来就像您的机器 (以下称为主机 Y) 发起了连接。这意味着响应将到达主机 Y,主机 Y 将其转发到实际目的地 (主机 A)。对于主机 A 来说,它看起来好像消息来自主机 Y。它无法看到或知道主机 S 实际发送了它,因为MASQUERADE这里是双向的。

如果不使用此规则,主机 S 将看到来自主机 A 的消息。因此,它将直接向主机 A 发送响应。但是,主机 A 不认识主机 S。它连接到主机 Y 并期望从那里得到响应。因此,来自主机 S 的响应被视为未经请求的流量并被丢弃。连接将超时。

相关内容