将外部 IP 重定向到本地主机?

将外部 IP 重定向到本地主机?

是否可以将所有呼叫重定向到互联网上的外部 IP 到本地主机(无需使用主机)?

我有一个旧的应用程序,我没有源代码,这个应用程序尝试使用 IP 连接到 postgres 服务器

我可以指示 ubuntu 将所有对此外部 IP 的调用重定向到本地主机吗?

这样,我就能在本地主机上运行 postgres 服务器并使用我的应用程序。

注意:应用程序使用IP,而不是DNS。

答案1

iptables 目录是正确的做法。

sysctl -w net.ipv4.conf.eth0.route_localnet=1 # to enable redirecting to localhost
EXTERNAL_IP=8.8.8.8 #change this line to reflect external ipaddress
sudo iptables -t nat -A OUTPUT -d ${EXTERNAL_IP} -j DNAT --to-destination 127.0.0.1

分解

  • -t nat允许您将 127.0.0.1 作为有效目的地。

  • -A OUTPUT,附加到OUTPUTiptables 链中。这是一条内置链。还有其他内置链,如INPUT,它适用于传入数据包,以及PREPROCESSING,它适用于在任何其他内置链到达之前的所有传入数据包。您还可以创建自己的链并将其附加到这些内置链之一,以便更好地管理您的设置。

  • -d ${EXTERNAL_IP}对通过 OUTPUT 链的数据包的目标 IP 地址进行过滤。

  • -j DNAT将规则的目标设置为DNAT,允许您修改数据包的目标地址。

  • --to-destination 127.0.0.1是 DNAT 目标的参数,指定对这些匹配的数据包进行哪些更改。

--dports ${ORIGINAL_PORT_NUMBER}您还可以使用after来限制地址的重定向端口-d ${EXTERNAL_IP},并通过将端口附加到 127.0.0.1 来让它们重新路由到特定端口,就像这样127.0.0.1:${FINAL_PORT_NUMBER}

移动

使用以下命令从 iptables 中删除。

# note: -A is replaced by -D
sudo iptables -t nat -D OUTPUT -d ${EXTERNAL_IP} -j DNAT --to-destination 127.0.0.1

并使用以下命令检查 iptables 列表sudo iptables -t nat -L -n -v在哪里-t nat允许您查看 iptables 映射,包括与 NAT 相关的映射。

进一步行动

如果您计划与应用程序通信并且应用程序检查源 IP 地址和端口,您可能还需要伪装或重定向来自 postgres 服务器的数据包以匹配外部 IP 地址和预期端口。

有关的

答案2

当您无权访问 iptables 或 nftable 内核路由(例如 kubernetes)时,将外部 IP 绑定到本地环回接口也能很好地发挥作用。

127.0.0.1与本地设备的 IP类似,这将另一个 IP 绑定到本地接口。

使用/32cidr 来定位 1 个 ip。

ip addr add $EXTERNAL_IP/32 dev lo

相关内容