软路由折腾记
前言
前文已经说了,去年这时候入手了一台树莓派4B 8G内存的(OS:今天这个配置价格已经翻倍了,还好买的早!)
,装了kali后就挂载了我的5T的硬盘,给Mysql放数据库用,其他就日常用用CS,跑打卡脚本,其他就闲置了。
前几天想着搞个软路由玩玩,本来是想买个路由器刷openwrt当主路由,不过还要把现在的这个路由器卖了,太折腾了。想到我的树莓派还在闲置,但是又不想丢掉我的kali,况且树莓派只用来跑openwrt实在是大材小用了,于是想有没有docker版的openwrt?
用docker搜了一下镜像,还真有!
于是便开始了折腾之旅
安装opwnwrt
前期准备
将网线从路由器的Lan口插到了树莓派上。
通过ifconfig
命令,查看eth0的ip地址。
我这里是192.168.1.104
,所以树莓派所处在的网段是192.168.1.0/24
,这个后面会一直要用到。
安装Docker
kali还没安装docker,于是先安装docker和docker-compose
# 安装docker |
选择镜像
搜索出来的镜像有很多个,思考了一下,选择了第一个。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
已建立成功:
3.拉取镜像
# 用阿里云镜像提速 |
镜像拉取完成后,我们可以执行docker images
命令查看现存镜像:
4.创建并启动容器
docker run --restart always --name openwrt -d --network macnet --privileged registry.cn-shanghai.aliyuncs.com/suling/openwrt:latest /sbin/init |
启动容器后,我们可以使用 docker ps
命令查看当前运行的容器:
docker ps -a
命令可以查看所有状态的容器,包括正在运行和停止的。
5.进入容器并修改相关参数
# 进入容器 openwrt为容器名称 |
修改lan口的配置,把相关的值换成自己的网段。
按ESC
,然后输入:wq
保存并退出。
6.重启网络
/etc/init.d/network restart |
7.进入控制面板
后台地址为刚才给 ipaddr
参数配置的值192.168.1.200
用户名:root
密码:password
8.关闭 DHCP 服务
因为我们是想用openwrt来当旁路由,DHCP的任务交给路由器了,所以我们要在openwrt里把DHCP功能关掉。
在 网络
- 接口
- Lan
- 修改
,界面中,勾选下方的 忽略此接口(不在此接口提供 DHCP 服务)
,并保存&应用
。
9.主路由 DHCP 设置
进入路由器后台中,将主路由的 DHCP 的网关
和 DNS 服务器
设置为第 5 步中option ipaddr
项目中的 IP。
10.重新连接路由器
完成以上操作后,断开设备(如手机,电脑)与路由器的连接,重新连接路由器。
连接到路由器的设备的路由器(网关)
将会设置为我们配置的 IP。
注意事项
在原博客中提到了,宿主机网络修复
还有其他一些问题,我这里并没有遇到,所以直接忽略跳过。
openwrt展示
界面截图
功能列表截图
这些是安装好容器后的所有功能和插件。
openwrt配置
安装插件
自带的插件比较精简,如果想自己添加一些插件也可以通过 系统
-软件包
,来输入包名来下载。
注意:首次使用需要先点击刷新列表
。
附一个,插件名与包名的对照表。
如果碰到这种有三种结果的插件,推荐安装顺序:插件-luci-语言包
配置常用插件
我这里使用的是 Passwall + SmartDNS + AdGuard Home,所以以下的配置都是根据这种搭配配置的,如果不是这种情况,可能有些地方的配置会不一样。
SmartDns
官方教程:https://pymumu.github.io/smartdns/
常规设置
配置如图所示,注意重定向选择:无
第二服务器设置
这里是配置国外DNS服务器的
服务器组要填写us
,后面要用到。
上游服务器配置
# 国内DNS服务器 |
这两个为运营商DNS,可以去路由器后台查看。运营商DNS有时候还是挺快的。
211.138.24.66 |
上游DNS服务器里这里有几处需要注意的地方,
国内的DNS服务端口是53,国外的是853
国内的DNS服务协议是udp,国外的是tls
添加好服务器后,需要点击
修改
,服务器组国内的写cn
,国外的写us
Passall
基本设置
主要
这里打开主开关,TCP节点等添加节点后选择即可。
DNS
过滤模式 在网上看到的别人的版本大部分和容器这个版本都不一样,试了试其他几个选项,都不能用,只有这个
通过UDP请求DNS
可以正常用。远程DNS,这里应该是填写
192.168.1.200:7913
(对应SmartDns里的第二服务器端口),但是我这里不成功,所以直接选择的8.8.4.4
有时候配置好不生效,可以点击一下
清空IPSET
以及在cmd使用ipconfig /flushdns
清除dns缓存。
模式
这里我选择的默认,也可以根据自己的需求去选择。
节点列表
通过分享好的链接即可导入进节点列表
节点订阅
点击左下角的添加
按钮,将订阅url填进去,其他保持默认,保存并应用即可。
保存好之后,要手动点击一下手动订阅
才可以
负载均衡
这里我尝试了一下,但是没有使用。
因为需要所有的节点的协议
、UUID
,密码
,地址
等配置都需要相同(端口可以不同),我这边没有满足,就没有去使用。
AdGuard Home
安装
树莓派4b这个镜像的版本,没有自带AdGuard Home插件,所以如果想要使用的话,就需要手动安装一下。
在软件包
里搜索AdGuardHome并没有找到web端luci
的包,所以用另外一种方式来安装。
在系统
-文件传输
里将下面下载好的文件上传到/tmp/upload
https://cloud.opssh.cn/chajian/luci-app-adguardhome_1.8-11_all.ipk
然后点击安装,系统重启后,就能在服务
里看到了。
基本设置
选择 启用
,重定向选择作为dnsmasq的上游服务器
,然后点击更新
。
然后在左下角的更多选项
里,分别添加系统升级时保留文件
和计划任务
其配置如图所示
开始配置
以上的配置保存并应用后,点击这里,跳转到192.168.1.200:3000
,开始配置AdGuardHome。
这里的网页管理界面的端口和DNS服务器的端口随便设置一个不冲突的端口即可。
然后就是设置一个访问web管理端的帐号密码。
配置好后,用刚才自己设置的帐号密码去登录。
DNS设置
上游服务器这里设置我们的SmartDns服务器地址。
Bootstrap DNS 服务器前两个填的是运营商的DNS。
Bootstrap DNS 服务器的作用是使用这里填写的DNS服务器去解析上游DNS服务器。
过滤器-DNS封锁清单
这里发现一个问题就是,这个规则和本来我在浏览器插件用的Adguard的规则语法不完全通用。
这里规则我填写的比较多,其实用不了这么多,可以自行选择,填写的越多理论上对网速的影响就相对越大。而且有的可能会”误杀”。
# AdGuard DNS filter |
效果展示
系统配置
网络-DHCP/DNS
DNS转发需要设置为AdGuard Home的DNS服务器地址。192.168.1.200#9053
Turbo ACC 网络加速设置
看到别人的博客里都有提到这个东西,但是我安装的这个docker的镜像suling/openwrt
,似乎并不支持,虽然有这个选项卡,但是里面没有勾选的地方,只有一个DNS缓存。
我又尝试了安装unifreq/openwrt-aarch64
dockerhub地址:https://hub.docker.com/r/unifreq/openwrt-aarch64
这里提到了,映射一下目录才可以体验完整的turboacc功能。
我生成一个容器后,发现确实多了一个BBR 拥塞控制算法。
并且在防火墙
里也多了一个FullCone-NAT
选项。
于是我尝试使用suling/openwrt
镜像映射目录,创建了容器出来后发现还是没有增加其他功能,可能容器作者给这部分砍掉了吧,既然没有这项功能,那就看个人选择吧,如果很想要这个功能,那就使用unifreq/openwrt-aarch64
镜像吧,或者自己编译一个。
SMB网络共享
上文提到了我挂载了一块5T的硬盘,但只放了数据库,还剩将近4个T能用,不如正好用openwrt带的Smb共享出来,放一些学习资料。
在kali里挂载硬盘的目录,创建一个smb
文件夹,然后设置权限为777。
通过文件助手
,找到挂载硬盘的所在目录/mnt/sda1/smb/
。
设置smb用户
进入容器
# 进入容器 |
其他smb命令:
# 删除用户 |
配置文件共享
接着使用网络共享
功能,配置一下。
在左下角添加应该共享目录,名称随意,路径为硬盘挂载的路径,允许用户 填刚才新建的用户。
如果是要使用root用户的话,需要在编辑模板
里,注释或删掉这行内容。
invalid users = root
其他保持默认即可。
接着在Windows的资源管理器的地址栏里输入 \\192.168.1.200
,输入刚才设置的用户和密码即可。
接下来为了更方便我们平时使用,可以使用映射网络驱动器
功能,
映射好之后,在此电脑
里的网络位置
里即可看到映射好的共享文件夹。
注意事项
刚才在文件共享
里的工作组设置的是WORKGROUP
和我们本机的工作组一致,所以才不用在访问共享文件夹输入用户名的时候加上工作组,如果本机工作组和文件共享里的工作组不一致,需要在登录的时候加上工作组,例如:WORKGROUP/root
注意事项
因为容器启动带的有--restart=always
参数,所以如果使用docker stop
来停止容器,有可能会让宿主机重启,然后重启后又自动运行了容器,陷入了死循环。
对于这种情况可以先去掉always参数,再stop。
docker update --restart=no <container-id> |
总结
因为是docker版本,网上的资料也有限,很多地方都要自己折腾。现在就只用了这些功能,其他还有很多功能可以通过安装软件包来使用,慢慢研究吧!