qiwihui/hiwifi-ss

增加gfwlist模式(黑名单模式)

qiwihui opened this issue · 32 comments

问题描述

两种模式:

  • GFW 黑名单,访问名单中网站需要通过代理,不在名单中的网站直接访问
  • 白名单,即白名单中的网站不走代理,其它网站全部通过代理访问

现在的 hiwifi-ss 使用的是白名单模式。

解决过程

需要的大致工作:

  • 配置iptables支持黑名单规则
  • 使用 ss-tunnel 解析黑名单中域名的DNS
  • 自动更新gfwlist

非常希望作者增加黑名单模式:) @qiwihui

这块能否做成图形界面化一点,让码小白们,更容易点

非常感谢作者的无私奉献,很期待黑名单模式,因为目前白名单有很多可以直联的站都走了SS,而且速度变慢。要走SS的站无非就那么几个,有了黑名单就可以自己灵活定制,很方便。黑名单功能希望也做成窗口化操作,像高级功能里的一样,可以直接输入网址,点保存即可。

@dawnnao 请问如何手动更新gfwlist,第一次使用Linux,小白完全懵逼了如果方便,烦请告知更新的命令,谢谢

xuepg commented

请问白名单是哪个文件?可以手工修改吗?谢谢!

非常希望增加黑名单模式

黑名单模式。手动改。
`etc\init.d\gw-redsocks文件
将36-40行

	[ "$mode" != "1" ] && {
		iptables -t nat -A $appname -m salist --salist china --match-dip -j RETURN
	}
	
    iptables -t nat -A $appname -p tcp -j DNAT --to-destination $lan_ip:$rs_port_tcp

改为

	[ "$mode" == "2" ] && {
		ipset -N gfwlist iphash
		iptables -t nat -A $appname -p tcp -m set --match-set gfwlist dst -j DNAT --to-destination $lan_ip:$rs_port_tcp
        }

	[ "$mode" == "1" ] && {

		iptables -t nat -A $appname -p tcp -j DNAT --to-destination $lan_ip:$rs_port_tcp
        }
	[ "$mode" == "0" ] && {

		iptables -t nat -A $appname -m salist --salist china --match-dip -j RETURN
		iptables -t nat -A $appname -p tcp -j DNAT --to-destination $lan_ip:$rs_port_tcp
	}

将/usr/lib/lua/luci/view/admin_web/prometheus/index.htm
130-131行

                        <option value="0">智能模式</option>
                        <option value="1">全局模式</option>

改为

                        <option value="0">智能模式</option>
                        <option value="1">全局模式</option>
			<option value="2">黑名单模式</option>

将/etc/gw-shadowsocks/gw-shadowsocks.dnslist
替换为
使用gfwlist2dnsmasq.sh命令生成的list
./gfwlist2dnsmasq.sh -p 53535 -s gfwlist -o gw-shadowsocks.dnslist

还有需要更新/etc/gw-redsocks/gw-shadowsocks/gw-shadowsocks.dnslist #37 (comment) 1.06没有这个文件了,可以省略此步骤

添加域名过滤按照gw-shadowsocks.dnslist 格式添加。
特殊ip过滤将ip加入/etc/ipset.d/gfwlist.ipset 文本下。无此文本新建即可。
目测使用良好,极4最新版本测试通过。
改好之后使用国外的ip地址查询网页测试一下,智能模式显示的是代理地址,黑名单模式显示国内地址,google可以正常访问。bt电驴流量走国内地址,防止代理被查。

@pbbqdd 太感谢,很详细,一看就会,一用就明白,你使用的极4版本号是?还有hiwifi-ss是1.5还是?再次感谢

@q629988171 HC5962 - 1.4.5.19222s ,ss是1.5的。写的行号可能和实际有出入,因为是基于git上的写的,不是1.5版,具体根据内容查找替换。原文etc\init.d\gw-redsocks的更改代后码有点错误,现已更新。否则使用全局模式时可能有点问题。

系统版本 : HC5962 - 1.3.5.18462s
当前版本 : hiwifi-ss v1.0.5

  • 我也发现代码问题,最终修改和你一样,代码一个是没有闭合还有就是你说的全局失效
  • 还有需要更新/etc/gw-redsocks/gw-shadowsocks/gw-shadowsocks.dnslist 否则黑名单模式失效

@q629988171 应该是这样。

可以添加一个crond任务定期更新list

@pbbqdd 特殊ip过滤将ip加入/etc/ipset.d/gfwlist.ipset 是不是说,如果这个IP要走SS就添加到/etc/ipset.d/gfwlist.ipset ,如果不是我该怎么做,因为我发现添加进去并没达到预期效果。谢谢

@q629988171 正常来说ip写在里面就走ss,不写就不走。查看是否加载了这个ipset使用
ipset list gfwlist |grep *.*.*.*
看一下那个IP是不是在这个列表里。可能需要重启路由一下。也可以手动添加
ipset add gfwlist *.*.*.*
这个功能我最近才用到,所以这块我没太仔细测试。但是如果加到表里肯定应该是好用的。

@pbbqdd 重启生效 /etc/init.d/ipset restart,你有可能还需要重启SS /etc/init.d/gw-shadowsocks restart

还有以下IP归属国内需要删除,影响黑名单模式 【迅雷远程下载 插件管理】无法访问:
ipset del gfwlist {
123.59.148.73
123.59.148.66
123.59.148.68
180.76.244.74
36.250.7.227
36.250.7.226
123.59.148.72
117.27.142.39
10.9.1.150
192.168.199.1
}

还有这个 gfwlist 里面的IP是不是会自动生成,因为我发现 123.59.148.72(北京市大兴区 天地祥云BGP数据中心) 我已经删除,后面再次查询又回来

国内IP走SS显然不合理,现在还不太明白怎么产生这个问题。

找到原因:dnsmasq解析该域名,发现该域名在gw-shadowsocks.dnslist中,使用设置的安全DNS服务器进行解析,并将该IP加至gfwlist集合中

@pbbqdd 你好,按你分享的方法修改、添加黑名单模式后,发现黑名单模式连不上SS,路由器管理页面提示连接错误,智能模式和全局模式都能连上。请问最有可能是哪里出问题了?

@FengkuiChan 检查是否更新/etc/gw-redsocks/gw-shadowsocks/gw-shadowsocks.dnslist

@q629988171 两个地方都更新了

@FengkuiChan 在路由里使用ipset list gfwlist看一下是否有ip解析出来了。

@pbbqdd 运行ipset list gfwlist后返回以下结果:
root@Hiwifi:# ipset list gfwlist
Name: gfwlist
Type: hash:ip
Revision: 4
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 60
References: 1
Number of entries: 0
Members:
root@Hiwifi:
#

@qiwihui pbbqdd
我也是跟fengkuichan一样的
黑名单模式无效, ipset list gfwlist出来的结果也一样

@qiwihui
是的 两个地方我都更新了.
前面几行大概是:
server=/4tern.com/127.0.0.1#53535
server=/adorama.com/127.0.0.1#53535
server=/agnesb.fr/127.0.0.1#53535
server=/akiba-web.com/127.0.0.1#53535
server=/alien-ufos.com/127.0.0.1#53535
server=/altrec.com/127.0.0.1#53535
server=/arena.taipei/127.0.0.1#53535
server=/asianspiss.com/127.0.0.1#53535
server=/athenaeizou.com/127.0.0.1#53535

@voodoozz 更新后的大概格式应该是
server=/030buy.com/127.0.0.1#53535
ipset=/030buy.com/gfwlist


使用gfwlist2dnsmasq.sh命令生成的list
./gfwlist2dnsmasq.sh -p 53535 -s gfwlist -o gw-shadowsocks.dnslist
你确认是用gfwlist2dnsmasq重新生成的list么

@qiwihui 抱歉...果然是生成的list不对, 我再重新试试
谢谢

ReSur commented

sh gfwlist2dnsmasq.sh -p 53535 -s gfwlist -o gw-shadowsocks.dnslist
-s gfwlist 参数是必须的,否则输出格式不一样,黑名单模式无效提示“连接错误”

1.0.6下面黑名单模式不行了? 一直"连接错误", 其他两个模式都可以

1.06黑名单/etc/gw-redsocks/gw-shadowsocks/gw-shadowsocks.dnslist这一步可以省略。其他不变。更新后list需要重新用命令生成。

sh gfwlist2dnsmasq.sh -p 53535 -s gfwlist -o gw-shadowsocks.dnslist
我这边(B70)这样会出错,必须加上 --insecure,虽然直接浏览器访问没报ssh证书错误。
sh gfwlist2dnsmasq.sh --insecure -p 53535 -s gfwlist -o gw-shadowsocks.dnslist

1.08 中默认一键安装后,黑名单说绕开本地ip,但是设置了mac和ip都没法绕开。等于还局域网内所有客户端都会使用hiwifi里面的ss