前言

前文已经说了,去年这时候入手了一台树莓派4B 8G内存的(OS:今天这个配置价格已经翻倍了,还好买的早!),装了kali后就挂载了我的5T的硬盘,给Mysql放数据库用,其他就日常用用CS,跑打卡脚本,其他就闲置了。

前几天想着搞个软路由玩玩,本来是想买个路由器刷openwrt当主路由,不过还要把现在的这个路由器卖了,太折腾了。想到我的树莓派还在闲置,但是又不想丢掉我的kali,况且树莓派只用来跑openwrt实在是大材小用了,于是想有没有docker版的openwrt?

用docker搜了一下镜像,还真有!

image-20220416193145620

于是便开始了折腾之旅

安装opwnwrt

前期准备

将网线从路由器的Lan口插到了树莓派上。

通过ifconfig命令,查看eth0的ip地址。

image-20220416200037227

我这里是192.168.1.104,所以树莓派所处在的网段是192.168.1.0/24,这个后面会一直要用到。

安装Docker

kali还没安装docker,于是先安装docker和docker-compose

# 安装docker
sudo apt install docker.io

# 安装 docker-compose:
apt install docker-compose

选择镜像

搜索出来的镜像有很多个,思考了一下,选择了第一个。sulinggg/openwrt

来到dockerhub,看一下这个镜像的介绍。

https://registry.hub.docker.com/r/sulinggg/openwrt

本项目旨在构建适用于树莓派 1~4 、适用于 armv6/armv7/armv8(aarch64)/x86_64(amd64) 平台设备的 OpenWrt 镜像 (每日更新)。

适用于树莓派?那不是刚刚好。

翻到最后可以看到有一篇记录使用教程的博客

于是便跟着博客复现。

安装步骤

简要写一下使用到的命令,详细的命令解释可以看原博客。

1.打开网卡混杂模式

sudo ip link set eth0 promisc on 

2.创建网络

docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 macnet

192.168.1.1要换成

此时,我们使用 docker network ls命令可以看到网络macnet已建立成功:

image-20220416195811981

3.拉取镜像

# 用阿里云镜像提速
# 若拉取镜像时不加任何标签,则将使用 latest 标签拉取镜像,latest 指向的镜像与树莓派 2B 镜像实际上为同一镜像。
docker pull registry.cn-shanghai.aliyuncs.com/suling/openwrt:latest

# 树莓派4版本
# docker pull registry.cn-shanghai.aliyuncs.com/suling/openwrt:rpi4

镜像拉取完成后,我们可以执行docker images命令查看现存镜像:

image-20220416200322472

4.创建并启动容器

docker run --restart always --name openwrt -d --network macnet --privileged registry.cn-shanghai.aliyuncs.com/suling/openwrt:latest /sbin/init

启动容器后,我们可以使用 docker ps命令查看当前运行的容器:

image-20220416200616122

docker ps -a命令可以查看所有状态的容器,包括正在运行和停止的。

5.进入容器并修改相关参数

# 进入容器 openwrt为容器名称
docker exec -it openwrt bash

# 修改openwrt的网络配置
vim /etc/config/network

修改lan口的配置,把相关的值换成自己的网段。

image-20220416200841071

ESC,然后输入:wq保存并退出。

6.重启网络

/etc/init.d/network restart

7.进入控制面板

后台地址为刚才给 ipaddr参数配置的值192.168.1.200

image-20220416201136004

用户名:root

密码:password

8.关闭 DHCP 服务

因为我们是想用openwrt来当旁路由,DHCP的任务交给路由器了,所以我们要在openwrt里把DHCP功能关掉。

网络 - 接口 - Lan - 修改,界面中,勾选下方的 忽略此接口(不在此接口提供 DHCP 服务),并保存&应用

image-20220416201554317

image-20220416231151773

9.主路由 DHCP 设置

进入路由器后台中,将主路由的 DHCP 的网关DNS 服务器设置为第 5 步中option ipaddr 项目中的 IP。

image-20220416201808957

10.重新连接路由器

完成以上操作后,断开设备(如手机,电脑)与路由器的连接,重新连接路由器。

连接到路由器的设备的路由器(网关)将会设置为我们配置的 IP。

image-20220416202004856

注意事项

在原博客中提到了,宿主机网络修复还有其他一些问题,我这里并没有遇到,所以直接忽略跳过。

openwrt展示

界面截图

image-20220416212101694

功能列表截图

这些是安装好容器后的所有功能和插件。

image-20220416203433673

openwrt配置

安装插件

自带的插件比较精简,如果想自己添加一些插件也可以通过 系统-软件包,来输入包名来下载。

注意:首次使用需要先点击刷新列表

image-20220416210800096

附一个,插件名与包名的对照表

image-20220416225349326

如果碰到这种有三种结果的插件,推荐安装顺序:插件-luci-语言包

image-20220416211108202

配置常用插件

我这里使用的是 Passwall + SmartDNS + AdGuard Home,所以以下的配置都是根据这种搭配配置的,如果不是这种情况,可能有些地方的配置会不一样。

SmartDns

官方教程:https://pymumu.github.io/smartdns/

常规设置

配置如图所示,注意重定向选择:

image-20220416211518698

image-20220416211518698

image-20220416211518698

第二服务器设置

这里是配置国外DNS服务器的

image-20220416211518698

image-20220416211518698

服务器组要填写us,后面要用到。

上游服务器配置

# 国内DNS服务器
223.5.5.5
114.114.114.114
119.29.29.29
180.76.76.76


# 国外DNS服务器
8.8.8.8
8.8.4.4

这两个为运营商DNS,可以去路由器后台查看。运营商DNS有时候还是挺快的。

211.138.24.66
211.138.30.66

image-20220416213101741

上游DNS服务器里这里有几处需要注意的地方,

  • 国内的DNS服务端口是53,国外的是853

  • 国内的DNS服务协议是udp,国外的是tls

  • 添加好服务器后,需要点击修改,服务器组国内的写cn,国外的写us

    image-20220416211908095
image-20220416211935715

Passall

基本设置

主要

这里打开主开关,TCP节点等添加节点后选择即可。

image-20220416213804553

DNS
  • 过滤模式 在网上看到的别人的版本大部分和容器这个版本都不一样,试了试其他几个选项,都不能用,只有这个 通过UDP请求DNS可以正常用。

  • 远程DNS,这里应该是填写 192.168.1.200:7913(对应SmartDns里的第二服务器端口),但是我这里不成功,所以直接选择的8.8.4.4

  • 有时候配置好不生效,可以点击一下清空IPSET以及在cmd使用ipconfig /flushdns清除dns缓存。

image-20220417182104461

模式

这里我选择的默认,也可以根据自己的需求去选择。

image-20220416214635543

节点列表

通过分享好的链接即可导入进节点列表

节点订阅

点击左下角的添加按钮,将订阅url填进去,其他保持默认,保存并应用即可。

image-20220416215123378

保存好之后,要手动点击一下手动订阅才可以

image-20220416215244981

负载均衡

这里我尝试了一下,但是没有使用。

因为需要所有的节点的协议UUID密码地址等配置都需要相同(端口可以不同),我这边没有满足,就没有去使用。

AdGuard Home

安装

树莓派4b这个镜像的版本,没有自带AdGuard Home插件,所以如果想要使用的话,就需要手动安装一下。

软件包里搜索AdGuardHome并没有找到web端luci的包,所以用另外一种方式来安装。

系统-文件传输里将下面下载好的文件上传到/tmp/upload

https://cloud.opssh.cn/chajian/luci-app-adguardhome_1.8-11_all.ipk

然后点击安装,系统重启后,就能在服务里看到了。

image-20220417123032063

image-20220417123050264

基本设置

选择 启用,重定向选择作为dnsmasq的上游服务器,然后点击更新

image-20220416215815211

image-20220416220008584

然后在左下角的更多选项里,分别添加系统升级时保留文件计划任务

image-20220416220119916

其配置如图所示

image-20220416220212092

开始配置

以上的配置保存并应用后,点击这里,跳转到192.168.1.200:3000,开始配置AdGuardHome。

image-20220416220344253

image-20220416220545525

这里的网页管理界面的端口和DNS服务器的端口随便设置一个不冲突的端口即可。

image-20220416220636504

然后就是设置一个访问web管理端的帐号密码。

image-20220416220706697

配置好后,用刚才自己设置的帐号密码去登录。

image-20220416220752266

DNS设置

上游服务器这里设置我们的SmartDns服务器地址。

image-20220416220916817

Bootstrap DNS 服务器前两个填的是运营商的DNS。

image-20220416221009378

Bootstrap DNS 服务器的作用是使用这里填写的DNS服务器去解析上游DNS服务器。

过滤器-DNS封锁清单

这里发现一个问题就是,这个规则和本来我在浏览器插件用的Adguard的规则语法不完全通用。

image-20220417173359608

这里规则我填写的比较多,其实用不了这么多,可以自行选择,填写的越多理论上对网速的影响就相对越大。而且有的可能会”误杀”。

# AdGuard DNS filter
https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt

# HalfLife
https://halflife.coding.net/p/list/d/list/git/raw/master/ad-pc.txt
https://halflife.coding.net/p/list/d/list/git/raw/master/ad.txt
https://halflife.coding.net/p/list/d/list/git/raw/master/ad-mo.txt


# Adblock-Rule-rule
https://gitee.com/xinggsf/Adblock-Rule/raw/master/rule.txt

# Adblock-Rule-mv
https://gitee.com/xinggsf/Adblock-Rule/raw/master/mv.txt

# filter_224_Chinese
https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_224_Chinese/filter.txt

# ChinaList2.0
https://gitee.com/ADList/ChinaList2.0/raw/master/ChinaList2.0.txt

# filter_2_English
https://raw.githubusercontent.com/AdguardTeam/FiltersRegistry/master/filters/filter_2_English/filter.txt


# neodevhost
https://neodev.team/host

效果展示

image-20220416221837739

系统配置

网络-DHCP/DNS

DNS转发需要设置为AdGuard Home的DNS服务器地址。192.168.1.200#9053

image-20220416230841928

image-20220416231038536

image-20220416231109497

Turbo ACC 网络加速设置

看到别人的博客里都有提到这个东西,但是我安装的这个docker的镜像suling/openwrt,似乎并不支持,虽然有这个选项卡,但是里面没有勾选的地方,只有一个DNS缓存。

image-20220416231438350

我又尝试了安装unifreq/openwrt-aarch64

dockerhub地址:https://hub.docker.com/r/unifreq/openwrt-aarch64

image-20220416231702179

这里提到了,映射一下目录才可以体验完整的turboacc功能。

我生成一个容器后,发现确实多了一个BBR 拥塞控制算法。

image-20220416231813660

并且在防火墙里也多了一个FullCone-NAT选项。

image-20220416231923952

于是我尝试使用suling/openwrt镜像映射目录,创建了容器出来后发现还是没有增加其他功能,可能容器作者给这部分砍掉了吧,既然没有这项功能,那就看个人选择吧,如果很想要这个功能,那就使用unifreq/openwrt-aarch64镜像吧,或者自己编译一个。

SMB网络共享

上文提到了我挂载了一块5T的硬盘,但只放了数据库,还剩将近4个T能用,不如正好用openwrt带的Smb共享出来,放一些学习资料。

image-20220416222235466

在kali里挂载硬盘的目录,创建一个smb文件夹,然后设置权限为777。

通过文件助手,找到挂载硬盘的所在目录/mnt/sda1/smb/

image-20220416222548839

设置smb用户

进入容器

# 进入容器
docker exec -it openwrt bash

# 创建用户(不是root也行)
smbpasswd -a root
# 接下来输入的密码就是用户的密码

其他smb命令:

# 删除用户 
smbpasswd -x root
# 禁用用户
smbpasswd -d root
# 启用用户
smbpasswd -e root

配置文件共享

接着使用网络共享功能,配置一下。

在左下角添加应该共享目录,名称随意,路径为硬盘挂载的路径,允许用户 填刚才新建的用户。

image-20220416222753094

如果是要使用root用户的话,需要在编辑模板里,注释或删掉这行内容。

invalid users = root

image-20220416223804805

其他保持默认即可。

接着在Windows的资源管理器的地址栏里输入 \\192.168.1.200,输入刚才设置的用户和密码即可。

接下来为了更方便我们平时使用,可以使用映射网络驱动器功能,

image-20220416224429341

映射好之后,在此电脑里的网络位置里即可看到映射好的共享文件夹。

image-20220416224613737

注意事项

刚才在文件共享里的工作组设置的是WORKGROUP和我们本机的工作组一致,所以才不用在访问共享文件夹输入用户名的时候加上工作组,如果本机工作组和文件共享里的工作组不一致,需要在登录的时候加上工作组,例如:WORKGROUP/root

image-20220416224256637

注意事项

因为容器启动带的有--restart=always参数,所以如果使用docker stop来停止容器,有可能会让宿主机重启,然后重启后又自动运行了容器,陷入了死循环。

对于这种情况可以先去掉always参数,再stop。

docker update --restart=no <container-id>
docker stop <container-id>

总结

因为是docker版本,网上的资料也有限,很多地方都要自己折腾。现在就只用了这些功能,其他还有很多功能可以通过安装软件包来使用,慢慢研究吧!