使用iptables v1.8.7(nf_tables)配置端口转发时遇未知选项报错求助
iptables v1.8.7(nf_tables)配置端口转发时遇未知选项报错求助
嘿,我看你在使用基于nf_tables的iptables版本配置端口转发时碰到了参数报错的问题,这其实是新旧iptables后端语法差异加上命令里的小细节问题导致的,我来帮你拆解下:
你遇到的两个报错场景
- 尝试去掉
-p选项后执行命令,得到报错:iptables v1.8.7 (nf_tables): unknown option "PREROUTING" - 使用原命令时:
得到报错:iptables -t nat -A PREROUTING -p tcp -–dport 80 -j REDIRECT –-to-port 8080iptables v1.8.7 (nf_tables): unknown option "-p" Try `iptables -h' or 'iptables --help' for more information.
问题根源
- 全角连字符坑:你的命令里
-–dport和–-to-port的第二个连字符是全角的,系统会把它识别成未知字符,这是导致-p被误判的原因之一; - nf_tables后端语法差异:你用的是
iptables-nft(基于nf_tables的iptables实现),它和传统的iptables-legacy在部分参数兼容性上有区别,同时REDIRECT目标的正确选项是复数形式的--to-ports,不是单数的--to-port。
正确的解决命令
先把全角连字符改成半角,再修正选项,正确的命令应该是:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
如果你的系统里iptables默认不是指向iptables-nft,可以直接指定后端:
iptables-nft -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
额外提示
- 别随便去掉
-p tcp:nat表的PREROUTING链需要明确协议才能正确匹配规则,去掉它反而会导致语法识别错误; - 区分后端类型:可以用
update-alternatives --query iptables查看当前默认的iptables后端,如果习惯legacy语法,也可以用update-alternatives --set iptables /usr/sbin/iptables-legacy切换,但更建议适应nf_tables,它是Linux防火墙的未来趋势。
备注:内容来源于stack exchange,提问作者Alex Anonym
相关产品推荐
相关产品推荐

