抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

使用小米路由器和树莓派自组一个局域网

一直在做一些有钱人不需要做,没钱人懒得做的事。

迷茫,不是一天两天的事

背景信息

垃圾小米路由器一台(具备 局域网DHCP 关闭功能,我是的3C,99一台)

树莓派4B(没错 2B*2 就是我了,8G 内存很香的)系统:Ubuntu Server 2020.4

具备一定的网络知识(具体多少不知道,我也是半斤八两)

能分清楚,什么是网线,什么是电源线的可正常活动的人类。

方案选取

别问我方案哪里来的。都是自己泥菩萨过河摸来的。先说结果,我尝试了两种方案,最后我选择了方案二,方案一稳定性我做不来。

首先,任何方案前,都得给树派派配好静态 IP。第一次写完固件启动时网线接入应该都是 DHCP 的,那么这时候就可以获取到 IP 登录树派派了。第一次启动后,改 net-config 进行配置已经无效,需要修改文件。PS:文件名不一定相同,Ubuntu 版本不一样位置也可能不一样,我的是2020.4。

sudo vi /etc/netplan/50-cloud-init.yaml 

修改内容:

# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    ethernets:
        eth0:
           addresses:
           - 192.168.31.7/24
           dhcp4: false
           gateway4: 192.168.31.1
           nameservers:
             addresses:
             - 192.168.31.1
           #dhcp4: true
           #optional: true
    version: 2

这是基本操作,需要能理解,不然容易搞错。我是小米路由器,后台页面存在局域网 IP,是小米路由的 IP 也是整个小米路由下局域网的网关。

改完后执行netplan apply进行应用网络设置。

sudo netplan apply

不用重启,但需要重新连接树莓派,完成后可以继续折腾了。 关于静态 IP,这里有一文可推荐:Ubuntu 18.04 Server 设置静态IP

方案一

一图解千愁,走你!

希望能看懂。

这种方式主要的问题在于对经过树莓派的设备的处理,鉴于大多数教程都是给了最终解决方案,但是若想达到真正的文档,还需要苦练内功,送上一本秘籍(我反正没看太懂)走你:iptables详解 或者 鸟哥的 Linux 私房菜

关闭路由 DHCP,其余不配置,保持PC 以及树莓派可联网即可。

此外,需要做的事,是在树莓派上搭建一个 DHCP 服务器,我这里不做赘述,因为没有人比 Ubuntu 更懂新手,走你:Dynamic Host Configuration Protocol (DHCP) 如果需要更多的参数,下面也写了,看旧版的教程,走你:dhcp3-server

按上面的图配置完成IP 之类的之后,所有无线连接的设备 IP 都由树莓派进行接管,我的不是图形界面,在上面的一些框架没有图形界面的一些框架稳定。(我希望全部由 web 页面进行管理),所以经过一整天的折腾,放弃。

方案二

一图解千愁,走你!

相信很容易看出和方案一的区别,就是专业的事儿交给专业的人儿去干。

对于 iptables 怎么拦截放行我都不需要管,全部交给 openwrt 去做,相当于再添加一个路由,这个路由专门做 DHCP 以及网关。Docker 的安装不再赘述,只是 openwrt 安装有点麻烦,这里做下记载。

我选择的是一个基础镜像,功能不多,适合于这种方案,网上管这叫旁路由,或者单臂路由。

openwrt 在 arm64上的镜像有很多,但是这些都是一些个人编译的镜像,其实可以考虑自己编译(编译教程),但是我估计会有一些问题,所以选择别人做好了的。

我选择的是:https://hub.docker.com/r/buddyfly/openwrt-aarch64

其实原因是,他这里有写介绍,那么我用起来会相对的简单一点,其他容器应该都是在某个论坛发布的,并没有使用介绍,但我估计其实都差不多。如果需要自己找,那么就去 dockerhub,搜索 openwrt,在左侧过滤 arm64,选择一个你觉得好的就行。【PS:后来我找到了一个更新一点的镜像:https://hub.docker.com/r/piaoyizy/openwrt-aarch64 使用方法基本一致】

我这里使用 docker-compose 进行创建吗,新建一个文件 openwrt.yml,内容:

version: "3"
services:
   openwrt:
    container_name: openwrt
    image: buddyfly/openwrt-aarch64:latest
    network_mode: "macnet"
    privileged: true
    restart: always

这个容器需要依赖一个特定的网络条件(Docker 网络模型之 macvlan 详解),这里创建下。

docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.1 -o parent=eth0 macnet

subnet 子网段是需要改的,网关是小米路由的网关,子网段就是把网关最后那个字段改成0即可。整条命令的目的是创建一个名为macnet的网络环境,用于openwrt 容器。

将上述 openwrt.yml 文件上传到树莓派,或者使用 vim 将内容在树莓派中创建好,同时终端切到 openwrt.yml 文件位置,创建容器:

docker-compose -f "openwrt.yml" up -d --build

接下来,它自己会去拉取镜像,创建容器并启动,yml 文件中定义了容器名:openwrt,我们进入容器终端设置openwrt的静态 ip。

docker exec -it openwrt /bin/bash

接着修改文件

vi /etc/dhcp/dhcpd.conf
vi /etc/config/network

需要修改的内容:

config interface 'lan'
        option ifname 'eth0' //网卡名称
        option proto 'static'
        option ipaddr '192.168.31.8' //静态 IP 地址
        option netmask '255.255.255.0' //子网掩码默认
        option gateway '192.168.31.1'  //网关 小米路由网关,保证其能上网
        option dns '192.168.31.1'  //DNS 小米路由 DNS,保证其能上网

接着执行重启网络的命令

 /etc/init.d/network restart

现在可以在小米路由的后台看到一个与树莓派同级的网线连接的设备,IP 地址为192.168.31.8,浏览器打开该地址便可以进行配置了,默认密码为 password。

接下来我们来开启 OpenWrt 中的 DHCP 功能,替换掉小米那个垃圾的 DHCP 功能。(网上大多数教程都说不要使用 OpenWrt 的 HDCP 功能,是因为他们没有小米这样的垃圾路由器,以及或者他们不需要管理所有的设备)

此处随意,5开始,150个,网域就是192.168.31.5 ~ 192.168.31.200,其实可以到254,但是没必要。

关于 IPv6,我没有,全部关闭,有的话,我也不知道咋搞,没查。全部禁用。

此外在这个页面上面还有一个地方需要关闭。

为增加稳定性,需要关闭网卡的桥接功能。框中的部分默认是开启的,去掉。

此时,所有路由上通过无线连接的设备均会走 openwrt 容器,至于接下来怎么玩,就是自己的事儿了。

在网上的教程中,还有一个网卡的混杂模式需要打开,意思是接收所有经过该网卡的流量,但我貌似并不需要,因为本来就已经是一个网关的存在了,还有什么流量不经过?发现还真有流量不经过。记得开!!!

sudo ip link set eth0 promisc on

宿主网络修正(存在的问题)

因为 docker 的macvlan网络导致了树莓派本身与 docker 中的 OpenWrt 不互通,这里需要做骚操作处理。

#宿主机器 192.168.31.7 docker:192.168.31.8
#以下操作都在宿主机上运行,新增一个叫hdbridge(不要和容器的macvlan重名)的macvlan接口
ip link add hdbridge link eth0 type macvlan mode bridge
#为该虚拟接口分配静态ip,并启用
ip addr add 192.168.31.10 dev hdbridge
ip link set hdbridge up
#修改路由,使宿主机到192.168.31.8的通信全部经由hdbridge进行
ip route add 192.168.31.8 dev hdbridge

运行完,宿主机器便可 ping 通 OpenWrt 容器,可以加入启动脚本,这部分内容多但不难,不进行赘述

参考:https://notesail.com/posts/macvlan-host.html

这里最大问题不是互通,而是树莓派本身无法使用 Openwrt 作为网关,目前还未找到解决办法,如有大佬路过还请指导一下,help…

其实最简单的办法就是花钱换台直接支持 dhcp 网关定义的路由, so,下次换路由大概率不会再考虑小米了。

常用命令

#网络修改
vi /etc/netplan/50-cloud-init.yaml
#应用修改
netplan apply

#HDCP Server 相关命令
vi /etc/network/interfaces
vi /etc/dhcp/dhcpd.conf
systemctl restart/stop/status isc-dhcp-server.service

还有哪些好玩的?

主题?

在系统 -> 语言与界面 -> Argon-Light 刷新后就是截图中的内容。

想要在局域网中有一个自己的域名?

网络 -> 主机名 绑定主机名和 IP 地址即可。

剩余就是 openwrt 本身的一些功能插件了,这里不做说明,折腾愉快。

这下终于在 iPad 上操作一些容器或者公共项目而不需要开电脑啦,同时也不怕 Switch 总是不稳定掉线啦。树莓派还剩这么多内存,还可以搭一个 Git 服务器,两个文件服务器,一堆小工具,强!!!

PS:OpenWrt 是局域网中的一个路由,以及网关,但实际上,还可以在树莓派上装一个 AdguardHome,然后将 OpenWrt 指向小米路由的 DNS 改为树莓派的 IP,这样便可以对出网的流量再进行一次广告过滤。(如果使用AdguardHome,那么 DHCP 服务器也可以交给AdguardHome做,网关指向 OpenWrt 即可。)


0条评论

发表评论