juewuy / ShellCrash

Run sing-box/mihomo as client in shell
9k stars 1.49k forks source link

[Bug] 清理shellcrash自建表在清理调用之前,导致sc退出后,几个chian还在 #740

Closed bsdcpp closed 2 months ago

bsdcpp commented 2 months ago

Verify steps

Description

start.sh,在清楚shellcrash_dns shellcrash shellcrash_out shellcrash_dns_out引用前清不掉,另外,建议麻烦能不能在iptables后面加个-w,防止和其他正在处理的含有iptables的脚本冲突,谢谢。

stop_firewall() { #还原防火墙配置
    #获取局域网host地址
    getlanip
    #重置iptables相关规则
    ckcmd iptables && {
        #清理shellcrash自建表
        for table in shellcrash_dns shellcrash shellcrash_out shellcrash_dns_out; do
            iptables -w -t nat -F $table 2>/dev/null
            iptables -w -t nat -X $table 2>/dev/null
        done
        for table in shellcrash_mark shellcrash_mark_out; do
            iptables -w -t mangle -F $table 2>/dev/null
            iptables -w -t mangle -X $table 2>/dev/null
        done
        #dns
        iptables -w -t nat -D PREROUTING -p tcp --dport 53 -j shellcrash_dns 2>/dev/null
        iptables -w -t nat -D PREROUTING -p udp --dport 53 -j shellcrash_dns 2>/dev/null
        iptables -w -t nat -D OUTPUT -p udp --dport 53 -j shellcrash_dns_out 2>/dev/null
        iptables -w -t nat -D OUTPUT -p tcp --dport 53 -j shellcrash_dns_out 2>/dev/null
        #redir

目前我本地用脚本修改,请大佬看看有没有问题:

sc_replace_iptables_w() {
    grep 'iptables -w' ${1} > /dev/null || sed -i 's/iptables\s\+-j/iptables -w -j/g;s/iptables\s\+-t/iptables -w -t/g;s/iptables\s\+-I/iptables -w -I/g;s/iptables\s\+-A/iptables -w -A/g;s/iptables\s\+-D/iptables -w -D/g;' ${1}
    grep 'ip6tables -w' ${1} > /dev/null || sed -i 's/ip6tables\s\+-t/ip6tables -w -t/g;s/ip6tables\s\+-I/ip6tables -w -I/g;s/ip6tables\s\+-A/ip6tables -w -A/g;s/ip6tables\s\+-D/ip6tables -w -D/g;' ${1}
}
4个文件需要处理
sc_replace_iptables_w start.sh
sc_replace_iptables_w menu.sh
sc_replace_iptables_w update.sh
sc_replace_iptables_w init.sh
s1oz commented 2 months ago

同样的情况,请求增加-w参数

juewuy commented 2 months ago

这个清不掉的原因是什么?添加-w能解决问题吗?

bsdcpp commented 2 months ago

这个清不掉的原因是什么?添加-w能解决问题吗?

是两个问题,清不掉应该是顺序问题,就是这个表里的shellcrash_dns链还有引用,导致删不掉,应该放到下面去就可以了。 -w主要是某些系统定时任务也在随机执行iptables任务,碰到一起就会报错,加了-w(wait的意思吧)就会等待另一个释放锁后执行。