gxfxyz / unblockchn

Unblock CHN - Shadowsocks 回国解锁代理分流配置工具 (路由器 & Surge) - Unblock Youku 衍生工具
GNU Affero General Public License v3.0
166 stars 38 forks source link

iptables: No chain/target/match by that name. #1

Closed swbchangle closed 5 years ago

swbchangle commented 5 years ago

执行 iptables -t nat -A PREROUTING -p tcp -m set --match-set chn dst -j REDIRECT --to-port 1080 错误: iptables: No chain/target/match by that name.

我用的是改版梅林固件 380.70_0-X7.9 路由器:netgear R6300v2 iptables:1.4.14 ipset: 6.32 kernel: 2.6.36

http://ipset.netfilter.org/iptables-extensions.man.html

Use of -m set requires that ipset kernel support is provided, which, for standard kernels, is the case since Linux 2.6.39.

gxfxyz commented 5 years ago

你好,麻烦你在路由器上运行下 iptables -m set -h 命令,贴一下结果是什么。

因为需要依赖 ipset 来实现分流,如果确实你路由器的 iptables 不支持 ipset 扩展,那就没法使用此工具了。

swbchangle commented 5 years ago

你好@gxfxyz 感谢回复 iptables -m set -h

set match options:
 [!] --match-set name flags
         'name' is the set name from to match,
         'flags' are the comma separated list of
         'src' and 'dst' specifications.

感觉我的iptables 支持 ipset扩展

iptables -j REDIRECT -h

REDIRECT target options:
 --to-port**s** <port>[-<port>]
                Port (range) to map to.
 [--random]

我注意到,我路由器上需要--to-ports 而不是 --to-port,但是不管哪个都是一样的返回。去掉-m set --match-set chn dst命令可以成功,iptables -t nat -nL也能查到。

能不能告诉我 你的ipset, iptables 和 kernel 版本,谢谢

gxfxyz commented 5 years ago

我搜到一个相关帖: http://koolshare.cn/thread-70648-1-1.html

你这种情况似乎是因为你的路由器没有默认加载 ipset 相关模块 xt_set 造成的,你可以运行 modprobe -l |grep xt_set 命令查看下加载情况,以下是我的路由器上的输出结果:

$ modprobe -l |grep xt_set
kernel/net/netfilter/xt_set.ko

如果没有输出则说明还未加载,可以运行 modprobe xt_set 命令来加载试试。

然后再执行 iptables -t nat -A PREROUTING -p tcp -m set --match-set chn dst -j REDIRECT --to-port 1080 看看还会不会报错。

如果确实是这个原因造成的,你可以先手动把 modprobe xt_set 命令添加到 /jffs/scripts/services-start 启动脚本的前部,让路由器启动时自动加载 xt_set 模块。

我之后再更新下脚本,加入自动判断和加载此模块的功能。


也放上我的路由器信息供你参考:

swbchangle commented 5 years ago

admin@R6300V2-7236:/tmp/home/root# modprobe -l | grep xt_ kernel/net/netfilter/xt_comment.ko kernel/net/netfilter/xt_quota.ko kernel/net/netfilter/xt_NFQUEUE.ko kernel/net/netfilter/xt_hashlimit.ko kernel/net/netfilter/xt_length.ko kernel/net/netfilter/xt_socket.ko kernel/net/netfilter/xt_geoip.ko kernel/net/netfilter/xt_set.ko kernel/net/netfilter/xt_TPROXY.ko kernel/net/netfilter/xt_condition.ko kernel/net/netfilter/xt_dscp.ko 实在不行,我要换dd-wrt了, kernel版本高

gxfxyz commented 5 years ago

咦,看你 modprobe -l | grep xt_ 的结果是已经加载了 xt_set.ko 模块了,按道理应该是支持 ipset 的,还是报 No chain/target/match by that name 的错吗?

swbchangle commented 5 years ago

是的,还是报错。

已经刷好了dd-wrt, 还没试 linux kernel 4.4 ipset v6.34 iptables v1.4.21

dd-wrt 没有xt_set.ko.

gxfxyz commented 5 years ago

未能确认这个问题的根源,暂时关闭此 issue。

swbchangle commented 5 years ago

应该是我的梅林固件 kernel版本太低。 KernelNewbies: Linux_2_6_39

dd-wrt上安装新版ipset iptables 载入xt_set后,执行 iptables -t nat -A PREROUTING -p tcp -m set --match-set chn dst -j REDIRECT --to-port 1080 成功