文章

N1在armbian的docker中使用openwrt

  编辑于:2024-02-28
文章目录

前言

N1的性能比较强,这里可以在N1上运行一个openwrt来方便的进行科学上网。

开始

准备

首先要在N1中运行armbian并且安装docker:

curl -fsSL https://get.docker.com | bash

关于N1的刷机可以参考:斐讯N1刷机并配置SMB
完成了docker的安装我们就可以进行下一步了。

运行openwrt

先将openwrt的docker镜像导入到本地

docker pull unifreq/openwrt-aarch64:r9.10.24

打开网卡的混杂模式(IPV6可不开混杂模式)

ip link set eth0 promisc on

接着给docker创建网络,这里的192.168.2.1是主路由的IP,根据实际情况修改

docker network create -d macvlan --subnet=192.168.2.0/24 --gateway=192.168.2.1 -o parent=eth0 macnet

如果需要IPv6则需要做如下配置
1.允许docker使用ipv6,编辑vi /etc/docker/daemon.json,并添加如下内容

{
  "experimental": true,
  "ip6tables": true
}

2.创建网络时,添加IPv6配置

docker network create -d macvlan --subnet=192.168.2.0/24 --gateway=192.168.2.1 --subnet=IPv6网段 --gateway=IPv6网关 -o parent=eth0 macnet

运行openwrt

docker run --name op2 --restart always -d --network macnet --cap-add ALL unifreq/openwrt-aarch64:r9.10.24 /sbin/init

使用--cap-add ALL权限运行会导致部分功能不可用,此时可将--cap-add ALL换成--privileged但是可能会导致停止容器时宿主机重启,这是因为使用了--privileged创建容器, 在内部关机或重启时拥有把HOST OS也关机的权限,具体讨论可见https://github.com/SuLingGG/OpenWrt-Docker/issues/8
如果需要使用IPV6,则使用下列命令运行

docker run --name op2 --restart always --sysctl="net.ipv6.conf.all.disable_ipv6=0" --sysctl="net.ipv6.conf.default.disable_ipv6=0" --sysctl="net.ipv6.conf.default.accept_ra=2" --sysctl="net.ipv6.conf.all.accept_ra=2" -d --network macnet --cap-add ALL unifreq/openwrt-aarch64:r9.10.24 /sbin/init

修改docker内网络设置

docker exec -it op2 /bin/bash

此处可能会出现错误,那么改用

docker exec -it op2 /bin/sh

要注意,执行完上面的命令后,我们这里就已经进入了docker的容器内,此时修改的是openwrt的设置了
修改网络设置vi /etc/config/network
输入i开始编辑,编辑完成之后按ESC退出编辑,然后输入:wq(不要忘记冒号)回车保存。这里要确保设置的IP和主路由的IP在同一个网段内。

现在退回到bash-4.4#这个界面了,这里输入exit退出容器回到n1的armbian终端。

重启openwrt容器使得设置生效

docker restart op2

重启完成之后,就可以访问docker内的openwrt了,IP为你在容器内设置的IP,例如192.168.2.2,用户名为:root,密码为:password
进入管理后台之后打开网络→接口修改LAN接口的参数,将网关地址设置为主路由的IP。

如果你需要使用N1自动管理DHCP,则在主路由的网络-接口中关闭DHCP

重启电脑后,在电脑中运行

ipconfig

查看默认网关是否已经修改成了N1的openwrt的IP,如果是,那么就成功了。
但是这样设置下的N1如果出现了故障,那么整个局域网可能都会出现网络故障。另外一种方案则是使用主路进行DHCP管理,在需要特殊功能的设备上手动设置网关,打开主路由的DHCP设置,并且关闭N1内的DHCP。
windows打开网络和Internet设置→更改适配器选项,选择正在使用的网卡(网线一般为以太网,WiFi为WLAN)→右键属性→Internet协议版本4

防火墙设置:
N1的openwrt的管理后台,打开网络→防火墙→自定义规则,添加

iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

重启防火墙即可,自此n1内使用docker运行openwrt设置完成。

补充

有的时候IPV6会出现问题(科学上网的gfw模式不生效等),可以尝试将主/旁路由的IPV6都禁用来解决。

参考资料:
斐讯N1小钢炮固件docker安装最新版openwrt实现旁路由伪软路
N1刷电视盒子&主旁路由&小钢炮教程
N1及贝壳云Armbian 5.98(加强版), 内核5.3.x, 及 Docker Openwrt
https://docs.docker.com/network/drivers/macvlan/
https://meta.appinn.net/t/topic/46007/8

发表回复

  • 评论5则,共1页,当前第1
    • shen159876

      请问下添加的这句防火墙的意义在哪里
      iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
      不添加的话我也一直可以用

    • nie

      请问如果我使用主路由管理DHCP,armbian中的openwrt开启科学上网功能,如何使得armbian也能科学上网呢?网上找了一圈也没搞定。 谢谢[undefined]

    • nie

      请问在使用主路由管理DHCP,armbian中openwrt开启科学上网的情况下,如何使得armbian也能科学上网?