NAT 表中的输入链和输出链起什么作用?

NAT 表中的输入链和输出链起什么作用?

我理解IPTables 中preroutingpostrouting链的作用,但我不明白outputinput链的作用。因此,在 NATing 中,我们使用中的
更改目标 IP 或端口,或使用 中的 或 更改源 IP 以将回复发送到正确的接口。DNATpreroutingSNATMASQURADEpostrouting

input在这种情况下,我发现和链毫无用处output。有人能快速给我解释一下它们(input和)吗?output

答案1

INPUTOUTPUT遍历链以查找在本地机器上运行的应用程序传送和发送的数据包。

如果应用程序发出一个数据包,它会遍历

app -> OUTPUT -> POSTROUTING -> interface

相反,传送到应用程序的数据包会穿过

interface -> PREROUTING -> INPUT -> app

当转发的数据包穿过

interface -> PREROUTING -> FORWARD -> POSTROUTING -> interface

请注意,MASQUERADE只是的一个特例SNAT,其中源地址取自接口。

另请参阅这张照片或者您可以在iptables教程中找到许多类似的内容。

编辑

如果您要DNAT对从应用程序发送的数据包执行操作,则必须使用OUTPUT,因为DNAT仅在中有效PREROUTING,并且从应用程序传出的数据包永远不会遍历PREROUTING

同样地,对于SNATINPUT并且POSTROUTING在将应用程序发送到 应用程序 的情况下,虽然我不确定SNAT中的当前状态INPUT,但它可能已损坏并且实际上无法工作。

由于大多数伪装发生在路由器转发数据包时,因此您不会经常看到此类应用程序。

答案2

INPUT/OUTPUT 链中的 NAT 表允许对 Linux 路由器内部本地生成的流量进行 NAT 操作。

如果在 POSTROUTING/PREROUTING 中使用 NAT,则意味着要转发/已转发的流量和发往本地计算机的流量都将被 NAT

如果您只想对本地机器的流量进行 NAT 并保持转发的流量完好无损,则可以在 INPUT/OUTPUT 中使用 NAT。

例如:您有一个 Linux 路由器,它同时用作 DNS 服务器,由于特殊原因,您需要更改本地 DNS 流量的目标端口,但又不想改变路由流量,那么您可以使用 NAT INPUT/OUTPUT。

相关内容