旁路由是在不改变网络架构的情况下最方便的升级网络环境的方式,OpenWRT社区生态丰富,基本可以满足你的绝大部分上网需求。

自制OpenWRT固件

  • OpenWRT作为一个成熟的路由系统,基本适配市面上绝大部分设备,不同人编译的固件搭载了不同的插件。这里推荐使用Github Action进行固件的自编译,选择需要的插件,编译一个适合自己的固件,具体过程这里就不过多介绍了。
  • 你也可以试试开源项目OpenWRT.ai,进行固件的自编译,这里给出OpenWRT.ai默认加载的插件,可以选择性精简。
-luci-app-gpsysupgrade -luci-app-quickstart -luci-app-firewall -luci-app-advanced -luci-app-autoreboot -luci-app-cpufreq -luci-app-upnp -luci-app-fan -luci-app-wizard

上传镜像至DockerHub

  • wget命令将编译好的镜像下载至服务器中,并使用mv命令改名
  • 解压文件
gzip -d openwrt.img.gz
  • 挂载镜像
modprobe nbd
qemu-nbd -c /dev/nbd0 -f raw openwrt.img
  • 打包镜像
mkdir /opt/openwrt
mount /dev/nbd0p2 /opt/openwrt
cd /opt/openwrt
tar -czvf /opt/openwrt/openwrt.rootfs.tar.gz *
  • 导入镜像,tag部分注意修改
docker import openwrt.rootfs.tar.gz user/app:latest
  • 通过docker login登录DockerHub
  • 推送镜像
docker push user/app:latest

部署OpenWRT

  • 开启网卡混杂模式
ip link set eth0 promisc on
  • (Optional)也可以通过在/etc/rc.local中写入命令,永久开启网卡混杂模式
ip link set eth0 promisc on
  • 创建Docker网络,具体信息请根据实际情况修改,容器内需IPV6支持,需要增加相关信息
docker network create -d macvlan --subnet=192.168.10.0/24 --gateway=192.168.10.1 -o parent=eth0 openwrt
docker network create -d macvlan --subnet=192.168.10.0/24 --gateway=192.168.10.1 --subnet=fe80::/16 --gateway=fe80::1 -o parent=eth0 openwrt
  • 拉取镜像
docker run -d \
	--restart always \
	--name openwrt \
	--network openwrt \
	--privileged=true \
	user/app:latest \
	/sbin/init
  • (Optional)如需IPV6支持需要在sysctl.conf中添加如下字段:
docker exec -it openwrt bash
vi /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6=0
net.ipv6.conf.default.disable_ipv6=0
net.ipv6.conf.default.accept_ra=2
net.ipv6.conf.all.accept_ra=2
  • (Optional)如编译时选择的OpenWRT地址不在局域网网段内需自行修改ipaddr
docker exec -it openwrt bash
vi /etc/config/network
  • 重启后通过填写的局域网地址即可打开OpenWRT后台界面