是否可以将所有呼叫重定向到互联网上的外部 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
,附加到OUTPUT
iptables 链中。这是一条内置链。还有其他内置链,如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 地址和预期端口。
有关的
- 使用 iptables 将所有流量重定向到我的本地主机
- 解决方案改编自这和这。
- 如果你需要与应用程序通信,这可能是相关的(iptables 解决方案)和(postgres xinetd 解决方案)。
- 阅读更多iptables 架构。
答案2
当您无权访问 iptables 或 nftable 内核路由(例如 kubernetes)时,将外部 IP 绑定到本地环回接口也能很好地发挥作用。
127.0.0.1
与本地设备的 IP类似,这将另一个 IP 绑定到本地接口。
使用/32
cidr 来定位 1 个 ip。
ip addr add $EXTERNAL_IP/32 dev lo