采用在Docker中运行OpenWrt的方式,将开发板作为软路由。
本来是打算自行编译的,但是在论坛里看到有网友编译好的固件,所以就直接拿来就用了。
略

下载好以后,在主机上利用 scp 发送到开发板
scp openwrt-visionfive2-generic-visionfive2-ext4-sdcard.img.gz ubuntu@192.168.0.101:~
注意:文件路径和开发板ip请自行更改。
gzip -d openwrt-visionfive2-generic-visionfive2-ext4-sdcard.img.gz
# 重命名
mv openwrt-visionfive2-generic-visionfive2-ext4-sdcard.img opwnwrt.img
得到 .img 后缀文件
ubuntu@ubuntu:~$ ls
openwrt-visionfive2-generic-visionfive2-ext4-sdcard.img
也可以现在主机上解压好,再传入。
sudo mkdir /mnt/openwrt
sudo modprobe nbd
sudo apt install -y qemu-utils
sudo qemu-nbd -c /dev/nbd0 -f raw openwrt.img
lsblk -f /dev/nbd0
这里需要 nbd0p4 分区,其他都可以忽略
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
nbd0
├─nbd0p1
│
├─nbd0p2
│
├─nbd0p3
│ vfat FAT16 649E-CEB9
└─nbd0p4
ext4 1.0 rootfs ff313567-e9f1-5a5d-9895-3ba130b4a864 1.2G 16% /mnt/openwrt
sudo mount /dev/nbd0p4 /mnt/openwrt
# 查看挂载情况
ubuntu@ubuntu:~$ ls /mnt/openwrt
bin etc lib lost+found overlay rom sbin tmp var
dev init lib64 mnt proc root sys usr www
# 创建压缩包输出到~
sudo tar -czvf ~/openwrt.rootfs.tar.gz /mnt/openwrt/*
cat openwrt.rootfs.tar.gz | sudo docker import - starfive2/openwrt
导入成功:
ubuntu@ubuntu:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
starfive2/openwrt latest 6588f57ace5b 11 seconds ago 247MB
ifconfig -a
# 或者
ip addr
可以看到,两个网卡分别是 end0 和 end1

sudo ip link set end0 promisc on
sudo ip link set end1 promisc on
sudo vim /etc/sysctl.conf
# 取消注释
net.ipv4.ip_forward=1
如果需要ipv6也可以一并开启

# 重新加载配置
sudo sysctl -p /etc/sysctl.conf
仅需一条网线,将路由器的任意lan口与开发的任意一个网口相连即可。
我这里选择外侧的网口,即 end0
sudo docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=end0 maclan
注意: --subnet 和 --gateway 这里要根据你上级路由器的子网划分来修改。
例如:end0 分配到的 ip 为 192.168.3.35,通常情况下请修改为 --subnet=192.168.3.0/24 --gateway=192.168.3.1
# 查看网卡情况
ubuntu@ubuntu:~$ sudo docker network ls
NETWORK ID NAME DRIVER SCOPE
25eba153ce4d bridge bridge local
d31758ea4303 host host local
45c48221eac3 maclan macvlan local
ad74e12035d9 none null local
sudo docker run --restart always --name openwrt -d --network maclan --privileged starfive2/openwrt /sbin/init
sudo docker exec -it openwrt sh
vi /etc/config/network
注意这里要根据你上级路由器的网段进行修改。
192.168.0.x 修改为自己的网段。ipaddr 可以指定为任意不冲突的地址。
config interface 'loopback'
option device 'lo'
option proto 'static'
option ipaddr '127.0.0.1'
option netmask '255.0.0.0'
config globals 'globals'
option ula_prefix 'fd07:22db:4d69::/48'
config device
option name 'br-lan'
option type 'bridge'
list ports 'eth0'
config interface 'lan'
option device 'br-lan'
option proto 'static'
option ip6assign '60'
option ipaddr '192.168.0.130'
option netmask '255.255.255.0'
option gateway '192.168.0.1'
option broadcast '192.168.0.255'
option dns '192.168.0.1'
/etc/init.d/network restart
通过同一网段下的任意主机,输入http://192.168.0.130 访问。即刚刚为 lan 设定的ip。
用户名和密码均为:root
注意及时修改密码。

防止与主路由的DHCP 服务冲突。
选择 网络 - 接口 - 编辑 lan - DHCP 服务器 - 常规设置
勾选 忽略此接口
保存并应用。

比较推荐,就算开发板出问题,也不会影响整个网络。
以 iOS 为例:
手动设置

开发板出问题,会影响整个网络,不算很推荐。
打开主路由管理面板,这里以普联路由器为例:
将网关与首选DNS都设成刚刚的lan口地址即可。
在进行下面的步骤之前,最好按照上面的方式,配置好lan口。
按照下图连接好路由器。
光猫lan ---- 开发板 end1 (用作wan)
开发板 end0 (用作lan)---- 之前的主路由器 lan (用作AP)
之前的主路由器lan ----- 其他设备
注意:
--subnet , gateway 需要与光猫分配的子网保持一致。查看:
ifconfig
# 我这里就是 192.168.1.X
end1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.38 netmask 255.255.255.0 broadcast 192.168.1.255
新建:
# 新建网卡
sudo docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=end1 macwan
# 挂载网卡
sudo docker network connect macwan openwrt
输入http://192.168.0.130 访问控制面板。
在 网络 - 接口 - 添加新接口

保存并应用,如果是路由拨号,填写好账号密码后保存。
正常的话如下图:

以普联路由器为例,输入 http://192.168.0.1 访问主路由:
找到路由设置中的 DHCP 服务器,关闭并保存

找到 LAN口设置
192.168.0.1 以外的不冲突地址,例如我这里设置为 192.168.0.200注意:以后如果需要访问原主路由,需要键入http://192.168.0.200
保存即可。

输入 http://192.168.0.130 访问控制面板
在 网络 - 接口 - 编辑 lan - 常规设置 中
将lan IPv4 地址修改为 192.168.0.1/24

在DHCP 服务器的常规设置中
取消勾选忽略此接口

保存并应用即可。
至此配置完成。
---- end ----
# 查看网络连接状况
ifconfig
# end0没有ipv4地址
end0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST> mtu 1500
inet6 xxxxxxxxx prefixlen 64 scopeid 0x20<link>
ether xxxxxxxxx txqueuelen 1000 (Ethernet)
RX packets 2620307 bytes 2239374342 (2.2 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3214847 bytes 3337392441 (3.3 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 78
sudo apt install network-manager
# 备份原网络文件,****根据自己设备而定
sudo cp /etc/netplan/****.yaml /etc/netplan/****.yaml.bak
/etc/netplan/****.yamlsudo vim /etc/netplan/****.yaml
network:
renderer: NetworkManager
ethernets:
end0:
dhcp4: no
addresses:
- 192.168.0.150/24 # 手动指定ip,网段要符合openwrt中lan口的设定
routes:
- to: default
via: 192.168.0.1 # 注意修改
nameservers:
addresses: [192.168.0.1] # 注意修改
end1:
dhcp4: true
version: 2
# 检查
sudo netplan try
Do you want to keep these settings?
Press ENTER before the timeout to accept the new configuration
Changes will revert in 110 seconds
# 检查无误,应用
sudo netplan apply
ifconfig
# 连接成功
end0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST> mtu 1500
inet 192.168.0.150 netmask 255.255.255.0 broadcast 192.168.0.255
https://www.cnblogs.com/luoshuifushen/p/16989469.html
https://mlapp.cn/376.html
更多回帖