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 了。

定制自己的 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 卡的分区?且听下回分解!

香橙派 Pi Zero Plus 上手记

废话不多说,树莓派玩了几台,之前买的是 Google AIY,还托兄弟从美国买了4台,69美刀一台,送了2台,自己留了2台,号称有 Tensorflow Lite 版本。但是自己没时间玩。后来又买了树莓派 4B,1G 内存的各种操作系统刷。 打算做一款屏蔽广告的产品,先要低成本啊, 搜到了老外用 Aliexpress 买的 Pi Zero,再一搜原来是深圳迅龙的产品,当然是挑 100 RMB 内的产品买,而且是要有有线网口的。所以就选了 Zero Plus。坑的是支持的操作系统版本没几个。 Arch Linux 的下载只有 135M,所以先从 Arch Linux Server 开始干起。

安装软件包,一定很慢, 所以先找国内的镜像, 国内有清华的,中科大的, 我们就把 /etc/pacman.d/mirrorlist 第一行修改为:
Server = https://mirrors.ustc.edu.cn/archlinuxarm/$arch/$repo
然后 pacman Syuw 就可以去掉那个更新时的因为 ca-certificates 的冲突报错的问题。


再返回去,说一下板子的镜像烧写问题,因为有之前树莓派的经验,所以,手册也没看,就下载了其他不相关的镜像,导致以为板子坏了,投诉了售后的黄小姐,在她热情的指点下,终于明白了,这个板子是必须插 SD 卡才能会亮灯的。正常的启动后是 DHCP 拿地址的,然后板子是红灯亮,网口灯黄灯亮(100M?),绿灯闪。
吐槽一下他们家的百度下载,那个百度网盘实在坑爹,从 Google 网盘下载都有 4M每秒,可是百度上就只能是 100多 Kb/秒。

然后就是 pacman -S vim sudo proxychains dnsutils 等各种工具了

且慢! 磁盘空间不够了!根文件系统只有 1.1G,已经 100% 满了!

这个难不倒我们, 把 SD 卡拔出来放到一台 Linux 机器下, 用 fdisk 删分区,建分区,扩展,然后挂接, growfs 就可以。

敲入 shutdown -h now,Zero+ 就自己灭灯了, 只有绿灯还常亮。拔卡!

前面具体删分区,建分区的步骤就是比较简单, 建分区的时候要注意起始扇区要用前面删除之前的那个起始扇区号,其他都是默认就可以。 然后挂接到 /mnt 的时候,可能会遇到超级块错误,也不要慌, 先用 fsck.ext4 -y /dev/sdb2 来做好 fsck 就可以挂接了。 我们看下挂接好之后, resize2fs 前后的磁盘空间

好了, SD 卡已经扩容完毕,我们umount /mnt; eject /dev/sdb 把 SD 卡插回 Pi Zero+

接下来就是安装其他软件的事情了,我们且听下回分解 … …

斐讯 K2 的不死鸟刷机-科学上网和广告屏蔽

无线路由器刷机的核心需求是科学上网和广告屏蔽,同时一定是为局域网内,整个家庭或者小型办公室使用。我们用 SS-libev + polipo + wpad 的方案实现了客户端的无感“上网”

心急要吃热豆腐的,请直接拉到文章底部,看大总结

不死鸟指的是 Breed Boot-Loader 引导固件,和我们要刷机的操作系统固件不是同一个东西。本文假定你已经刷好了 Breed,就是下面的这个截屏。

假定你已经刷好了 Breed 不死鸟,然后你就可以无限制的刷各种操作系统,不喜欢老毛子就刷 OpenWrt/LEDE,也可以刷梅林。 系统启动不了,就换一个再刷。

刷操作系统的办法很简单,把 PC 电脑的网线直接连接 K2 的 LAN 口, K2 的 WAN 口连接到能上网的路由器的 LAN 口(也可以不连),PC 电脑的 Wi-Fi 连接能上网的 SID,如果 DHCP 有冲突的话(一般肯定会冲突,PC 的有线会拿到 192.168.1.2,无线会拿到 192.168.1.3),可以设置 Wi-Fi 为能上网的 VLAN 里的静态 IP,设置好网关和 DNS ,保证刷机中的电脑能同时上网。当然也要保证能上网的无线环境里使用的不是 192.168.1.x 的网段。

斐讯 K2 是 MT7620A 的 CPU,主频是 580MHz,内存是 64M,Flash (可以理解为是电子硬盘)只有 8M。也就是说,我们要把操作系统放到只有 8M 的 Flash 里。

现在是选择合适的操作系统,刷机了,点 “固件更新”,选择“固件”,从 PC 上选择固件的文件。


我们选择老毛子的固件: RT-AC54U-GPIO-1-PSG1218-64M_3.4.3.9-099.trx

刷新完成后,去 Windows 的网络,查看有线网卡拿到的 IP 地址,如果没有拿到,可以重新插拔网线或者重启 K2,如果还是没有拿到 IP 地址,那就重新刷(不用怕)。你总是可以拿到 192.168.1.2 的 IP 地址的。

譬如刷的时候选择了错误的 Flash 布局(应该选公版),刷完后,PC 报告网线没有连接,说明 K2 根本就没有启动,不用怕, 重新插入电源线的同时按住 reset 10秒左右放手,192.168.1.2 又回来了。

我们换一个官方的 OpenWrt Snapshot 版本刷一下,固件文件是 openwrt-ramips-mt7620-phicomm_psg1218a-squashfs-sysupgrade.bin

刷完后,因为我们刷的是 snapshot 版本,所以不带 web 界面,我们只能 ssh root@192.168.1.1 (没有密码),就可以进入 OpenWrt 的 console 了。 用 opkg 命令就可以安装 web 界面

OpenWrt Snapshot 版本 比较适合有一定 Linux 基础和网络基础的大咖玩,基本都是需要自己琢磨,自己定制,而且最坑的是 8M 的 Flash 实在太小,老毛子从内存里挖了空间给操作系统使用,把配置保存到NVRAM(掉电能保留),然后下次重启又从网上下载 /opt 下的内容,恢复配置,基本原理就是这样,都是为了解决只有 8M 的痛苦。

在详细阐述老毛子 Padavan 之前,我们刷一个梅林,其实是华硕的一个自定义版本,看下界面。 固件文件名:RT-ACK1_K2_3.0.0.4_380_8228-g3af35f9.trx,大小 6.18M

刷完梅林,PC 拿到的地址是 192.168.1.112,网关还是 192.168.1.1,我们在浏览器输入 http://192.168.1.1/ 就看到梅林的界面了:

如果这个时候 WAN 口连接了能上网的路由器的 LAN 口, K2 就能自动上网了, 连接在 K2 LAN口的 PC 自然也能通过有线上网了, 配置好密码和无线后,会自动检测到有新的固件,然后选择自动升级固件。也就是说 K2 是和华硕的 AC54U 是完全兼容的。

梅林的这个固件连 telnet 设置允许也报错,界面也没有 ssh 登录的设置,其实和普通的路由器没啥区别,不建议刷。

回头再说老毛子,刷完老毛子后,有线网卡拿到的是 192.168.123.x 的地址,网关是 192.168.123.1 ,在浏览器输入 192.168.123.1 ,弹出窗口输入用户名和密码都是 admin

真心讲,里面设置 SS 的界面太复杂。

由于我们的境外服务器开启了 kcptun,所以尝试把里面的 kcptun 打开,然后 SS 走 kcptun,发现小小的 64M 内存根本就不够用,就连 nslookup 也返回一些莫名其妙的地址。

可以说, 整体的老毛子固件在 K2 这台小机器上捉襟见肘,根本就无法有效的开启里面的诸多功能,特别是核心的 SS 功能(带 KCPTUN)。

在开启 Adguard Home 做广告屏蔽的时候,如果是 nslookup 一个屏蔽的域名, DNS 查询极其缓慢。 我们回头在 x86_64 的 Ubuntu 虚拟机平台上来评估 Adguard Home。 现在让我们把 K2 切换到一个旧的OpenWrt 固件,也就是刷机自带 Web 界面的固件。

我们去 OpenWrt 的硬件下载列表,搜索 PHICOMM ,K2 PSG1218 就是我们要找的,写稿时的最新版本是 18.06.5 。刷完以后,浏览器访问 192.168.1.1 ,用户名 root ,密码为空, 也可以命令行直接 ssh root@192.168.1.1 登录 OpenWrt 。

Web 界面是这样子的:

和老毛子不同,这里有另外一个坑就是根文件系统只有 3.8M 空余了,几乎不能安装什么大的软件包了。 如果要安装广告屏蔽,要安装 VPN ,要安装科学上网,几乎是不可能的事情。

但是,中文界面总是需要安装的,运行:# opkg update; opkg install luci-i18n-base-zh-cn,刷新 Web 界面,我们就看到中文了。如果还没有的话,去顶上 System 菜单,下拉,选择 System,选择 Languange ,看看是否有中文。

搞完了以上的事情, 只是一个基本的无线路由器的设置,和上面提到的梅林以及其他任何不能刷机的路由器买来的功能是差不多的。只不过多了能直接 ssh 进入操作系统修改。

最核心的就是要科学上网,本身就要好多种不同的技术,从最原始的 SS 版本, 到国人后来开发的 SSR (加了混淆),到一个 SS-libev(适合嵌入式,例如路由器)的版本,到后来 KCPTUN 底层 UDP 协议加速,到其他各种加速方案,到后来V2RAY 用 vmess 协议。但是盒子太小,各种进阶方案对内存的要求太大。

让我们先从相对比较小占用资源的 libev-local 开始,运行
# opkg install shadowsocks-libev-ss-local luci-app-shadowsocks-libev

安装完以上两个软件包后,我们还有 2.9M 的磁盘空间,刷新Web 页面,可以看到多出一个服务菜单,下拉以后可以看到 SS-libev 的配置。我们只安装了 ss-local,因此,我们就去配置 ss-local 这部分,先去 Remote Servers 添加墙外的服务器信息(墙外怎么搭 SS-libev 服务器就不展开了),千万不要忘记把那个“禁用”的勾去掉。保存并应用后去修改 “Local Instances”,其实啥也不用做,因为直接选默认就可以,也就是侦听在所有网口上的 1080 socks5 标准端口。启用这个 ‘local instance’。进入 Firefox 浏览器,选择 socks5 代理,配置 192.168.1.1 1080 端口,如果能访问 Google , 那就是科学上网成功了。 这个无线路由器后面的任意设备,只要设置好 socks5 代理服务就可以上网了。


以上介绍的是 SS-libev。 我们尝试一下 V2ray 。Github 上把这个 12M 的“大家伙” 下载到 PC 端,然后从 OpenWrt 上把文件 scp 到 /tmp 下, 尝试用 opkg install v2ray-core_4.21.3-1_mipsel_24kc.ipk , 显然由于根文件系统只剩余 2M,根本就是徒增烦恼!

接下来我们尝试安装 kcptun 的客户端,去 github 下载 mipsel_24kc 版本,2.39M,看上去还能放到我们的 Flash 里,但是安装到一半还是说磁盘空间不够啊!

接下来,我们尝试用ram-root 的一个工具,利用 NFS 服务器来扩充根文件系统
# opkg install kmod-fs-nfs kmod-fs-nfs-v4
配置好 /etc/ram-root/ram-root.cfg 里面的 NFS Server 信息

可以看到根文件系统有 10M 了, 我们就可以安装 kcptun 了。安装结束我们发现根文件系统使用了 6.8M,很明显这么大的一个东东是不可能全部放到 8M 的 Flash 里的。 因为在家庭环境里, 我们不可能去挂接一个 NFS 哪怕 CIFS 上一个 Windows Share 都不太可能,这就是为什么老毛子采用了 optware,从内存里挖出空间给 root,然后每次启动都要从网上重新下载一堆软件。

为了简化客户端需要设置 socks5 的步骤,我们安装一下 polipo 这个 socks5 转 http 的代理软件:
# opkg install polipo luci-app-polipo luci-i18n-polipo-zh-cn
刷新 K2 的 Web 界面,我们可以在服务下看到 polipo 的配置,配置上游服务器为 127.0.0.1:1080 保存并应用,我们去 Firefox 设置 http 代理为 192.168.1.1 8123 去掉原先设置的 SOCKS 代理配置

Polipo 的 Web 界面设置实际上是有问题的,我们需要手工做几步动作,上游服务器的配置是 socksParentProxy 和 socksProxyType,这个需要用 uci 命令或者直接编辑 /etc/config/polipo 配置文件解决。底下大总结里详细介绍。

然后打开 http 代理, 不能解决 DNS 解析被墙的服务器的问题,因此我们需要安装 DNS 加密服务:
# opkg install libustream-openssl dnscrypt-proxy luci-app-dnscrypt-proxy
安装完毕后,会自动配置 dnsmasq , 转发到 5353 端口。
这一步很关键,如果这一步搞错了, 会导致 K2 无法连接网络,因为 DNS 解析出错了, 其实你也可以手工修改 /etc/resolv.conf 文件, 把 nameserver 从 127.0.0.1 修改为譬如 114.114.114.114 即可恢复网络,后面重启路由, nameserver 会自动更新成 127.0.0.1 的。

我们去”系统”=》“启动项”把 dnsmasq 重启一下。

接下来我们添加一个 wpad ,就是 Web Proxy Auto Discovery,我们需要添加一条wpad 的主机名记录,指向 路由器的 LAN 地址,就是 192.168.1.1 ,然后把外部生成的一个 wpad.dat 文件拷贝到 /www 目录下,然后去 Firefox 或者 IE ,或者手机端 Wi-Fi 连接后,把代理修改成自动发现即可。

IE/Chrome 的配置:由于 uhttpd 不支持 mime type 的问题,这里的“自动检测设置”截屏是错的,在 K2 上无法使用。要使用下面的这个正确的截屏。

左侧为错误的截屏,正确的设置是下图

iPhone Wi-Fi 的配置:点击连接上的 Wi-Fi 的右边 i 那个标记,进入详情,拉到最底下,点击进入配置代理,把“关闭”,设置成“自动”,然后返回就可以。截图里的 IP 不是本演示的 IP ,请忽略。同样的因为 K2 上 uhttpd 原因,iOS 上配置自动代理,还需要输入 wpad.dat 文件的 URL.

那么这个 wpad.dat 文件怎么生成呢? 网络上有一个 Python 写的 genpac 的脚本,会自动下载 gfwlist ,然后生成符合要求的 proxy 代理 js 脚本。语法如下:
# genpac –pac-proxy ‘PROXY 192.168.1.1:8123; HTTPS 192.168.1.1:8123; SOCKS5 192.168.1.1:1080’ -o wpad.dat

其实 DNSCrypt-proxy 还有黑名单功能,能过滤广告和恶意网站。上面列出的一个专门为中国用户的项目比较好。运行其中的 .sh 脚本就能自动生成配置文件。

通过以上步骤,我们就把一台只有 8M Flash 的斐讯 K2 刷机成为具有科学上网,广告过滤核心功能的强大路由设备。

大总结

K2 甚至包括所有市面上 1000 元以下的无线路由器,基本只能涵盖50人以下的使用,K2 的能力不会超过 20人同时使用。所以基本上我们介绍的解决方案仅仅用于家庭和小企业的上网使用。对于几十人甚至上百人的企业的上网需求,我们可以采用高可靠的免费集群解决方案,把路由和代理等功能,可以通过 OpenWrt 或者 Ubuntu 或者其他 Linux/BSD 兼容的操作系统,为企业员工提供强大的,安全的,可靠的,带有广告稿屏蔽功能的网络连接,让企业员工专心工作,不为广告所打扰。

以上的步骤其实有点繁琐,还介绍了其他和 OpenWrt 不相关的一些内容。我们写了一个简单的部署脚本放到了github,希望能帮助到您。

上面提到的 polipo 的上游 socks5 服务器的配置,需要用 uci 命令来完成,我们都已经写在脚本里了。脚本本身都有比较详细的注释,刷机愉快!

后记:一些技术性的 Troubleshooting 的技巧。盒子上的工具都比较弱,不像 X86 的机器上,可以安装很强大的工具,但是一些基本的命令,我们还是需要了解的。

  • nslookup 是一个改装版,只有 nslookup 主机名 这个语法,用来检查盒子是否能解析域名
  • ps 最应该需要知道的查看进程的东东,不需要加任何参数就可以,其实 Web 端也可以看所有进程列表。dropbear 就是 sshd , odhcpd 就是搞 DHCP 的, uhttpd 就是 Web 界面, udhcpc 是盒子本身作为 DHCP 客户端,例如 PPPOE 拨号从ISP 处取地址, ntpd 是时间服务,就是对时间的, polipo 就是 http 代理, dnscrypt-proxy 就是 DNS加密的, dnsmasq 是最核心的做 DNS 解析的服务,并对 LAN 提供 DHCP 服务, ss-local 就是科学上网的进程,对 LAN 提供 SOCKS5 服务。
  • netstat -nlp 这个就是查看端口侦听情况的, 53 端口就是 dnsmasq , 5353 端口就是 dnscrypt-proxy 启动的, 8123 端口就是 polipo , 1080 端口就是科学上网

浏览器调试一定要使用 Firefox,可以先从 socks5 手工代理,看看 192.168.1.1 1080 时是否可以 Google,如果可以,说明科学上网已经成功,再配置自动代理,设置 URL, http://192.168.1.1/wpad.dat 看是否可以,如果可以,那就是成功了!

其他可能的错误就是 IPv6 的问题, 把客户端和网关上的 IPv6 都关闭看看。

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 卡插回树莓派,启动验证。

树莓派 4B + OpenWrt

先看 OpenWrt 官方关于树莓派的文档。 知道 4B 是 BCM2711的 family,去对应的下载目录就能找到对应的镜像。 下载 gz 文件到 Linux 上, gunzip, 用 fdisk -l 找到插入的要烧写的 SD卡 的盘号。然后

# dd if=openwrt-brcm2708-bcm2711-rpi-4-ext4-sysupgrade.img of=/dev/sdb bs=2M conv=fsync
记录了88+0 的读入
记录了88+0 的写出
184549376 bytes (185 MB, 176 MiB) copied, 8.47041 s, 21.8 MB/s

把 SD卡插入树莓派上启动, 插入网线,看到网口绿灯闪烁,就是有线已经连接上了。

烧写完毕的 OpenWrt 默认的 IP 地址是 192.168.1.1,有两种更改 IP 的办法。
一种就是前面的步骤中,烧写完毕后, mount /dev/sdb2 /mnt
然后修改 /etc/config/network 文件, 把里面的 IP 地址修改掉就可以。
(在系统没有第一次启动之前是没有这个 network 文件的)
另外一种,就是等默认系统启动后,把自己的 PC 设置一个静态的 192.168.1.x 的地址,直接 ssh root@192.168.1.1,然后 uci show network 看下。
然后 uci set network.lan.ipaddr=’192.168.x.y’; uci commit 就可以了。
然后把 PC 修改回 DHCP 方式,用修改好的 IP 重新 ssh 就可以进入 4B 了。

这个时候操作系统上啥也没有,只有命令行界面。 我们先 route add default gw 192.168.x.1 把网关加上, 修改 /etc/resolv.conf 把 dns 服务指定好。 这样 nslookup baidu.com 看看是否能解析, 如果可以,恭喜!我们接下来就可以 opkg update ,开始安装软件了!

# opkg install lsof curl coreutils proxychains-ng vim bash uhttpd luci procps-ng-ps procps-ng-w bind-tools bind-host fdisk block-mount haveged libustream-openssl file unzip netcat

为了一些简单的开发工具下载,我们需要:
# opkg install git make

安装好以上基本包后,浏览器应该就可以登录了。 超级强大的 树莓派, 不能浪费啊!安装其他东东:(因为会自动安装相关的依赖包,我们就只写一个)

# opkg install luci-i18n-base-zh-cn luci-i18n-samba4-zh-cn

# opkg install luci-i18n-wireguard-zh-cn luci-i18n-cifsd-zh-cn luci-i18n-dnscrypt-proxy-zh-cn

树莓派的另外一种管理无线网络的办法

如果一个设备只能通过无线网络连接,真是蛮郁闷的,如果需要连接到不同的无线网络里去, 每次都要修改 SD 卡上的配置文件 /etc/wpa_supplicant/wpa_supplicant.conf
那不是郁闷死? 一种办法就是写一个自己手机的共享热点的 名称和密码, 记录下来。 下次万一需要设置树莓派, 把自己的手机名称和共享热点的密码修改一下,然后 PC 端也可以连接到手机的共享热点,这样,PC 端就能登录树莓派了。

话说 Mac 上如果要修改 SD 卡上的 Linux 分区还是真是不好办, 要安装一个什么 osxfuse 和 ext4fuse 的东东,Homebrew 又极其缓慢,最后还是用 VirtualBox 挂接的一个没有硬盘的只有的 CentOS7-Minimal ISO 启动到 Rescue 模式,挂接 U盘后解决的。 还有另外一个 USB OTG(On The Go) 的办法, 要去修改 /boot/cmdline.txt 如下:核心的就是在 rootwait 之后,添加了:
modules-load=dwc2,g_ether
还要确认 /boot/config.txt 包含:
dtoverlay=dwc2

重新启动后,可以看到树莓派上多出一块 usb0 的“网卡”,会提供 DHCP 给连接到上面的设备。我们的 Macbook 上网络设备会多出一个 RNDIS/Ethernet Gadget 的网卡,地址是 192.168.11.54,我们可以用 arp 或者 nmap 发现树莓派,这样就无需无线网络就可以登录树莓派了。

总结一下连接办法:一种是通过 Linux 虚拟机挂接 SD 卡修改无线配置文件,另外一种就是通过 USB 连接 data 端口,让 PC 设备成为 DHCP 客户端,还有一种就是把无线热点的配置固定写死到树莓派里。

上海电信网络接入终端数限制-光猫桥接

这件事情折腾了一段时间,总算搞定了。 虽然有技术的问题,但是主要还是电信那头的事情,没搞明白。

这个问题是为了解决 电信运营商 对上网终端数量的限制,我们后面做实验, 要接 n 多台虚拟机,由于终端数量的限制,导致新开的虚拟机经常不能上网。只能通过重新启动光猫解决。

上网搜了一下,大概的方式就是把光猫设置到桥接模式。 需要一个 telecomadmin 账号的密码, 这个密码, 可以管安装的师傅要。 网上有说自己拆光猫,插一个 USB 转接口,用 get dmconfig 之类的命令取,感觉复杂了一点。

登录进入后,进入 网络-》网络设置,下拉选择 2 开头的连接名称,记录 ad 号码,修改成桥接模式。

其他啥也不用修改。进入到自己的无线路由器,和以前配置 PPPoE 拨号一样,输入 ad 账号以及密码(管客服要这个密码), ad 号其实在修改光猫配置前默认是路由模式,就显示在那里的。


这样子, 就绕过了电信光猫对终端数量的限制。

题外话: 另外可以通过 Linux pppoe 拨号
在 Ubuntu 上 运行 pppoeconf , 根据提示输入 PPPoE 拨号的用户名和密码就可以配置,其他相关的几个命令:

pon dsl-provider
plog
ip addr show ppp0
poff 挂断

宽带路由器以及Linux DHCP/网关配置

市面上插 4G 卡的无线路由器, 其实只支持无线终端接入的冗余。也就是说,无线终端连接该路由器的 SID,自动从该路由器得到 DHCP 地址和网关,然后路由器上会把网络请求转发上里面配置的 LAN 口的网关。 当 LAN 口的网络不通的时候,路由器就会自动切换到 4G 网卡。

所以这种 4G 宽带路由器不能把路由器后面的有线网络通过 4G 卡上网。上面配置的 LAN 口,其实从无线侧是不能访问到。配置的 LAN 口地址,无论是动态获取,还是静态,也都是无法从有线侧访问到这个 LAN 口地址的。

同时, 在高级设置的路由界面下,设置的 DHCP 都是针对 Wi-Fi 连接的,这个 DHCP 不对有线网络开启。

上海电信的 中兴 F450A 光猫,默认登录的用户名是 useradmin, 其实有一个所谓的超级用户账号: telecomadmin,这个账号的密码,其实是可以向电信的安装人员电话索要的。 基本原理是把光猫设置为维护模式,安装人员可以查看到这个所谓超级用户的密码。而不必像论坛里讨论的, 要自己买一个 USB转接口 ,打开光猫,插入到光猫的 debug 口,连接 COM 口,通过读取 mdm config ,可以得到这个密码。

其实这个作为桥接切换(就是光猫纯粹是一个物理线路的链接器,拨号需要使用另外的软件或者设备)可能有用。 做这件事情的目的其实是为了绕过 n 个终端的限制。本来想在 光猫后面再接一个路由器的, 但是考虑到 DHCP 不能在 VM 上跑, 反正要跑在一台 Host 上,所以,把 Host 加了一个转发功能。

本来在KVM 桥接的 DNS 虚拟机里面安装了 udhcpd 这个服务,但是 DHCP 广播包不能通过虚拟机桥接发出来,只好把 dhcp 配置到了 KVM 主机上。 安装和配置其实是惊人的简单:

在 Ubuntu 1904 上 apt install dhcpd , 就会自动选择 udhcpd 这个服务,其实是 busybox 的变种。 编辑 /etc/default/udhcpd 把 DHCPD_ENABLED 设置为 yes,然后根据自己的需要修改: /etc/udhcpd.conf,例如我有两台跑 dnscrypt 的虚拟机 7.11/7.12,然后本机7.230 作为网关

通过以上配置,如果是 Windows 系统 DHCP 客户端就可以看到如下配置:

把 Linux Host 作为转发的网关配置十分简单:
设置 /etc/sysctl.conf
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
然后运行 sysctl -p /etc/sysctl.conf 即可
当然作为网关的 Linux Host 上的默认网关我们需要设置为光猫的 IP 地址。

这样,我们或许可以避免电信运营商对终端个数的限制。
当然光猫上,我们启用了防火墙, 然后无线网络和 DHCP ,我们都没有启动。