由測評者HonestQiao提供
米爾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:
聯網ip:192.168.1.237(DHCP獲取)
與OpenWRT互通ip:192.168.10.253(固定)
3. OpenWRT:
聯網ip:192.168.1.246(DHCP獲取)
與Ubuntu互通ip:192.168.10.254(固定)
子網:192.168.11.254/24
注意:上述通過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 以太網交換機主以太網接口。
具體的網絡接口信息,可以查看官方手冊了解:
現在我們只需要知道:
Ethernet 0:分配各Ubuntu使用,用于宿主系統聯網
Ethernet 1~4:分配給OpenWRT系統使用
Ethernet 1:用于OpenWRT聯網
Ethernet 2~4:用作LAN接口;當然,如果有多個網絡接入,可以自由分配用作多WAN接入
為了便于識別,我們可以修改一下系統配置,使得網絡接口的名稱更可讀一些,將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
具體操作如下圖:
上面的配置,表示將8000端口,反向代理到192.168.10.254的80端口,后續訪問 http://192.168.1.237:8000/
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地址并成功聯網:
在OpenWRT管理界面中,也可以查看當前連接的設備信息:
四、總結
到這里,我們已經完成了這款超級強大的OpenWRT軟路由的建造了。關于OpenWRT的具體功能使用,同學們可以繼續摸索了。
得益于米爾MYD-J1028X開發板基于NXP LS1028A處理器的強大,這個軟路由性能良好,網速飛奔,頂呱呱!!!
-
開發板
+關注
關注
25文章
5062瀏覽量
97581
發布評論請先 登錄
相關推薦
評論