电竞比分网-中国电竞赛事及体育赛事平台

分享

【新提醒】利用Docker給自己定制旁路由(一)安裝immortalWrt

 laq6 2024-04-21 發(fā)布于福建
 本帖最后由 tyxu 于 2024-3-24 17:35 編輯

本人老白,又老又白,喜歡折騰。目前半退休狀態(tài),終于有時(shí)間折騰啦,和大家分享一下我的近期折騰結(jié)果。如果大佬們覺(jué)得本文幼稚,請(qǐng)勿噴,不要打擊老同志那顆愛(ài)折騰的心。同時(shí),熱烈歡迎大家指正交流。
本文極度適合群暉用戶,適合各種已經(jīng)完成docker搭建的用戶。當(dāng)然,如果您有設(shè)備可以運(yùn)行虛擬機(jī),或者直接安裝Openwrt,本文大部分步驟可以借鑒。
根據(jù)我自己的使用情況,計(jì)劃包含以下幾個(gè)部分:安裝immortalWrt、安裝配置science小貓咪、DDNS如何在FakeIP下工作、利用*V*P*N*回家學(xué)習(xí)science文化知識(shí)。

選擇openwrt的原因就不多說(shuō)了,主要是比較小巧,可用的插件多,適合小規(guī)模折騰。您要是非得覺(jué)得裝個(gè)ubuntu更好,也別噴我,畢竟適合自己的才是最好。

docker hub上基于openwrt的旁路由集成鏡像很多,多數(shù)都是集成了各種插件的18.06版本,而且試用過(guò)程發(fā)現(xiàn)這些鏡像動(dòng)輒幾百兆,很多插件還用不上,畢竟18.06有點(diǎn)老,有些插件更新還會(huì)出現(xiàn)內(nèi)核兼容問(wèn)題。

那么有沒(méi)有辦法使用新一些的openwrt版本,并且只安裝自己需要的插件呢?必須有!
經(jīng)過(guò)一些嘗試,最后決定使用immortalWrt的 21.02.7版本搭建一個(gè)自己定制的環(huán)境,這個(gè)版本應(yīng)該是上一個(gè)穩(wěn)定的版本,只有大約25M。沒(méi)敢用最新的23.05.x,還是感覺(jué)有點(diǎn)不踏實(shí)。
關(guān)于immortalWrt,是openwrt的一個(gè)分支,具體情況可以百度
好啦,開(kāi)始正題:

準(zhǔn)備工作。。。。
我使用的是群暉DS418play,型號(hào)比較老并被定義為家用系列,在DSM7.x下是無(wú)法安裝docker的。
首先,無(wú)“open vswitch”選項(xiàng),需要更改配置文件,共要改兩個(gè)文件,,,如何修改和打開(kāi),請(qǐng)自行百度



其次,DS418play 無(wú) Docker 套件,建議去官網(wǎng)下載DS218+的,注意DSM版本,我用的是DSM7.1系列,畢竟都是同一CPU,其它配置也差不多,,,
https://nologydownload. ... &build_number=42962

Docker-x64-20.10.3-1308_DS218plus.spk


如果您用的不是這種蹩腳的群暉,上面可以跳過(guò)。

打開(kāi)“open vswitch”后,群暉會(huì)在原有兩個(gè)物理網(wǎng)卡(eth0,eth1)的基礎(chǔ)上,增加兩個(gè)虛擬網(wǎng)卡(ovs_eth0,ovs_eht1),用于連接vswitch虛擬交換機(jī)。
使用ifconfig命令會(huì)發(fā)現(xiàn),開(kāi)啟vswitch后,聯(lián)機(jī)網(wǎng)卡已經(jīng)自動(dòng)切換成了ovs_eth0或ovs_eth1。


現(xiàn)在,使用下載好的群暉DS218docker套件,安裝吧!安裝好docker后,基礎(chǔ)準(zhǔn)備完成。
如果您不是群暉用戶,上面的全可以跳過(guò),選擇適合您設(shè)備的應(yīng)用,裝好docker就行啦!

為docker配置環(huán)境。。。
1、開(kāi)啟網(wǎng)卡混雜模式(混雜模式-物理網(wǎng)卡可以被虛擬多個(gè)MAC地址)
切換root權(quán)限,否則沒(méi)有權(quán)限
  1. sudo -i
復(fù)制代碼
eth0是我群暉已經(jīng)聯(lián)機(jī)的物理卡。ovs_eth0是“open vswitch”后,eth0虛擬出來(lái)連接虛擬交換機(jī)的網(wǎng)卡,根據(jù)個(gè)人實(shí)際修改。
  1. ip link set eth0 promisc on
  2. ip link set ovs_eth0 promisc on
復(fù)制代碼
設(shè)置網(wǎng)卡混雜模式,我不知道設(shè)置哪個(gè),至少ovs_eth0需要設(shè)置,索性都設(shè)置了。

2、創(chuàng)建虛擬vlan
其中192.168.10.0/24是我的內(nèi)網(wǎng)地址,192.168.10.1是我的主路由器地址,ip-range 是使用的地址范圍,以上根據(jù)個(gè)人實(shí)際修改。macnet是新建的macvlan名,可以隨意取,后面會(huì)用到。
  1. docker network create -d macvlan --subnet=192.168.10.0/24 --ip-range 192.168.10.16/28 --gateway=192.168.10.1 -o parent=ovs_eth0 macnet
復(fù)制代碼

3、準(zhǔn)備鏡像
Openwrt的鏡像選擇還是比較多的,在Docker hub以此為關(guān)鍵字可以檢索出很多,根據(jù)自己需要選用就可以,有實(shí)力的同學(xué)還可以制作自己的鏡像。
但上面說(shuō)過(guò),這些自帶插件的鏡像個(gè)頭都比較大,OP版本基本基于18.06有點(diǎn)老,插件更新也經(jīng)常有問(wèn)題(內(nèi)核不兼容)
如果您執(zhí)意選擇這些大佬們精心定制的版本,我推薦:

piaoyizy/openwrt-x86,一個(gè)兄弟根據(jù)Lean大神制作的鏡像,功能上根據(jù)旁路網(wǎng)關(guān)用途做了簡(jiǎn)化,只包括了“師夷長(zhǎng)技以制夷” plus,“師夷長(zhǎng)技以制夷”和Clash三個(gè)關(guān)鍵插件,以及一些基礎(chǔ)插件。至少2023年底還在更新。
sulinggg/openwrt:x86_64,這個(gè)很著名啦,但最后版本應(yīng)該是幾年前編譯的,已經(jīng)停更。

我最后還是選擇了immortalWrt21.02.7 自己定制。在docker注冊(cè)表搜索“immortalwrt/rootfs”,選擇“x86-64-openwrt-21.02.7”并拖取鏡像。里面鏡像很多,如果您的設(shè)備不是x86,可以選擇您合適的架構(gòu)下載。


如果你的群暉無(wú)法訪問(wèn)注冊(cè)表,可以嘗試用 docker pull 命令試試,但成功機(jī)會(huì)依然不大。
我最初也沒(méi)辦法訪問(wèn)注冊(cè)表。為了解決這個(gè)問(wèn)題,用了個(gè)笨辦法。在臺(tái)式機(jī)上也安裝了docker for win,畢竟臺(tái)式機(jī)出門就方便多了。用臺(tái)式機(jī)的docker獲取鏡像,然后使用shell執(zhí)行:
注意!是windows的那個(gè)DOS界面,提示符長(zhǎng)這個(gè)樣子的! PS C:\Users\Administrator>
  1. docker save -o c:\immortalwrt_21.02.7.tar immortalwrt/rootfs:x86-64-openwrt-21.02.7
復(fù)制代碼
這樣就在C:盤根目錄獲得了鏡像文件immortalwrt_21.02.7.tar,把文件上傳到群暉,導(dǎo)入群暉docker就可以啦。

4、創(chuàng)建并運(yùn)行容器
回到ssh,登入群暉,提升權(quán)限
  1. sudo -i
復(fù)制代碼

運(yùn)行命令創(chuàng)建容器
  1. docker run -d \
  2.     --restart always \
  3.     --name immortalwrt_21.02.7 \
  4.     --privileged \
  5.     --network macnet \
  6.     --ip=192.168.10.19 \
  7.    immortalwrt/rootfs:x86-64-openwrt-21.02.7 \
  8.     /sbin/init
復(fù)制代碼
說(shuō)明:“\”是連接符號(hào),用于聲明命令行沒(méi)有結(jié)束接下一行。
            -d  參數(shù)是讓容器在后臺(tái)運(yùn)行。
            --restart always  為了避免容器意外掛掉,或者被誤殺,設(shè)置了意外退出自動(dòng)重啟。
            --name  給容器定義個(gè)名字,可以自由定義。
            --privileged  獲取宿主機(jī)root權(quán)限(或特殊權(quán)限)。
            --network macnet  指定網(wǎng)絡(luò)為macnet,就是我們上面創(chuàng)建的那個(gè)vlan。

            --ip=192.168.10.19  指定默認(rèn)地址。
            immortalwrt/rootfs:x86-64-openwrt-21.02.7  鏡像的名稱。
             /sbin/init  表示載入容器后內(nèi)核啟動(dòng)時(shí)主動(dòng)呼叫的第一個(gè)進(jìn)程,docker中必須要保持一個(gè)進(jìn)程的運(yùn)行,要不然整個(gè)容器啟動(dòng)后就會(huì)馬上自己kill自己。
最后回車運(yùn)行一下吧!

這樣的結(jié)果,就是容器已經(jīng)成功創(chuàng)建??梢?br>
  1. docker ps
復(fù)制代碼
看一下,是不是已經(jīng)成功創(chuàng)建并運(yùn)行。記住那一大串字符(CONTAINER ID)的前四位,一會(huì)兒要用到。


5、更改容器網(wǎng)絡(luò)參數(shù)
使用SSH工具,進(jìn)入容器,2e5b就是我們上面創(chuàng)建的容器ID縮寫

  1. docker exec -it 2e5b /bin/ash
復(fù)制代碼
進(jìn)入容器后,執(zhí)行下面命令,編輯網(wǎng)絡(luò)配置文件
  1. vi /etc/config/network
復(fù)制代碼


我是編輯成了這個(gè)樣子,可以參考:


  1. config interface 'loopback'
  2.     option ifname 'lo'
  3.     option proto 'static'
  4.     option ipaddr '127.0.0.1'
  5.     option netmask '255.0.0.0'

  6. config interface 'lan'
  7.         option type 'bridge'
  8.         option ifname 'eth0'
  9.         option proto 'static'
  10.         option ipaddr '192.168.10.19'
  11.         option netmask '255.255.255.0'
  12.         option gateway '192.168.10.1'
  13.         option dns '114.114.114.114 8.8.8.8'

  14. config interface 'wan'
  15.     option proto 'static'
  16.     option ipaddr '10.10.10.254'
  17.     option netmask '255.255.255.0'

  18. config interface 'wan6'
  19.     option ifname 'eth0'
  20.     option proto 'dhcp6'
復(fù)制代碼
編輯完成后,按esc,輸入":wq",保存退出,執(zhí)行下面的命令,重啟一下容器的網(wǎng)絡(luò)
  1. /etc/init.d/network restart
復(fù)制代碼

好啦,在瀏覽器輸入 192.168.10.19 就可以看到 immortalwrt_21.02.7的登錄界面啦,用戶名root,密碼root

還沒(méi)寫完,按錯(cuò)發(fā)布了。晚上補(bǔ)齊吧,第一次發(fā)帖,抱歉啦



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多