在 Linux 中,如何环回发往服务器自己的 NAT 公共 IP 的内部流量?

在 Linux 中,如何环回发往服务器自己的 NAT 公共 IP 的内部流量?

我所说的内部流量仅指源自服务器本身(而非 LAN 或其他服务器)的流量。我有一个云 VM,其中云供应商提供的公共 IP 未直接连接到 VM。假设公共 IP 为 。VM8.8.8.8的实际 IP 为192.168.1.2。有一个服务正在监听192.168.1.2:443。公共客户端可以通过 访问它8.8.8.8:443。服务器自己的客户端可以通过 和 访问192.168.1.2:4438.8.8.8:443

我假设如果服务器自己的客户端向 发出请求,8.8.8.8它将首先转到服务器的默认网关,然后网关将对其进行 NAT 并将其转发回192.168.1.2。所以我的问题是,如果内部客户端向 发出请求8.8.8.8,如何将其直接转发到 而192.168.1.2无需流量离开服务器,而客户端仍然认为它正在与 对话8.8.8.8

操作系统版本为 Debian 11(内核 5.10.0-26-cloud-amd64)

答案1

将相同的 NAT 规则添加到服务器自己的防火墙。您需要将它们放在“OUTPUT”链中,而不是通常的“PREROUTING”(但仍在“nat”表中)。例如,在 nftables 中:

表 ip nat {
    链式输出 {
        键入 nat hook 输出优先级目的地;
        ip daddr 8.8.8.8 tcp dport 443 dnat 到 192.168.1.2
    }
}

iptables 的等效项很可能是:

iptables-t nat -A 输出-d 8.8.8.8 -p tcp --dport 443 -j基因转移酶...

相关内容