Iruko

優しい世界に 誰だって行きたいわ

Iruko
返回文章列表

闲鱼捡漏的 RK3399 开发板 Docker 部署 OpenWrt 旁路由折腾记录

最近想给家里的网络部署上 OpenWrt ,看了一些可以刷机的路由器,感觉路由器刷机折腾起来 RAM 和 ROM 似乎都太小可玩性不太高,说来也巧,在闲鱼刷着刷着还真看到一个很邪门的东西

这是一块 4+64 的 RK3399 开发板,带一个千兆网口,据卖家说是自动售货机上拆下来的,原本运行的是 Android 系统,后来找了适配的镜像刷了 Armbian ,部署了 Docker 还用 Docker 起了一个 CasaOS

于是萌生了一个用 Docker 部署 OpenWrt 做旁路由的想法

环境说明

架构: ARMv8 / aarch64

系统: Armbian Linux

主路由 IP :192.168.1.1

准备分配给旁路由的 IP :192.168.1.233 (必须是一个不冲突的独立 IP )

步骤一:开启网卡混杂模式(极其重要)

在创建 macvlan 网络之前,必须开启物理网卡的混杂模式,否则容器网络无法正常通信

这里有个大坑,网上很多的老教程网卡名字都叫 eth0 ,但是这里的网卡一定要和你自己的匹配 先执行 ip a 查看你的实际网卡名称

root@orangepi-rk3399:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: end0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether d6:ed:62:cb:94:02 brd ff:ff:ff:ff:ff:ff
    altname enxd6ed62cb9402
    inet 192.168.1.5/24 metric 100 brd 192.168.1.255 scope global dynamic end0
       valid_lft 84562sec preferred_lft 84562sec
    inet6 2409:8a7c:be39:2390:90d8:8d94:b322:205b/64 scope global temporary dynamic 
       valid_lft 252465sec preferred_lft 83973sec
    inet6 2409:8a7c:be39:2390:d4ed:62ff:fecb:9402/64 scope global dynamic mngtmpaddr noprefixroute 
       valid_lft 252465sec preferred_lft 166065sec
    inet6 fe80::d4ed:62ff:fecb:9402/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
3: br-21ebba6826fd: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether da:2c:95:1d:90:4c brd ff:ff:ff:ff:ff:ff
    inet 172.18.0.1/16 brd 172.18.255.255 scope global br-21ebba6826fd
       valid_lft forever preferred_lft forever
4: br-e08849db2acb: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 62:dc:8c:04:91:3d brd ff:ff:ff:ff:ff:ff
    inet 172.19.0.1/16 brd 172.19.255.255 scope global br-e08849db2acb
       valid_lft forever preferred_lft forever
5: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether ce:a4:7e:57:66:aa brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::cca4:7eff:fe57:66aa/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
6: vethc3021fa@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
    link/ether b6:ef:9d:d9:62:53 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::b4ef:9dff:fed9:6253/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever

从输出可以清晰地看到,我的物理网卡名字是 end0

确认网卡名称后,开启混杂模式

ip link set end0 promisc on

步骤二:创建 Docker Macvlan 网络

创建一个与你主路由同网段的 macvlan 网络,注意 -o parent= 后面要跟刚刚查到的真实网卡名 end0

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

步骤三:拉取并运行 OpenWrt 容器

针对这类 ARM 架构的开发板,推荐使用 ophub/openwrt-armv8 镜像,它的优势在于会自动同步最新的 OpenWrt 源码进行编译,网上其实有很多别人打包好的老镜像,虽然开箱自带一些不能说的科学插件,但内核版本早就停更了,后续维护和折腾的成本非常高,不如直接用最新版省心

一键运行

docker run -d --name=openwrt \
  --network macnet \
  --privileged \
  --restart always \
  ophub/openwrt-armv8:latest

步骤四:修改 OpenWrt 的默认 IP

容器跑起来后,它的默认后台 IP 可能会和你的主路由(192.168.1.1)冲突,我们需要进容器给旁路由单独分配一个 IP

进入容器终端

docker exec -it openwrt bash

编辑网络配置文件

vi /etc/config/network

按 i 键盘进入编辑模式,找到 config interface 'lan' 那一段,把 option ipaddr 改为你规划好的旁路由 IP ,比如我用的是 192.168.1.233 改好后按 Esc ,输入 :wq 保存退出

重启 OpenWrt 网络服务使之生效

/etc/init.d/network restart

步骤五:配置旁路由(Web 后台操作)

现在,打开浏览器,输入你刚刚设置的旁路由 IP :192.168.1.233 (默认账号:root ,密码:password)

进入后台后,只需要做三件事

关闭 DHCP 网络 -> 接口 -> LAN -> 修改 -> 底部”DHCP 服务器” -> 勾选”忽略此接口”

旁路由不需要分配 ,我们让主路由来管理DHCP

设置网关和 DNS 在 LAN 接口的”基本设置”中

  • IPv4 网关:填你的主路由 IP (如 192.168.1.1)
  • 使用自定义的 DNS 服务器:填主路由 IP 或公共 DNS (如 223.5.5.5)

设置防火墙(动态伪装) 很多过时的教程会让你去 SSH 里敲一段 iptables -t nat -I POSTROUTING... 的防火墙规则,实际上对于较新的 OpenWrt 来说,完全不需要去管防火墙终端命令

直接在 网络 -> 防火墙 -> 基本设置 里,找到你的局域网( LAN )所在的区域,把 “IP 动态伪装 ( MASQUERADE )” 勾选上,然后点击”保存并应用”即可

总结

至此,这块从自动售货机上拆下来的 RK3399 成功再就业,旁路由完美运行

以后手机或电脑想走这个旁路由的网络,只需要把设备的网络设置改成手动(有的也叫静态 IP ),然后把网关和 DNS 都指向旁路由的 IP 就大功告成了,如果想让家里所有设备自动走旁路由,去主路由的 DHCP 设置里把网关改成旁路由 IP 即可

目录