我收到此错误:
$ iptables -t mangle -A PREROUTING -d 224.0.0.251 -j TTL --ttl-inc 1
iptables v1.8.7 (nf_tables): unknown option "--ttl-inc"
Try `iptables -h' or 'iptables --help' for more information.
然而在man iptables-extensions
我看到--ttl-inc
定义。尝试在网络上搜索,但没有找到答案。请指教。
$ uname -a
Linux base 6.2.0-26-generic #26-Ubuntu SMP PREEMPT_DYNAMIC Mon Jul 10 23:39:54 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 23.04"
NAME="Ubuntu"
VERSION_ID="23.04"
VERSION="23.04 (Lunar Lobster)"
答案1
可作为非 root 用户重现iptables版本1.8.7:
$ /sbin/iptables -t mangle -A PREROUTING -d 224.0.0.251 -j TTL --ttl-inc 1
iptables v1.8.7 (nf_tables): unknown option "--ttl-inc"
Try `iptables -h' or 'iptables --help' for more information.
iptables尝试使用扩展时检测到问题并失败,但未正确检查这是由于缺乏这种情况的访问权限而导致的,并显示误导性消息。使用/sbin/iptables -t mangle -A PREROUTING
不使用扩展的简单gets iptables v1.8.7 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)
。
这个特定的“bug”在以后的版本中得到了修复(这将在 Ubuntu 的未来版本中提供):
$ /sbin/iptables -t mangle -A PREROUTING -d 224.0.0.251 -j TTL --ttl-inc 1
iptables v1.8.9 (nf_tables): Could not fetch rule set generation id: Permission denied (you must be root)
人们应该知道这样的管理命令必须以 root 用户身份运行。 Morover,iptables
位于系统命令路径(/sbin
,/usr/sbin
...)中,因此默认情况下不应找到(OP要么没有复制/粘贴完整的/sbin/iptables
命令/usr/sbin/iptables
,要么更改了PATH
环境变量)。问题中的提示仍然$
暗示是非 root,即使这不是值得依赖的东西。
作为 root 用户(使用sudo
,su
或者即使unshare -Urn
允许),该命令当然会按预期工作。