杀鸡不用牛刀,家庭网络改造记
本文首发在文主的个人博客
结合热门的京东云产品,小米AX wifi6系列路由,单独的DNS以及macvlan的部署模式,希望对你有所帮助,如需转载,请注明原文地址,谢谢。
#### 背景:
每年春节是必回家过滴,由于前面装修都是父母+包工头弄的,结果把入户网弄到了鱼缸下面的柜子里,我回去住的次卧又隔了两堵墙,虽然K3的穿墙挺牛P的,但是结果就是次卧的信号很不好,今年回去打算把网络搞搞。另外之前联通小水管去年10月份到期,换了更实惠的移动600M宽带,平时2老就在家看看iptv刷刷小视频的那点操作,完全是闲置资源,于是又有了挖京豆的想法。
#### 目标:
1. 优化网络,AP扩展或者组MESH;
2. 闲置资源利用,部个挖京豆或者甜糖服务上去;
3. 现在并且以后也能的核心需求:科学上网环境;
4. 解决移动外网访问,只要不出大问题,远程异地可以简单管理下设备;
#### 一、计划
看了一些资料后,决定采用mesh方案;
挖京豆当然先考虑京东的亲儿子们,虽然设备还没wifi6,但是平台先搞个wifi6。本来打算买京东云的AX1800的,但是看论坛也问了下客服,包括Q群,功能优先,兼顾造型。要能挖豆,要能组mesh,跟光猫,软路由和在一起好看点,最后选择了小米AX5京东云版。也就是京东和小米一起生的,这种2儿子以后会不会小米和京东都不鸟呢...
另外一台设备买的AX6,近期的性价比产品。原计划是软路由拨号,布虚拟机,AX6做有线AP,AX5放在我的房间做MESH。在JD上采买了后就直接寄到家里了。
#### 二、准备工作
因为疫情,今年早几天回家,才有时间趁早折腾一下,回家前京东下单,正好人到家,东西也到了。
之前是用一台GK55的双网口小主机 + F迅K3做AP。
之前的网络拓扑结构
按我在计划中的想法调试了下,发现情况有变化:
* 1. AX5京东云在MESH下无法挖豆(可能后期开放吧);
* 2. 小米设备在有线中继(也就是AP)模式下无法组MESH。
看了下油管上的视频,有个说小米AP兼容mesh的,发现并不是调整到有线中继模式下的AP。看来方案得调整...
拆改了2次,最后还是用的AX5做主路由,AX6放次卧做mesh,再配合旁路由方式满足我重度科学上网的需求。
另外我发现,GK55这台机器,放在父母这用,配置太奢华了(J4125+8G内存+1T 850EVO msata + 1T 850pro sata ssd),尤其是存储,简直就是豪配,必须优(简)化(配)下,又拿回了当初做单臂路由,后来做机顶盒罢工的N1。
调整后的网络拓扑图
小插曲:其实并不是N1罢工,我回去后发现是电源没插😂(没错,就是没插电源,我爸说之前找移动宽带的装维上门看看,也没搞明白,后来连机器都开不了了,我当时还以为N1寿终正寝了呢),我到家才发现是电源没插,插上后发现看电视的软件都需要升级...
我之前也准备了当贝B3pro做年货孝敬爸妈,N1还是退下来顶GK55的岗做旁路由。GK55打算挂小黄鱼,或者装系统拿来看奶(Net)妃(flix)。
#### 三、实施
本文不是教程,所以实施并未说的太细。主要步骤是:
##### * N1安装armbian
##### * armbian的软件配置
##### * 路由设备的配置
##### 3.1.1 N1安装armbian的原因
选择Armbian而不直接在N1上装openwrt的原因。
N1单装个openwrt太浪费,在armbian上装docker版的openwrt,还能布adguard home dns服务器,再布个nginx做外网-内网转发,布个甜糖,有空间的话再布Home Assistant和数据库,最大化的压榨N1 CPU和8G空间。
##### 3.1.2 步骤
去恩山N1版块找个现成的armbian系统,我选了Armbian_20.11_Arm-64_focal_current_5.9.0相对新的版本(家用软件,有新的不用旧的);
先写到U盘上,引导成功后,运行
./install-aml.sh
把系统写到EMMC(N1的内置存储空间)中,当然也可以不写到emmc,个人习惯。
##### 3.2.1 Armbian的软件配置
N1单网口,做旁路由,里面的docker跑各种服务,N1就是宿主机,都需要内置的macvlan和docker建立的macvlan通信,docker里面的服务要访问外网,也要通过端口,所以打开网卡的混杂模式是必须的。
我的方案是用了macvlan和家庭网并在一个网域内,习惯用桥接和docker通信 应该也可以,个人习惯,我个人认为macvlan更清楚些,也少层nat。
调试阶段可以运行
ip link set eth0 promisc on
打开网卡混杂模式,后面都调通了可以按照下面2种方式开机就自动打开混杂模式:
方式1(简单):
运行
nano /etc/rc.local
加入下列代码
ip link set eth0 promisc on
方式2(完善但需要小心操作):
nano /etc/network/interfaces
加入下列代码:
auto eth0
iface eth0 inet manual
up ip link set eth0 promisc on
auto macvlan
iface macvlan inet static
address x.x.x.16 # 修改成你需要的N1盒子宿主机ip
netmask 255.255.255.0
gateway x.x.x.1 # 需改成你的主路由ip或旁路由的ip
dns-nameservers x.x.x.5 # 需改成你的主路由ip或旁路由或ADG DNS服务器或114.114.114.144国内公共dns
pre-up ip link add macvlan link eth0 type macvlan mode bridge
post-down ip link del macvlan link eth0 type macvlan mode bridge
改完后重启网络
systemctl restart networking
或者重启系统查看效果
##### 3.2.1 Docker创建macvlan
docker容器,在macvlan模式下,是访问不到宿主机和外网的,刚才已经把宿主机的macvlan建立了,还需要建立docker的macvlan,让这2个macvlan互通,实现macvlan模式下的docker互联互通,运行
docker network create -d macvlan --subnet=x.x.x.0/24 --gateway=x.x.x.2 -o parent=eth0 macnet
这里x.x.x.2一定是你的主路由地址。
##### 3.2.2 拉取Portainer (非必要)
docker的图形化管理界面,很方便,能省去不少命令操作。
先创建个volume,方便数据持久化
docker volume create portainer_data
运行下面命令部署下去
docker run -d --name=portainer --net=host --restart always -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:linux-arm64
创建macvlan:docker network create -d macvlan --subnet=192.168.x.0/24{主路由网域} --gateway={旁路由地址} --opt com.docker.network.driver.mtu=1450 -o parent=eth0 macnet
##### 3.2.3 拉取ADGuard Home (非必要)
AX5的固件好像有bug,开启DHCP,指定默认网关貌似不工作,openwrt的DHCP又很烂,对中文支持极度不友好,所以本地DNS服务器和DHCP的工作都交给ADGuard Home来完成,如果你不需要本地dns,可以不用ADG。
先创建个volume,方便数据持久化
docker volume create adg_data
运行下面命令部署下去
docker run --name adguardhome --restart always --network macnet --ip x.x.x.5 -p 53:53/tcp -p 53:53/udp -p 67:67/udp -p 68:68/tcp -p 68:68/udp -p 80:80/tcp -p 443:443/tcp -p 853:853/tcp -p 3000:3000/tcp -v adg_data:/opt/adguardhome/conf -v adg_data:/opt/adguardhome/work -d adguard/adguardhome:arm64-latest
ip x.x.x.5是ADG的管理地址,我手动指定了,如果不指定,会由docker的macvlan自动分配。
致于DNS的配置,可以看下这篇帖子,把国内和外面的DNS配上去,个人觉得国内配个阿里,国外配个谷歌就够了。
https://sspai.com/post/63088
##### 3.2.4 拉取OpenWrt (必要)
运行下面命令部署下去
docker run --name openwrt --restart always -d --network macnet --ip x.x.x.1 --privileged unifreq/openwrt-aarch64:latest
进到openwrt容器内,运行
vi /etc/config/network
修改OpenWrt的地址。关闭DHCP,并且把DHCP服务和DNS指向.5的ADG服务器
防火墙策略添加:
iptables -t nat -I POSTROUTING -j MASQUERADE
##### 3.2.5 拉取甜糖 (非必要)
先挂个128G的U盘玩玩,如果可以,再换个外接硬盘。依次运行下列命令:
lsblk
mkdir /ttnode01
mount /dev/sda1 /ttnode01
mount -a
加入自启动
nano /etc/rc.local
加入下列代码:
mount /dev/sda1 /mnts
拉取甜糖镜像,运行
docker run -itd
-v /ttnode01:/mnts
--name ttnode01
--hostname ttnode01
--net=macnet
--ip=x.x.x.18
--privileged=true
--restart=always
zhang0510/ttnode-arm64
上面一套下来,软环境基本搞定,硬环境上,提前把AX5(主路由)和AX6(MESH)组 好。然后
光猫改桥接(LAN) <-----> AX5(WAN)
AX5(LAN) <-----> N1(LAN)
AX6和AX5组无线mesh。
AX5只拨号,京东云内置的挖豆不用管,多少随缘,佛系。AX5关闭DHCP。
OPENWRT关闭DHCP,ADG打开DHCP。
#### 四、运行情况的观察和调试
期间也测试了下宽带情况,N1的小身板带移动家宽600M,有损耗,对我来说损耗能接受。毕竟旁路由模式,也是过流量然后各种转抛。
纯用户折腾上,不是各种up主那种方法论实践,以实现我的目的即可:
##### 4.1 单AX5环境下,测速情况
##### 4.2 AX5 + N1旁路由,测速情况
##### 4.3 AX5 + N1旁路由 + AX6 mesh,测速情况
#### 五、总结
* ##### 网络覆盖满意
单挑,K3真的是信号王,K3在我的次卧,手机信号还有1个格-3格,但是单AX5或者单AX6的情况下,手机信号1格甚至频繁断连。组成mesh后,信号都满了。
* ##### N1替代GK55,物尽其能
AX5单跑的情况下,好像比N1旁路由测速数据上快一点点,但是我感觉实际使用没 差别。不知道N1的极限能到多少,测速数据能接受,最后的测速图,猜测应该是京东云和甜糖的服务影响了些上传测试。
* ##### 有了边缘收益
昨晚正式调整好网络结构,也部署一台甜糖docker上去,京东云还是在7天的锁定期,10豆/天,等7天后看看什么状况吧...
甜糖目前也是刚部署下去,目前网络层面是OK的,看下图。
* ##### 颜值都还挺能打
看几个小家伙在一起,还挺搭配
藏在鱼缸下的柜子里,刚运行1天,稳定尚未得知,不过自从上次GK55调整完后 ,3个多月下来非常ok。
#### 六、待补的坑。
##### 5.1 mesh下,科学上网网速稍低
卧室的信号改善了,回屋就是满格,但是科学网速不如在客厅,反应在看4k油管开始需要缓冲下,客厅可以秒开。不知道是不是ax6 mesh为无线mesh模式的原因。
##### 5.2 Nginx或者caddy做反代
接下来如果有时间还可以再调试下,我在北京的家试过ipv6,但是总感觉延迟特厉害,且跟科学插件貌似存在冲突,并且docker版的ADG DHCP竟然没有IPV6?
##### 5.3 Home Assistant部署
目前的磁盘利用率,内置的8g空间应该还可以部署HA和postgress数据库上去,再弄个tower服务做docker的自动更新。
landen
校验提示文案
violet999
校验提示文案
你不买-我不买
校验提示文案
西门吹水哥
校验提示文案
[已注销]
校验提示文案
木偶oc
校验提示文案
黑色妙脆角
校验提示文案
会飞的海胆
很复杂。
校验提示文案
汗宝
校验提示文案
莫抢我棒棒糖
校验提示文案
我又回来啦啦啦
校验提示文案
homelab玩家
校验提示文案
homelab玩家
校验提示文案
我又回来啦啦啦
校验提示文案
莫抢我棒棒糖
校验提示文案
你不买-我不买
校验提示文案
汗宝
校验提示文案
会飞的海胆
很复杂。
校验提示文案
西门吹水哥
校验提示文案
黑色妙脆角
校验提示文案
木偶oc
校验提示文案
violet999
校验提示文案
[已注销]
校验提示文案
landen
校验提示文案