You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用nftables将对指定远程地址的请求重定向到localhost失败,请求排查原因

nftables将对指定远程地址的请求重定向到localhost失败,请求排查原因

我来帮你排查这个问题的根源!其实核心原因是你忽略了本地发起流量和外部流入流量的NAT处理路径差异。

你当前的nftables规则只在prerouting链里配置了DNAT,但prerouting链负责处理的是从外部网络进入本机的流量。而你是在同一台机器上发起对10.0.2.99的请求,这类本地生成的流量根本不会经过prerouting链,自然你的DNAT规则不会生效——系统找不到10.0.2.99的路由,就抛出了"[Errno 113] No route to host"错误。

解决方法:添加output链的DNAT规则

本地发起的流量,NAT规则需要配置在output链中,你可以通过以下两种方式修复:

  1. 用命令临时添加规则(重启后失效):
nft add rule ip nat output ip daddr 10.0.2.99 dnat to 127.0.0.1
  1. 修改nftables配置文件永久保存:
table ip nat {
    chain prerouting {
        type nat hook prerouting priority dstnat; policy accept;
        ip daddr 10.0.2.99 dnat to 127.0.0.1
    }

    chain postrouting {
        type nat hook postrouting priority srcnat; policy accept;
    }

    chain output {
        type nat hook output priority -100; policy accept;
        ip daddr 10.0.2.99 dnat to 127.0.0.1
    }
}

补充说明

Linux的NAT流量处理路径分两种场景:

  • 外部流入流量:prerouting(执行DNAT)→ 路由查找 → input链
  • 本地发起流量:应用层 → output链(执行DNAT)→ 路由查找 → postrouting链

你已经正确开启了ip_forward和route_localnet,这两个配置没有问题,只需要补上output链的规则,就能让本地请求被正确重定向到localhost了。

备注:内容来源于stack exchange,提问作者andrew cooke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:03:01