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

iptables添加DNAT转发规则时出现"--dport"未知选项错误

iptables添加DNAT转发规则时出现"--dport"未知选项错误

嘿,这个问题我之前踩过坑!你遇到的报错核心原因是:你的iptables用的是nf_tables后端(就是错误信息里的iptables v1.8.7 (nf_tables)),它和传统的iptables(iptables-legacy)语法不兼容,--dport这类旧选项在这个后端里已经不被支持了。

现在很多新的Linux发行版(比如Ubuntu 20.04+、Debian 11+)默认用nftables替代了传统的iptables,此时iptables命令只是nftables的兼容包装器,很多老的iptables语法在这里无法正常工作。

给你两个可行的解决方案:

方案一:切换回传统iptables后端(快速解决)

如果你的系统还保留了传统的iptables后端,可以直接切换过去:

  1. 先检查系统可用的iptables后端:
    update-alternatives --list iptables
    
  2. 如果输出里有/usr/sbin/iptables-legacy,执行下面的命令切换:
    sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
    
  3. 切换完成后,再运行你原来的DNAT规则命令,就能正常执行了:
    sudo iptables -t nat -A PREROUTING -d 192.168.0.54 -p tcp --dport 9091 -j DNAT --to-destination 192.168.0.53
    

方案二:使用nftables原生语法(更推荐)

既然系统默认用nftables了,直接用它的原生语法写规则是更符合未来趋势的做法:

  1. 添加临时DNAT规则(重启后会失效):
    sudo nft add rule ip nat PREROUTING ip daddr 192.168.0.54 tcp dport 9091 dnat to 192.168.0.53
    
  2. 如果想要规则永久生效,先把当前规则导出到配置文件:
    sudo nft list ruleset > /etc/nftables.conf
    
    (注意:不同发行版的配置文件路径可能不同,比如CentOS是/etc/sysconfig/nftables.conf,可以根据自己的系统调整)
  3. 重启nftables服务让规则永久生效:
    sudo systemctl restart nftables
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 10:32:59