随身wifi运行ShellCrash和AdguardHome
前言
上一篇文章中将随身wifi刷成了debian系统,本篇基于此为随身wifi安装ShellCrash和AdguardHome实现透明代理和广告拦截功能。(也可做为通用旁路网关的配置指南)
资源下载
UPX
官方下载:https://github.com/upx/upx/releases 下载 upx-xxx-win64.zip 文件
ShellCrash
官方下载:https://github.com/juewuy/ShellCrash/raw/master/bin/ShellCrash.tar.gz
Clash.Meta 内核
官方下载:https://github.com/MetaCubeX/Clash.Meta/releases 下载 clash.meta-linux-arm64-cgo-alpha-xxx.gz 文件
AdGuardHome
官方下载:https://github.com/AdguardTeam/AdGuardHome/releases 下载 AdGuardHome_linux_arm64.tar.gz 文件
ShellCrash
ShellCrash 安装
方式一
将下载的 ShellCrash.tar.gz 文件上传到/tmp目录下

执行
1 | mkdir -p /tmp/SC_tmp && tar -zxf '/tmp/ShellCrash.tar.gz' -C /tmp/SC_tmp/ && source /tmp/SC_tmp/init.sh |
选择1,在/etc目录下安装(适合root用户),1确认安装

将下载的 upx-xxx-win64.zip 文件解压,将下载的 clash.meta-linux-arm64-cgo-alpha-xxx.gz 文件解压 clash.meta-linux-arm64-cgo 到upx目录,打开cmd,执行
1 | upx --best clash.meta-linux-arm64-cgo |

将压缩好的 clash.meta-linux-arm64-cgo 上传到/tmp目录
方式二
一键命令
1 | export url='https://fastly.jsdelivr.net/gh/juewuy/ShellCrash@master' && wget -q --no-check-certificate -O /tmp/install.sh $url/install.sh && bash /tmp/install.sh && source /etc/profile &> /dev/null |
ShellCrash 配置
导入内核
1 | clash |
- 选择1,路由设备配置局域网透明代理;
- 是否开启公网访问Dashboard面板及socks服务,选择0;
- 是否导入配置文件,选择0;
- 立即启动clash服务,选择1;
- 欢迎使用导入配置文件功能,选择0 返回上级菜单;
- 发现可用的内核文件,选择1 加载;
- 请手动确定该内核类型,选择3 Clash.Meta内核

clash功能设置
- 选择2 clash功能设置
- 选择1 切换Clash运行模式 >> 选择5,Tproxy模式
- 选择2 切换DNS运行模式 >> 选择2 redir_host模式
- 选择7 屏蔽QUIC流量
- 选择0 返回上级菜单

设置定时任务
- 选择5 设置定时任务
- 选择4 设置定时更新订阅并重启服务
- 根据自己的习惯设置自动更新时间点
- 是否确认添加定时任务,选择1
如果已添加的定时任务里并没有刚设置的任务,应该是debian没有预装cron软件,退出clash,执行命令
1 | apt-get install cron -y |
上面的配置再来一次,正常情况下应该是这样的

更新/卸载
- 选择9 更新/卸载
- 选择7 切换安装源及安装版本 >> 选择5 公测版&Jsdelivr-CDN源(推荐)
- 选择4 安装本地Dashboard面板 >> 选择4 安装Yacd-Meta魔改面板(约1.5mb)
- 选择0 返回上级菜单
导入配置文件
- 选择6 导入配置文件
- 选择1 在线生成Clash配置文件
- 粘贴机场订阅链接
- 选择1 开始生成配置文件
- 是否启动clash服务以使配置文件生效,选择1

日志推送(可选)
- 选择8 其他工具
- 选择3 日志及推送工具 >> 选择2 Telegram推送
- 输入获取到的API TOKEN
- 我已经发送完成(1/0) > 1
选择节点
电脑浏览器打开上一步提示的网址http://192.168.31.19:9999/ui,选择左侧代理选项卡,展开自动选择,点右下角蓝色闪电就可以自动选出最快的节点了

ShellCrash使用
如何让其他设备使用随身wifi的透明代理?将其他设备和随身wifi连接同一个wifi,在设置里将IP设置的DHCP改为静态,IP地址手动设置一个没有被使用的IP(192.168.31.5),路由器以及DNS填写随身wifi的IP(192.168.31.19),前缀长度填24

推荐使用网站https://ip.skk.moe/,查看是否已实现透明代理
如果访问国内的网站正常,国外的网站仍然连接不上,可以选择节点、更新订阅排除一下机场的问题,如果还是连不上可以尝试将clash功能设置里切换DNS运行模式改回redir_host再试一下
机场节点不是瓶颈的话,YouTube 1440pHD还是没什么问题的,不过4K及以上就顶不住了,毕竟棒子性能还是有限的,对我来说也已经足够使用了
ShellCrash常用命令
1 | $clashdir/start.sh start #启动 |
zsh无法使用ShellCrash问题
现象
1 | # clash |
解决方案
1 | vim ~/.zshrc |
AdguardHome
AdguardHome安装
解压下载的 AdGuardHome_linux_arm64.tar.gz ,将解压出来的 AdGuardHome 上传到/etc/AdGuardHome/目录下(当然你也可以用UPX压缩一下再上传,不过AdGuardHome更新挺频繁的,我比较习惯更新它,也就没必要压缩了)
一条条地执行命令
1 | chmod 777 /etc/AdGuardHome/AdGuardHome |
如果前面安装没出什么错的话,用浏览器打开棒子ip的3000端口(http://192.168.31.19:3000)
- 点击开始配置
- 网页管理界面-监听接口 填3000
- DNS 服务器-监听接口 填53
- 下一步,设置账号密码,下一步,下一步,打开仪表盘,登入
第三步通常会提示53号端口已占用,使用命令
1 | netstat -tlnp|grep 53 |
查看占用进程,然后systemctl disable xxx, systemctl stop xxx
AdguardHome配置
进入设置–>常规设置
过滤器更新间隔改为7天,日志配置-查询日志保留时间 可以选择为24 小时,时间太长的话这个日志是很占空间的(可怜可怜棒子的8G硬盘吧),保存
进入设置 –>DNS 设置
- “上游 DNS 服务器”设置为:
1
127.0.0.1:1053
- 选择并行请求
- “Bootstrap DNS 服务器”设置为: 点击应用
1
2
3
4223.5.5.5
119.29.29.29
8.8.8.8
1.1.1.1 - “速度限制”输入“0”,勾选“启用 EDNS 客户端子网”和“启用 DNSSEC”,然后点击下方的“保存”
- 勾选“乐观缓存”,并点击“保存”
- “上游 DNS 服务器”设置为:
进入过滤器–>DNS 黑名单
添加黑名单,添加一个自定义列表
第二个“百万ADH广告拦截过滤规则”非常大,可能会很久没反应,耐心等待吧。这两个规则基本上就够用了,不想用这两个还有其他规则,《去广告通用规则,整合乘风规则 xwhyc 规则》
进入过滤器–>DNS 重写,推荐如下搭配:
域 IP地址或域名 dns.alidns.com 223.5.5.5 doh.pub 119.29.29.29 dns.google 8.8.8.8 dns.cloudflare.com 1.1.1.1 doh.opendns.com 208.67.222.222
然后去crash关掉DNS劫持
1 | crash |
如果配置对了,那么仪表盘应该就能看到在增长的DNS查询记录

AdguardHome常用命令
1 | /etc/AdGuardHome/AdGuardHome -s start #启动 |
shellcrash和AdguardHome共存原理
简单介绍一下为什么这么配置
首先dns默认工作端口为53,通常被系统自带的 systemd-resolved 或者 dnsmasq 占用,crash会劫持发往53端口的DNS请求然后然后进行后续一系列操作,此时是工作正常的只是没有广告拦截功能
目前我们希望达成的目的是DNS请求先经过AdguardHome过滤掉广告,剩余的请求再发往shellcrash(也即AdguardHome做下游,shellcrash做上游)
所以我们需要先把DNS请求交给AdguardHome,两种方式,一种是让adg工作在自定端口,然后劫持53端口转发至自定端口,另一种就是直接让adg工作在53端口。本文采用的是方式二,直接干掉本来工作在53端口的其他进程,让adg监听53端口
我们在adg网页端里设置了上游DNS为127.0.0.1:1053,意思就是经过adg过滤掉广告后的数据再发往1053端口,1053是shellcrash的DNS工作端口,可通过crash –> 7 内核进阶设置 –> 5 自定义端口及秘钥查看到
然后停掉crash的劫持DNS,即可实现 终端设备–>adg:53端口入口–>crash:1053端口入口 设想的数据流向