如何建造超级强大的OpenWRT软路由——基于NXP LS1028A开发板
米尔MYD-J1028X开发板基于NXP LS1028A处理器,双核 Cortex™-A72,主频1.5GHz,而且,支持6个千兆网口,且都支持TSN(开发板支持5个千兆工业网口)。强劲的性能,丰富的千兆网口,用来做路由器,那是再适合不过了。 这篇文章,就分享了,如何构建一台超级强大的OpenWRT软路由。 目录: 一、网络结构说明 二、建造步骤 1. 安装docker 2. 设置普通用户管理docker权限 3. Ubuntu主机网络接口设置 4. docker环境网络设置 5. 启动openwrt的docker实例 6. 互通互访设置 7. 将物理网络接口Ethernet 1~4分配给OpenWRT使用 8. 配置OpenWRT的基础网络 9. OpenWRT防火墙设置 10. 互通互访测试 11. 端口转发设置 12 登录OpenWRT管理界面 13. 子网设置 三、实际效果 四、总结
一、网络结构说明 这个OpenWRT软路由的网络结构如下:
传说,OpenWRT已经支持了NXP LS1028A,可以找到相关的信息: OK1028与LS1028ARDB的区别 - Powered by Discuz! (witech.com.cn) [OpenWrt Wiki] OpenWrt v21.02.0 Changelog 但是没有找到具体的应用,为了避免入坑,我选择了更稳妥的方式,在米尔MYD-J1028X开发板上运行官方的Ubuntu,然后安装docker,并在docker中跑OpenWRT,这个方案,目前非常成熟了。 那最终实现的效果就是: 1. 开发板跑Ubuntu; 2. OpenWRT跑在docker中; 3. 开发板的五个千兆网口,一个留给Ubuntu联网自用,其他的全部分配给OpenWRT 4. Ubuntu和OpenWRT能够互访 5. OpenWRT通过一个网口直接联网,而不是通过docker再通过Ubuntu联网,以求达到性能最优化 6. OpenWRT管理一个完整的子网 其中涉及到的网段规划: 1. 主路由:192.168.1.1/24网段 2. Ubuntu: 3. OpenWRT: 注意:上述通过DHCP获取的IP地址,不是固定的,会根据实际情况变化。
二、建造步骤 1. 安装docker sudo apt update
sudo apt upgrade -y
sudo apt install docker-ce -y 2. 设置普通用户管理docker权限: 如果以root用户建造,可以跳过,但是强烈建议以自己的用户运行,而非root用户。 sudo usermod -aG docker $USER newgrp docker docker ps -a
3. Ubuntu主机网络接口设置: 系统默认网络接口名称,为eno0、eno2、swp0、swp1、swp2、swp3。 其中:eno0对应Ethernet 0,swp0~3对应Ethernet1~4,eno2为DSA 以太网交换机主以太网接口。 具体的网络接口信息,可以查看官方手册了解:
现在我们只需要知道: 为了便于识别,我们可以修改一下系统配置,使得网络接口的名称更可读一些,将swp0~3修改为eth1~4 先通过以下的指令,获取网络接口名称配置文件: sudo grep -rn swp0 /etc/udev
sudo vim /etc/udev/rules.d/73-fsl-enetc-networking.rules # 将swp0~3修改为eth1-4
然后重启生效: sudo reboot 重启后,使用ifconfig -a,将会看到swp0~3变更为eth1~4 然后,我们还需要启用eth1~4,并设置网络接口的混杂模式,以便他们可以被分配到OpenWRT使用: # 启用网络接口 sudo ifconfig eth1 up
sudo ifconfig eth2 up
sudo ifconfig eth3 up
sudo ifconfig eth4 up # 设置混杂模式 sudo ip link set eth1 promisc on
sudo ip link set eth2 promisc on
sudo ip link set eth3 promisc on
sudo ip link set eth4 promisc on # 查看网络接口状态: ip addr show 对应的网络接口信息中,出现PROMISC,则表示开启混杂模式成功
4. docker环境网络设置: 为了Ubuntu和OpenWRT互通,专门设置一个网段192.168.10.0/24用于双方ip的设置,寄生于eno0上 docker network create -d macvlan \
--subnet=192.168.10.0/24 \
--ip-range=192.168.10.0/24 \
-o macvlan_mode=bridge \
-o parent=eno0 macnet1 设置后,可以查看docker的网络情况: docker network ls
5. 启动openwrt的docker实例 openwrt的docker镜像有很多,经过了解,我选择了raymondwong/openwrt_r9镜像。 docker pull raymondwong/openwrt_r9:autobuild-22.2.12-arm64 docker run --name openwrt \
--restart always \
-d --network macnet1 \
--ip=192.168.10.254 \
--privileged raymondwong/openwrt_r9:autobuild-22.2.12-arm64 /sbin/init 通常情况下,启动一个dcoker镜像,不需要指定网络和ip,docker会自动设定; 但为了双方互通互访,这里设定为我们刚才创建的macnet1,并指定为192.168.10.254。 关于docker的网络以及macvlan的使用,可以查看docker官方的资料。 启动后,可以查看当前运行的实例: docker ps
6. 互通互访设置: 此时,需要在Ubuntu上,添加一个虚拟网络接口,桥接到macvlan上去,并设定ip为192.168.10.253 sudo ip link add mymacvlan link eno0 type macvlan mode bridge
sudo ip addr add 192.168.10.253/24 dev mymacvlan
sudo ifconfig mymacvlan up 设置后,可以查看该虚拟网络接口的状态: ip add show mymacvlan
7. 将物理网络接口Ethernet 1~4分配给OpenWRT使用: 使用docker exec openwrt ifconfig,可以查看OpenWRT当前挂载的网络接口。 要将网络接口分配给OpenWRT使用,需要将其设置到OpenWRT的Docker Namespace隔离空间中来。 通过下面的步骤,进行操作: 首先,获取当前OpenWRT的Namespace隔离空间: nspid=$(sudo docker inspect -f '{{.State.Pid}}' openwrt)
echo $nspid 正常显示,说明获取到了;如果OpenWRT容器没有运行了,则获取不到。 然后进行设置: sudo mkdir -p /var/run/netns/
sudo ln -s /proc/$nspid/ns/net /var/run/netns/$nspid echo $nspid
ip netns list
两者一致,说明ns空间设置正确,然后再设置网络接口的归属: sudo ip link set eth1 netns $nspid
sudo ip link set eth2 netns $nspid
sudo ip link set eth3 netns $nspid
sudo ip link set eth4 netns $nspid 此时,可以查看OpenWRT中,是否正确获得这些网络接口的使用权: 执行: docker exec openwrt ifconfig 或者: sudo ip netns exec $nspid ifconfig
设置正确的情况下,将会看到eth1~4,已经分配到了OpenWRT中了。 而在Ubuntu主机中,执行ifconfig -a,将再也看不到这几个网络接口了。 然后,再为OpenWRT启用这几块网络接口即可: sudo ip netns exec $nspid ip link set eth1 up
sudo ip netns exec $nspid ip link set eth2 up
sudo ip netns exec $nspid ip link set eth3 up
sudo ip netns exec $nspid ip link set eth4 up sudo ip netns exec $nspid ifconfig 8. 配置OpenWRT的基础网络: 设置好网络接口以后,就可以配置OpenWRT的基础网络,以便于后续进入图形界面进行管理。 因为OpenWRT的Docker已经运行了,我们可以通过docker命令,直接连接到OpenWRT环境中来进行配置: docker exec -it openwrt sh
通过上面的指令,进入OpenWRT的shell环境,然后,编辑网络配置文件: vi /etc/config/network config interface 'lan'
option ifname 'eth0'
option proto 'static'
option ipaddr '192.168.10.254'
option netmask '255.255.255.0'
config interface 'wan'
option ifname 'eth1'
option proto 'dhcp' 主要需要修改如下的部分:
其目的,是设置eth0的固定ip位192.168.10.254,以便和Ubuntu互通互访; 然后,设置eth1为WAN网络接口,通过DHCP从主路由获取ip地址。 配置完成后,重启网络,就能生效了: /etc/init.d/network restart 用ifconfig可以查看网络状态:
因为使用了DHCP,所以eht1显示的实际IP,可能会和我们上的图不一致,因为是DHCP获取的。 9. OpenWRT防火墙设置: 设置好了以后,我们还能不能直接从Ubuntu访问,还需要进行防火墙设置: vi /etc/firewall.user # 在最后添加下面的内容: # user
iptables -I INPUT -s 192.168.10.0/24 -j ACCEPT
iptables -t nat -I POSTROUTING -o eth1 -j MASQUERADE 具体如下:
其中,iptable两行设置,第一行允许192.168.10.0/24子网访问管理,第二行允许eth1作为NAT让子网设备上网。 10. 互通互访测试: 在OpenWRT上,ping 192.168.10.253 在Ubuntu上,ping 192.168.10.254
在Ubuntu上,访问OpenWRT的luci服务: curl -v http://192.168.10.254/
此时,互通互访已经成功了。 11. 端口转发设置: 但是,这是Ubuntu上和OpemWRT互访互通,我们还需要在其他电脑上,能够通过luci管理OpenWRT。 因为Ubuntu挂载主路由上,网段为192.168.1.0/24,ip为192.168.1.237,而我的MacBook Pro也挂载这个网段下,所以,进一步配置,使得通过浏览器访问192.168.1.237能够访问到OpenWRT。 这一点,可以在Ubuntu上,通过iptables的端口转发功能来实现,也可以通过软件来实现。 因为后续还会有其他的测试,所以我用harpoxy这款专用代理软件来实现。 sudo apt install haproxy sudo vim /etc/haproxy/haproxy.cfg # 添加下面的配置
frontend web_in
mode http
maxconn 1000
bind *:8000
use_backend openwrt_server backend openwrt_server
mode http
balance roundrobin
option httpclose
server openwrt 192.168.10.254:80 check
具体操作如下图:
haproxy的功能非常强大,而且配置简洁明了,推荐学习。 配置好以后,可以检查配置,无误后,即可运行: sudo haproxy -f /etc/haproxy/haproxy.cfg -c sudo /etc/init.d/haproxy start
现在,基础设置妥当了,可以进入OpenWRT的图形管理界面了。 12 登录OpenWRT管理界面: 直接访问 http://192.168.1.237:8000/ 即可:【192.168.1.237为Ubuntu从主路由器获得的ip地址】
默认的用户名和密码为:root password 输入后即可进入管理界面:
raymondwong/openwrt_r9这个版本很强大,集成了很多功能:
不过这篇文章主要是讲建造,所以在这里就不多说了,感兴趣的同学,可以详细了解。 13. 子网设置: 之前我们将Ethernet1~4,均分配给了OpenWRT,分别挂在eth1~4,其中eth1用作WAN联网,eth2~4我们就可以作为LAN的接口了。 如果了解MWAN,可以将eth2~4进行分配到MWAN使用,实现多网络接入。 进入网络-接口界面中,可以查看当前设置的网络接口:
从上面可以看到: eth0设置为LAN,ip为192.168.10.254,用于和Ubuntu互通互访; eth1设置为WAN,用于从主路由器获取IP,接入网络 下一步,点击添加新接口,将剩下的网络接口应用起来:
在这里,给其取名为lan2,并设置为桥接模式,将eth2、3、4桥接到一起。 曾经尝试过,将eth0也桥接到一起,但是会导致主路由的DHCP广播通过macvlan污染过来。 然后,设置LAN2的地址:
上述地址,也可以设置为192.168.11.1,这样子看起来更给力一点,随你心意了。
注意防火墙部分,勾选lan即可:
最下面有DHCP的设置,开启即可:
最后点击保存并应用并生效:
保存应用后,返回到了接口列表页面,再点击一下对应的连接按钮,即可正式启用:
如果LAN2部分没有显示IP地址,表示没有启用,需要点击连接即可。 此时,子网也设置好了,可以在Ethernet 2~4上,连接其他网络设备测试了。
三、实际效果: 我这边的实测测试,分别连接了三个设备: Ethernet 2:连接星光派单板计算机 Ethernet 3:连接ThinkPad笔记本 Ethernet 4:连接Dell笔记本
都顺利的自动获取IP地址并成功联网:
访问网络的速度又快又好,播放1080P毫无压力:
在OpenWRT管理界面中,也可以查看当前连接的设备信息:
四、总结 到这里,我们已经完成了这款超级强大的OpenWRT软路由的建造了。关于OpenWRT的具体功能使用,同学们可以继续摸索了。 得益于米尔MYD-J1028X开发板基于NXP LS1028A处理器的强大,这个软路由性能良好,网速飞奔,顶呱呱!!! 在建造的过程中,遇到了不少问题,翻阅了数十篇资料,以下为部分内容,可能有遗漏;对所有看过的资料的作者,表示深深的感谢。 普通用户权限运行docker | Server 运维论坛 (learnku.com) OK1046A-C2、OK1028通过udev修改网口称-爱代码爱编程 (icode.best) Play With Container Network Interface (arthurchiao.art) linux - How can I set a static IP address in a Docker container? - Stack Overflow 网卡配置——玩转alpine linux-爱代码爱编程 (icode.best) permissions - Docker : How to avoid Operation not permitted in Docker Container? - Stack Overflow docker - Start container with multiple network interfaces - Stack Overflow (1) Docker with multiple NICs? : selfhosted (reddit.com) Play With Container Network Interface (arthurchiao.art) [Day4] 淺談 Container 實現原理, 初探 Namespace 隔離 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天 (ithome.com.tw) raymondwong/openwrt_r9 - Docker Image | Docker Hub 在docker里运行openwrt | 且听风吟 (hearthewind.top) 在树莓派上使用Dockers运行Openwrt并作为主路由器的旁路由 - HXSup (ahsup.top) Docker 部署多网口 openWrt 软路由 - 「Yang'zun」PlayGround (treesir.pub) 包含您的路由器|网关错误 (qc.to) OK1028与LS1028ARDB的区别 - Powered by Discuz! (witech.com.cn) docker和macvlan与host互通_maxuearn的博客-CSDN博客 Docker 网络模型之 macvlan 详解,图解,实验完整 - bakari - 博客园 (cnblogs.com) Ubuntu为网卡添加多个IP地址mob604756fcd161的技术博客51CTO博客 iptables做TCP/UDP端口转发【转】 - paul_hch - 博客园 (cnblogs.com) Ubuntu20.04防火墙设置简易教程(小白) - 腾讯云开发者社区-腾讯云 (tencent.com) Ubuntu 20.04防火墙 UFW做NAT转换,IP伪装,端口重定向,端口映射injexengge的博客-CSDN博客ufw端口映射 openwrt x86(软路由) 双WAN出口简明配置,小白适用,挺稳定!其他网络设备什么值得买 (smzdm.com) 阻止不需要的 DHCP 服务器的防火墙规则?- 安装和使用OpenWrt /网络和无线配置 - OpenWrt论坛
如果大家希望进一步学习,可以参考上述这些参考资料,以及Docker、OpenWRT等官方的资料进行学习。
想要了解优秀测评者“HonestQiao”关于MYD-J1028X开发板测评原文的可以点击文末“查看原文”或复制下方链接查看:http://bbs.eeworld.com.cn/thread-1216907-1-1.html想要了解米尔LS1028A处理器开发板可以去米尔官网查看具体的产品介绍:
http://www.myir-tech.com/product/MYC-J1028X.htm
|