NEWiFi D2 成都谛听 MT7621 无线路由刷 Breed & OpenWrt

万能某宝,这款 512M 内存 32M Flash 的“大家伙”,带运费 xxx 元。从“占地面积”而言,和之前买的同样 512M内存的香橙派真的是一个天上一个地下。店主有刷好的版本的,为了自己动手,买了崭新的版本,我们自己动手刷 Breed。

按 reset 开机,进入 192.168.1.1 的界面是原生的固件更新界面,不敢造次直接在这个界面刷 Breed。

翻了几篇文档,一个是有一个可执行文件 .exe 直接在 Windows 命令行下执行,应该是 Python 写的,开启路由器上 ssh 成功后,写入什么东西的时候报 404 错误,应该是什么地方下载的目录不对还是怎样,就忽略了这个方法。

既然已经可以 ssh 了, 理论上来说, 我们可以用 mtd 命令直接刷。 root 登录后,看到了潘多拉的界面:

另外一个刷入 Breed 的办法是下载一个 newifi-d2-jail-break.ko 文件,以内核模块的方式刷, 下载完后, 把文件 scp 到路由器 /tmp 目录下, 运行 insmod newifi-d2-jail-break.ko ,过一会儿路由自动重启后,就可以进入原来的潘多拉。这个时候,再按 Reset 重启,就可以进入 Breed 了。 去 Openwrt 官网的 TOH 页面搜索 “Newifi” 就可以找到最新版本的固件,下载完后, Web 端就可以用 Breed 刷入 OpenWrt 了。

FreedomBox 自由的盒子

去他们家官网下载了一个 x64 IMG,放到了 Proxmox 里,DHCP 拿到了地址,并能解析,通过 PVE Web Console 界面登录,以为有默认的 root 口令,然而我错了,原来是要通过浏览器来设置第一次登录的,这个主意好!
FAQ 介绍很详细。

然后去安全选项把限制控制台访问的打勾去掉后,就可以用创建的 Web 账号 ssh 登录操作系统了。

Web 界面上搞了一堆 App 可以下载, 但是真心不适合国内用户。


系统配置里的功能也乏善可陈

只是好奇这个产品从 2013年的 0.1 版本,到现在还在一直更新。

定制自己的 OpenWrt

每次安装 OpenWrt, root 口令都是空的,然后每次进入都是需要手工设置一把;每次都要修改时区;我们想把 OpenWrt 的“主机名”修改为自己的品牌名称;我们还想修改 ssh 登录的 Banner … …

下载 ImageBuilder 是最快定制自己 Image 的办法。不同的 Target , 这个 ImageBuilder 也会不一样,例如 香橙派 Zero 的文件是:openwrt-imagebuilder-sunxi-cortexa7.Linux-x86_64.tar.xz 所以,我们需要先选择好 Target。所有不同的 profile 其实在 .targetinfo 文件里都有定义。选择到合适的 target profile 后,我们只需要运行
# make -j 4 image PROFILE=”xxx” PACKAGES=”xxx xxx ” FILES=”xxx” 即可安装指定的软件包,并把额外的文件在 FILES 路径下包含进来。另外,要用国内的源:中科大: http://mirrors.ustc.edu.cn/lede/releases/18.06.5/targets/x86/64/ 更新 repositories.conf 把其中的 downloads.openwrt.org 修改为:mirrors.ustc.edu.cn/lede

默认刷的就是 snapshot 版本, 不带 Web 界面的, 要刷 Web 界面,进入 ssh 后运行:
# opkg update; opkg install uhttpd uhttpd-mod-lua luci-i18n-uhttpd-zh-cn luci-theme-bootstrap luci-i18n-base-zh-cn

在想到要修改这些东西的时候,我们需要知道这些东西其实是在一个 /bin/config_generate 里面完成的,就让我们先从这个脚本开始,顺藤摸瓜来解剖 OpenWrt 吧。开头的这几行就是说,如果系统已经初始化过了,就不执行这个脚本了。反过来说,如果我们要初始化板子,直接删除 /etc/config/network 和 /etc/config/system 两个文件,然后执行 config_generate 就好。

在开发过程中,为了每次烧写后有自己网络的 IP 地址,我们把原始的 192.168.1.1 修改了一下。也就是说,如果不想让 OpenWrt 默认 IP 是 192.168.1.1 我们可以修改为其他的 VLAN。

系统名和时区,也可以在脚本里直接修改,注意上海是“UTC-8”哦!(里面的 CST 其实也只是显示为 CST 而已,你可以写任意其他的名字,但是 -8 不能修改)

修改登录的 Banner 当然是 /etc/banner 文件。

那 root 口令怎么初始化呢?我们只能手工生成一个带有 root 口令的 shadow 文件,覆盖初始化时的 /etc/shadow ,这样就完成了以上这些初始化需要注意的步骤。

如果板子是从 SD 卡启动的话,一般 SD 卡是从 img 文件直接用 dd 命令烧写的。烧写完后,挂接 SD 卡的第二个分区(根文件系统分区),用脚本修改 /bin/config_generate ,然后 unmount ,也算一种方法。

另外一种比较正式的方法就是修改包文件 base-files.ipk ,我们现在进阶到 opkg 软件包的解剖了。 ipkg 文件实际上就是一个 .tar.gz 文件。

我们用
# zcat base-*.ipk |tar xvf –

就能得到三个文件:

  • ./debian-binary
  • ./data.tar.gz
  • ./control.tar.gz

其中 data.tar.gz 就是所有这个基本包的文件,包含了这个 /bin/config_generate 脚本。我们把 data.tar.gz 包内的文件解开来,可以看到基本上都是 /etc 下核心的内容。

这里有一个我们认为比较核心的脚本是 ./lib/functions/uci-defaults.sh , 我们可以看到,其实板子启动后会自动往 /tmp/sysinfo 目录里写一些文件的,然后后面的这些启动脚本会读取里面的信息,做对应的处理。

总结:实际上修改包文件其实不符合常规的整体的包的完整性,所以,在实际的操作中,为了烧写定制的 SD卡,我们完全不必定制自己的 ipk 文件,而是用官方的 img 文件烧写完毕后,挂接第二分区,再修改相应的文件,反正烧写完以后,SD 卡是必须扩容的。所以,这个修改文件的动作,也不过是顺水推舟而已。

怎么用脚本自动扩展SD 卡的分区?且听下回分解!

再聊 DNS 加密以及广告去除以及黑名单

DNS 黑名单其实是一个很重要的话题,很多人往往忽略。曾经在北美某电子商务大厂(不是A)和内部信息安全部门有业务交往,我们被要求管理一个 DNS 黑名单,在公司内部遇到此类域名解析,一律定向到内部的一个域名,在上面有一个 Web 页面,当然是警告了。

如果企业内部的 DNS 都是自己解析,并且能维护一个黑名单的话,基本上 90% 的网络安全事件都是可控的。 甚至还可以做很多类似 GFW 在做的事情,把 Google.com 给你一个某度的地址。

所以说,你可以脑补一下,这个 DNS 是多么神奇的事情,可以把不想给你看的东西去掉,所以,广告以及有病毒的恶意网站域名都是第一批次就被过滤的。

说了那么多,技术上怎么实现呢? 企业内部有 IT 可以做自己的 DNS 服务器,个人家庭网络,要怎么做才能过滤广告,才能安心看片呢?

基本上,你需要一个能安装 Linux 的小盒子,放在光猫旁边,把光猫的 DHCP 功能去掉,把这个 Linux 小盒子通过无线或者有线连接到光猫上,然后 Linux 上启动 DHCP 和 DNS 服务功能。

那么这个 Linux 小盒子,有哪些不同的实现形式呢?最常见的就是能刷机的路由器,例如斐讯的K2 比较常见,华硕的很多也能刷机。这里列出一个能刷 OpenWrt Linux 操作系统的最新版本的一些无线路由器列表,最后两列为 Flash 和内存是购买时要主要考虑的。

我们知道,我们上网时,一般都是要走运营商的 DNS 来解析的,就算我们不使用运营商的,很多人会使用公共 DNS 服务器, 例如 114.114.114.114,但是他们并不能保证我们的 DNS 解析是安全的,而且类似 Google 的域名也是基本被“拐”的,就算有的人知道使用 Google 的 DNS 服务器 8.8.8.8/8.8.4.4 ,但是 DNS 解析本身是不安全的,也就是说,你看过的网站,运营商还是能知道你访问了哪些网站。

那怎么解呢?我们就需要在 Linux 小盒子上安装 Go 语言编写的 DNSCrypt-Proxy 这个免费软件。通过名称就可以知道,它是对 DNS 解析做加密的,能从网络上已知的 DNS 加密服务器上做解析,完全绕过了运营商,而且做了加密。

安装了这个软件,指定了黑名单以后,你就会感觉网页是清爽很多,没有什么狗皮膏药了。

譬如我们看 YouTube,按 F12, 就可以看到很多被屏蔽的域名。

譬如我们看新浪的一则新闻,屏蔽的内容就更多

指定黑名单其实不难, git clone 项目地址,里面有一个公共的黑名单清单, util 目录下还有一个 Python 脚本能自动生成这个黑名单。

企业和个人对这个方案有兴趣的可以关注我们公众号,并留言哦!

DNSCrypt 的黑名单机制,能有效的去除广告以及恶意网站。 不过,对于有些原生的广告图片嵌入, DSNcrypt 确实还是没有效果的,因为此类广告和页面内容的域名是同一个,你总不能因噎废食,把所有正常内容都过滤掉吧。 所以 DNSCrypt 是一个小盒子上的“硬件”解决方案,对于此类特殊的过滤,还是需要浏览器里的广告去除插件来进一步净化环境。

以 Sohu.com 首页下半部娱乐版块内嵌的广告为例,这是使用了 Adblock 以后什么广告都没有的情形:

这是没有使用 Adblock 插件时,小部分广告图片依然有展示。

OpenWrt 树莓派 根文件系统大小的调整

在一台 Linux 机器上,当我们用 dd 命令把 OpenWrt 的操作系统 img 映像文件写入到 Micro SD 卡的时候,根文件系统默认只有 104M。

在系统还没有进一步更新之前(SD 卡还插在 Linux 机器上),我们实际上应该先扩充根文件系统,否则后面也要走这一步的。 设SD 卡盘号为【/dev/sdb】

删除第二个分区,重新建一个第二分区,设置起始扇区为原先的扇区号,结束为默认。

新建完以后:

然后运行 resize2fs /dev/sdb2 就可以。
挂接后确认文件系统已经是 15GB:
# mount /dev/sdb2 /mnt
# df -h /mnt

把 SD 卡插回树莓派,启动验证。