【2022.04.21】在docker中搭建openwrt軟路由系統,實現多網口以及主路由功能
前言
沒搞完,不知道為啥一直重啟,下次再補上這篇博客
因為大多docker搭建軟路由時,實現的是旁路由單網口的拓撲
這次想要嘗試下多網口搭建openwrt,以便實現主路由功能
本次使用的docker鏡像:raymondwong/openwrt_r9 - Docker Image | Docker Hub
網口設置
先用ifconfig查看一下接口名稱,我這里是enp2s0與enp3s0
那么將對應的網卡啟動混淆模式
ip link set enp3s0 promisc on
ip link set enp2s0 promisc on
后期要關閉的話,把on改成off
為了以防萬一,比如外接網卡可能在服務器重啟后失效,那么還要加入開機自啟動
nano /etc/init.d/iplinkset.sh
將上面的兩句命令,和腳本規范開頭一起復制進來
#!/bin/sh
ip link set enp3s0 promisc on
ip link set enp2s0 promisc on
ctrl+x y entel 保存退出
增加可執行權限
chmod +x /etc/init.d/iplinkset.sh
設置開機啟動
update-rc.d iplinkset.sh defaults
如果想要刪除這個啟動項
update-rc.d -f iplinkset.sh remove
虛擬網卡
- 我們現在要基於現有的網卡創建兩個
macvlan
類型的網卡,這樣后面創建的容器才能有網卡進行掛載使用,並且使用獨立的網卡進行數據報文的通訊。macnet1
我們作為后面openWRT容器
運行的Wan口
使用,macnet2
則是Lan口
。 - OPENWRT 使用網絡說明
- wan: 192.168.1.0/24
- lan:192.168.22.0/24
macvlan模式
docker 的 macvlan 模式,這個模式通俗一點講就是在一張物理網卡上虛擬出兩個虛擬網卡,具有不同的MAC地址,可以讓宿主機和docker同時接入網絡並且使用不同的ip,此時 docker 可以直接和同一網絡下的其他設備直接通信,相當的方便,但是這種模式有一個問題,宿主機和容器是沒辦法直接進行網絡通信的,如宿主機ping容器的ip,盡管他們屬於同一網段,但是也是ping不通的,反過來也是。因為該模式在設計的時候,為了安全禁止了宿主機與容器的直接通信,不過解決的方法其實也很簡單——宿主機雖然沒辦法直接和容器內的 macvlan 接口通信,但是只要在宿主機上再建立一個 macvlan,然后修改路由,使數據經由該 macvlan 傳輸到容器內的 macvlan 即可,macvlan 之間是可以互相通信的。
創建網絡
因為我現在雙網口只接了一條,這條是入網的wan口,且在enp3s0上
因此在shell中輸入以下命令
docker network create -d macvlan --subnet=192.168.2.0/24 --gateway=192.168.2.1 -o parent=enp3s0 macnet1
可以在可視化界面見到新建的網絡
建立lan口的網絡,這里我還沒接上線
docker network create -d macvlan -o parent=enp2s0 macnet2
同理也是進入可視化界面驗證一下
創建容器
輸入以下命令
這句命令可以讓現在未接入的LAN口分配地址192.168.1.254
docker run --name openwrt --restart always -d --network macnet2 --privileged -v /lib/modules:/lib/modules raymondwong/openwrt_r9:autobuild-main-x86_64 /sbin/init
輸完這條命令后,可以進入192.168.1.254,默認密碼password
參考鏈接
Docker 部署多網口 openWrt 軟路由 - 「Yang'zun」PlayGround (treesir.pub)
Docker 部署的 openWrt 軟路由, 並解決無法與宿主機通信問題 - 「Yang'zun」PlayGround (treesir.pub)