WSL2中Ubuntu16.04执行iptables CONNMARK规则报错“No chain/target/match by that name”求助
WSL2中Ubuntu16.04执行iptables CONNMARK规则报错“No chain/target/match by that name”求助
我完全理解你现在的困扰——明明搜了一堆相关问题都没找到解决办法,而且查iptables -j CONNMARK -h能看到完整的扩展选项,说明这个模块应该是编译好的,但一加上--set-mark的规则就报错,确实挺闹心的。
先帮你梳理下目前的情况:
- 你执行的报错命令:
sudo iptables -w -t nat -A PREROUTING -s 100.64.0.8 -j CONNMARK --set-mark 25119,返回错误:iptables: No chain/target/match by that name. - 排查发现单独执行
sudo iptables -w -t nat -A PREROUTING -s 100.64.0.8没有报错,说明PREROUTING链、源地址匹配这些部分都没问题; - 你的环境是WSL2上的Ubuntu 16.04,iptables版本为1.6.0-2ubuntu3。
针对这个问题,我给你几个具体的排查和解决方向,你可以逐一尝试:
- 检查CONNMARK内核模块是否加载:WSL2的内核默认可能不会加载所有iptables相关模块,你先执行
lsmod | grep xt_connmark看看有没有输出。如果没有任何内容,说明模块未加载,手动执行sudo modprobe xt_connmark加载模块,之后再重新运行原来的iptables命令试试。 - 更新WSL2内核版本:Ubuntu16.04搭配的旧版WSL2内核可能存在iptables扩展的兼容性问题,你可以在Windows端通过Windows Update检查并安装系统更新(包含WSL2内核更新),或者手动下载最新的WSL2内核安装包进行更新,更新完成后重启WSL2再测试。
- 尝试明确指定掩码参数:你可以把命令修改为
sudo iptables -w -t nat -A PREROUTING -s 100.64.0.8 -j CONNMARK --set-mark 25119/0xffffffff,明确加上全1的掩码值,看看是否能绕过报错。 - 换mangle表测试功能:试试在mangle表执行类似的标记命令:
sudo iptables -t mangle -A PREROUTING -s 100.64.0.8 -j CONNMARK --set-mark 25119,如果这个命令能成功执行,说明nat表对CONNMARK的支持存在限制,你可以考虑先在mangle表完成连接标记,再在nat表根据这个标记做后续的规则配置。
备注:内容来源于stack exchange,提问作者Rostyslav
相关产品推荐
相关产品推荐

