由測評者HonestQiao提供
米爾MYD-J1028X開發(fā)板基于NXP LS1028A處理器,雙核 Cortex-A72,主頻1.5GHz,而且,支持6個千兆網(wǎng)口,且都支持TSN(開發(fā)板支持5個千兆工業(yè)網(wǎng)口)。強勁的性能,豐富的千兆網(wǎng)口,用來做路由器,那是再適合不過了。
這篇文章,就分享了,如何構(gòu)建一臺超級強大的OpenWRT軟路由。
目錄:
一、網(wǎng)絡(luò)結(jié)構(gòu)說明
二、建造步驟
1. 安裝docker
2. 設(shè)置普通用戶管理docker權(quán)限
3. Ubuntu主機網(wǎng)絡(luò)接口設(shè)置
4. docker環(huán)境網(wǎng)絡(luò)設(shè)置
5. 啟動openwrt的docker實例
6. 互通互訪設(shè)置
7. 將物理網(wǎng)絡(luò)接口Ethernet 1~4分配給OpenWRT使用
8. 配置OpenWRT的基礎(chǔ)網(wǎng)絡(luò)
9. OpenWRT防火墻設(shè)置
10. 互通互訪測試
11. 端口轉(zhuǎn)發(fā)設(shè)置
12 登錄OpenWRT管理界面
13. 子網(wǎng)設(shè)置
三、實際效果
四、總結(jié)
一、網(wǎng)絡(luò)結(jié)構(gòu)說明
這個OpenWRT軟路由的網(wǎng)絡(luò)結(jié)構(gòu)如下:
傳說,OpenWRT已經(jīng)支持了NXP LS1028A,可以找到相關(guān)的信息:
OK1028與LS1028ARDB的區(qū)別 - Powered by Discuz! (witech.com.cn)
[OpenWrt Wiki] OpenWrt v21.02.0 Changelog
但是沒有找到具體的應用,為了避免入坑,我選擇了更穩(wěn)妥的方式,在米爾MYD-J1028X開發(fā)板上運行官方的Ubuntu,然后安裝docker,并在docker中跑OpenWRT,這個方案,目前非常成熟了。
那最終實現(xiàn)的效果就是:
1. 開發(fā)板跑Ubuntu;
2. OpenWRT跑在docker中;
3. 開發(fā)板的五個千兆網(wǎng)口,一個留給Ubuntu聯(lián)網(wǎng)自用,其他的全部分配給OpenWRT
4.Ubuntu和OpenWRT能夠互訪
5.OpenWRT通過一個網(wǎng)口直接聯(lián)網(wǎng),而不是通過docker再通過Ubuntu聯(lián)網(wǎng),以求達到性能最優(yōu)化
6. OpenWRT管理一個完整的子網(wǎng)
其中涉及到的網(wǎng)段規(guī)劃:
1. 主路由:192.168.1.1/24網(wǎng)段
2. Ubuntu:
聯(lián)網(wǎng)ip:192.168.1.237(DHCP獲取)
與OpenWRT互通ip:192.168.10.253(固定)
3. OpenWRT:
聯(lián)網(wǎng)ip:192.168.1.246(DHCP獲取)
與Ubuntu互通ip:192.168.10.254(固定)
子網(wǎng):192.168.11.254/24
注意:上述通過DHCP獲取的IP地址,不是固定的,會根據(jù)實際情況變化。
二、建造步驟
1. 安裝docker
sudo apt update
sudo apt upgrade -y
sudo apt install docker-ce -y
2. 設(shè)置普通用戶管理docker權(quán)限:
如果以root用戶建造,可以跳過,但是強烈建議以自己的用戶運行,而非root用戶。
sudo usermod -aG docker $USER
newgrp docker
docker ps -a
3. Ubuntu主機網(wǎng)絡(luò)接口設(shè)置:
系統(tǒng)默認網(wǎng)絡(luò)接口名稱,為eno0、eno2、swp0、swp1、swp2、swp3。
其中:eno0對應Ethernet 0,swp0~3對應Ethernet1~4,eno2為DSA 以太網(wǎng)交換機主以太網(wǎng)接口。
具體的網(wǎng)絡(luò)接口信息,可以查看官方手冊了解:
現(xiàn)在我們只需要知道:
Ethernet 0:分配各Ubuntu使用,用于宿主系統(tǒng)聯(lián)網(wǎng)
Ethernet 1~4:分配給OpenWRT系統(tǒng)使用
Ethernet 1:用于OpenWRT聯(lián)網(wǎng)
Ethernet 2~4:用作LAN接口;當然,如果有多個網(wǎng)絡(luò)接入,可以自由分配用作多WAN接入
為了便于識別,我們可以修改一下系統(tǒng)配置,使得網(wǎng)絡(luò)接口的名稱更可讀一些,將swp0~3修改為eth1~4
先通過以下的指令,獲取網(wǎng)絡(luò)接口名稱配置文件:
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,并設(shè)置網(wǎng)絡(luò)接口的混雜模式,以便他們可以被分配到OpenWRT使用:
# 啟用網(wǎng)絡(luò)接口
sudo ifconfig eth1 up
sudo ifconfig eth2 up
sudo ifconfig eth3 up
sudo ifconfig eth4 up
# 設(shè)置混雜模式
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
# 查看網(wǎng)絡(luò)接口狀態(tài):
ip addr show
對應的網(wǎng)絡(luò)接口信息中,出現(xiàn)PROMISC,則表示開啟混雜模式成功
4. docker環(huán)境網(wǎng)絡(luò)設(shè)置:
為了Ubuntu和OpenWRT互通,專門設(shè)置一個網(wǎng)段192.168.10.0/24用于雙方ip的設(shè)置,寄生于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
設(shè)置后,可以查看docker的網(wǎng)絡(luò)情況:
docker network ls
5. 啟動openwrt的docker實例
openwrt的docker鏡像有很多,經(jīng)過了解,我選擇了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鏡像,不需要指定網(wǎng)絡(luò)和ip,docker會自動設(shè)定;
但為了雙方互通互訪,這里設(shè)定為我們剛才創(chuàng)建的macnet1,并指定為192.168.10.254。
關(guān)于docker的網(wǎng)絡(luò)以及macvlan的使用,可以查看docker官方的資料。
啟動后,可以查看當前運行的實例:
docker ps
6. 互通互訪設(shè)置:
此時,需要在Ubuntu上,添加一個虛擬網(wǎng)絡(luò)接口,橋接到macvlan上去,并設(shè)定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
設(shè)置后,可以查看該虛擬網(wǎng)絡(luò)接口的狀態(tài):
ip add show mymacvlan
7. 將物理網(wǎng)絡(luò)接口Ethernet 1~4分配給OpenWRT使用:
使用docker exec openwrt ifconfig,可以查看OpenWRT當前掛載的網(wǎng)絡(luò)接口。
要將網(wǎng)絡(luò)接口分配給OpenWRT使用,需要將其設(shè)置到OpenWRT的Docker Namespace隔離空間中來。
通過下面的步驟,進行操作:
首先,獲取當前OpenWRT的Namespace隔離空間:
nspid=$(sudo docker inspect -f '{{.State.Pid}}' openwrt)
echo $nspid
正常顯示,說明獲取到了;如果OpenWRT容器沒有運行了,則獲取不到。
然后進行設(shè)置:
sudo mkdir -p /var/run/netns/
sudo ln -s /proc/$nspid/ns/net /var/run/netns/$nspid
echo $nspid
ip netns list
兩者一致,說明ns空間設(shè)置正確,然后再設(shè)置網(wǎng)絡(luò)接口的歸屬:
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中,是否正確獲得這些網(wǎng)絡(luò)接口的使用權(quán):
執(zhí)行:
docker exec openwrt ifconfig
或者:
sudo ip netns exec $nspid ifconfig
設(shè)置正確的情況下,將會看到eth1~4,已經(jīng)分配到了OpenWRT中了。
而在Ubuntu主機中,執(zhí)行ifconfig -a,將再也看不到這幾個網(wǎng)絡(luò)接口了。
然后,再為OpenWRT啟用這幾塊網(wǎng)絡(luò)接口即可:
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的基礎(chǔ)網(wǎng)絡(luò):
設(shè)置好網(wǎng)絡(luò)接口以后,就可以配置OpenWRT的基礎(chǔ)網(wǎng)絡(luò),以便于后續(xù)進入圖形界面進行管理。
因為OpenWRT的Docker已經(jīng)運行了,我們可以通過docker命令,直接連接到OpenWRT環(huán)境中來進行配置:
docker exec -it openwrt sh
通過上面的指令,進入OpenWRT的shell環(huán)境,然后,編輯網(wǎng)絡(luò)配置文件:
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'
主要需要修改如下的部分:
其目的,是設(shè)置eth0的固定ip位192.168.10.254,以便和Ubuntu互通互訪;
然后,設(shè)置eth1為WAN網(wǎng)絡(luò)接口,通過DHCP從主路由獲取ip地址。
配置完成后,重啟網(wǎng)絡(luò),就能生效了:
/etc/init.d/network restart
用ifconfig可以查看網(wǎng)絡(luò)狀態(tài):
因為使用了DHCP,所以eht1顯示的實際IP,可能會和我們上的圖不一致,因為是DHCP獲取的。
9. OpenWRT防火墻設(shè)置:
設(shè)置好了以后,我們還能不能直接從Ubuntu訪問,還需要進行防火墻設(shè)置:
vi /etc/firewall.user
# 在最后添加下面的內(nèi)容:
# user
iptables -I INPUT -s 192.168.10.0/24 -j ACCEPT
iptables -t nat -I POSTROUTING -o eth1 -j MASQUERADE
具體如下:
其中,iptable兩行設(shè)置,第一行允許192.168.10.0/24子網(wǎng)訪問管理,第二行允許eth1作為NAT讓子網(wǎng)設(shè)備上網(wǎng)。
10. 互通互訪測試:
在OpenWRT上,ping 192.168.10.253
在Ubuntu上,ping 192.168.10.254
在Ubuntu上,訪問OpenWRT的luci服務:
curl -v http://192.168.10.254/
此時,互通互訪已經(jīng)成功了。
11. 端口轉(zhuǎn)發(fā)設(shè)置:
但是,這是Ubuntu上和OpemWRT互訪互通,我們還需要在其他電腦上,能夠通過luci管理OpenWRT。
因為Ubuntu掛載主路由上,網(wǎng)段為192.168.1.0/24,ip為192.168.1.237,而我的MacBook Pro也掛載這個網(wǎng)段下,所以,進一步配置,使得通過瀏覽器訪問192.168.1.237能夠訪問到OpenWRT。
這一點,可以在Ubuntu上,通過iptables的端口轉(zhuǎn)發(fā)功能來實現(xiàn),也可以通過軟件來實現(xiàn)。
因為后續(xù)還會有其他的測試,所以我用harpoxy這款專用代理軟件來實現(xiàn)。
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端口,后續(xù)訪問 http://192.168.1.237:8000/
haproxy的功能非常強大,而且配置簡潔明了,推薦學習。
配置好以后,可以檢查配置,無誤后,即可運行:
sudo haproxy -f /etc/haproxy/haproxy.cfg -c
sudo /etc/init.d/haproxy start
現(xiàn)在,基礎(chǔ)設(shè)置妥當了,可以進入OpenWRT的圖形管理界面了。
12 登錄OpenWRT管理界面:
直接訪問 http://192.168.1.237:8000/ 即可:【192.168.1.237為Ubuntu從主路由器獲得的ip地址】
默認的用戶名和密碼為:root password
輸入后即可進入管理界面:
?
raymondwong/openwrt_r9這個版本很強大,集成了很多功能:
不過這篇文章主要是講建造,所以在這里就不多說了,感興趣的同學,可以詳細了解。
13. 子網(wǎng)設(shè)置:
之前我們將Ethernet1~4,均分配給了OpenWRT,分別掛在eth1~4,其中eth1用作WAN聯(lián)網(wǎng),eth2~4我們就可以作為LAN的接口了。
如果了解MWAN,可以將eth2~4進行分配到MWAN使用,實現(xiàn)多網(wǎng)絡(luò)接入。
進入網(wǎng)絡(luò)-接口界面中,可以查看當前設(shè)置的網(wǎng)絡(luò)接口:
?
從上面可以看到:
eth0設(shè)置為LAN,ip為192.168.10.254,用于和Ubuntu互通互訪;
eth1設(shè)置為WAN,用于從主路由器獲取IP,接入網(wǎng)絡(luò)
下一步,點擊添加新接口,將剩下的網(wǎng)絡(luò)接口應用起來:
在這里,給其取名為lan2,并設(shè)置為橋接模式,將eth2、3、4橋接到一起。
曾經(jīng)嘗試過,將eth0也橋接到一起,但是會導致主路由的DHCP廣播通過macvlan污染過來。
然后,設(shè)置LAN2的地址:
上述地址,也可以設(shè)置為192.168.11.1,這樣子看起來更給力一點,隨你心意了。
注意防火墻部分,勾選lan即可:
最下面有DHCP的設(shè)置,開啟即可:
最后點擊保存并應用并生效:
保存應用后,返回到了接口列表頁面,再點擊一下對應的連接按鈕,即可正式啟用:
如果LAN2部分沒有顯示IP地址,表示沒有啟用,需要點擊連接即可。
此時,子網(wǎng)也設(shè)置好了,可以在Ethernet 2~4上,連接其他網(wǎng)絡(luò)設(shè)備測試了。
三、實際效果:
我這邊的實測測試,分別連接了三個設(shè)備:
Ethernet 2:連接星光派單板計算機
Ethernet 3:連接ThinkPad筆記本
Ethernet 4:連接Dell筆記本
都順利的自動獲取IP地址并成功聯(lián)網(wǎng):
在OpenWRT管理界面中,也可以查看當前連接的設(shè)備信息:
四、總結(jié)
到這里,我們已經(jīng)完成了這款超級強大的OpenWRT軟路由的建造了。關(guān)于OpenWRT的具體功能使用,同學們可以繼續(xù)摸索了。
得益于米爾MYD-J1028X開發(fā)板基于NXP LS1028A處理器的強大,這個軟路由性能良好,網(wǎng)速飛奔,頂呱呱?。?!
-
開發(fā)板
+關(guān)注
關(guān)注
25文章
4840瀏覽量
96867
發(fā)布評論請先 登錄
相關(guān)推薦
評論