Closed semigodking closed 4 years ago
ts-dns
执行的ipset命令在不同的ipset版本上可能会有不同的行为。目前ts-dns
使用的第三方库go-ipset暂不支持在已有ipset上进行操作,所以最好不要手动创建同名ipset。
如果想让ts-dns
能在启动时自动删除已有ipset,请提供ipset版本和已有ipset创建流程。
谢谢
我测ipset的问题测好久,尤其开机自动启动时iptables跟ipset会互相牵制。 之前要启动ts-dns、sleep几秒钟、等ts-dns建立好ipset,才能写iptables指令。不然不照这个流程,就是iptables指令写不进去,或ts-dns启动失败。
后来发现关闭ts-dns之后,ts-dns建立的ipset不会被删除。即使存在旧的ipset,也可以再次顺利开启ts-dns。 可能只是之前自己手动建立的ipset跟ts-dns建立的ipset格式不同,才会启动失败。
解法是: ipset save > /tmp/ipset.list 看里面有一行是 create blocked hash:ip family inet hashsize 1024 maxelem 65536 timeout 0 "blocked" 是 ipset 的名称。 (写 ipset -N blocked iphash ,与ts-dns建立的ipset格式不同) 把ts-dns建立的这行存到 任意路径 例 /etc/ipset.list 开机时运行 ipset restore < /etc/ipset.list
这样即使已经存在ipset了,ts-dns都可以正常启动了。 也不用担心还没建立好ipset,iptables会写不进去。
这个ipset是我提前创建好的。但文档提到,ts-dns启动时会覆盖已有的ipset的。这个行为好象和说明不一致。请问会是什么原因?有什么方法可以绕过吗?