搜尋此網誌

2026年1月5日 星期一

Raspberry Pi 備用網路

緣起:


    幾個禮拜前,為了搭配 Dlink 的監視器,我再申請了一個中華電信的門號,然後配上 Dlink 的 4G LTE Wifi 分享器來分網際網路


    我家的垃圾有線網路可以蛋調了,還是 PPPoE,下載速度 2M,上傳速度 200 Kb 左右,而且還很不穩。

    啊,這跟我的 Raspberry Pi 有什麼關係呢?我需要先解釋個。


情境:


    我家布局差不多是這樣子,還有幾個小房間沒畫出,但無傷大雅。我平常都待在電腦房敲鍵盤,我大部份的網路設備、電腦都放在那邊




    先說放客廳的 Dlink 4G LTE Wifi 分享器



    它最主要的功用是給監視器提供網路,還有給我跟我姐在家裡連網路用的。Dlink 的監視器,我總共裝了 4 台,用綠色方格代表它們的位置。


    可以看到,在小巷的那台,跟 Wifi 分享器隔比較多牆,而且距離也蠻遠的,雖然不是說完全連不到,但會有斷線的狀況發生,曾斷過兩次。所以我後來有多買了一個 wifi 訊號增強器放在廚房,專門給它用。


ASUS 的

    以上就我家裡的 Wifi,那些 Wifi 設備跟監視器基本上就全年開著,不太會去動它們。接著是我三合院那邊的電腦房。

    我是把另一台 Dlink 4G LTE Wifi 分享器放在置物房那間,靠近天花板,這樣訊號才比較好


    再靠著 Raspberry Pi 跟它連線,然後 Raspberry Pi 的乙太網路孔再接到一台 Switch,分享網路給其它的電腦。
    

    這台 Wifi 分享器使用的是我手機的 SIM 卡,我外出時會把它拔起來,畢竟在外頭需要網路。所以,每當我外出時,我電腦房的設備就會處於斷網的狀態,要等我回家後,重新把 SIM 卡從手機中拔出,再裝回 Wifi 分享器後,設備才會恢復連線。

    重新拔裝 SIM 卡有些小不方便,都需要搬椅子去處理,有時工作完回來很懶,會懶得去做這事,但電腦又需要網路,怎麼辦呢?

    那台 ASUS Wifi 延伸器的訊號,在我電腦房也能收到,所以我就打算讓 Raspberry Pi 連上它,讓它成為置物房那台 Wifi 分享器 SIM 卡被拔起後的備用網路。



Usb Wifi Adapter:


    一開始最直覺想到的是,買個 Usb Wifi 網卡給 Pi 用,但碰上蠻多問題的,在台灣方便買得到的 Usb Wifi 網卡,大部份在 Pi 上都不支援。我在購買前有先問 GPT 個,問他說有什麼牌的 Usb Wifi 網卡是可以給 Pi 隨插即用的,看到它有提到 TP-Link Archer T2U Plus,我當下就趕緊跑去燦昆買了一支回來


    插上 Raspberry Pi 後....,操勒,騙我,根本不是插了就能用。不行,不能讓我的 400 塊就這樣沒了,先試著裝驅動吧,需要用 DKMS。

    安裝必要的套件

sudo apt update
sudo apt install -y dkms git build-essential raspberrypi-kernel-headers

    安裝驅動

git clone https://github.com/aircrack-ng/rtl8812au.git
cd rtl8812au
sudo make dkms_install

    大概這樣 (好像還有做一個步驟,但我想不起來),等它 compile 跟 install,好了之後重開機,然後下

dkms status


    可以看到有驅動了,這時也能透過 UI 來控制 Usb Wifi 網卡連網路。事情到這裡就結束了嗎?NOPE,靠腰,那 Wifi 不時斷線,而且還時常有連不上 2.4 G 網路的情況,氣死我了,最後放棄使用,轉 planB


Plan B:


    Plan B 就是再使用一個 Wifi 延伸器,用它連上那台 ASUS Wifi 延伸器延伸的 Wifi,然後 Raspberry Pi 使用 Usb to Ethernet 轉接器,用網路線連上 Wifi 延伸器,完美,這樣就不用再搞那個北七的 Usb Wifi 驅動了。




自動切換路由:


    ip route 本身沒有自動切換路由的功能,所以要自己個 script 搭配 service 來定時檢查,如果預設網路連線 (wlan0) 有通的話,保持,沒通的話切到備用的網路。

    新增 script

sudo vim /usr/local/bin/auto-route.sh

    內容

#!/bin/bash

PRIMARY_IF="wlan0"
PRIMARY_GW="192.168.1.1"

BACKUP_IF="eth1"
BACKUP_GW="192.168.2.1"

if ping -I $PRIMARY_IF -c 2 8.8.8.8 > /dev/null 2>&1; then
	ip route replace default via $PRIMARY_GW dev $PRIMARY_IF metric 100
else
	ip route replace default via $BACKUP_GW dev $BACKUP_IF metric 100
    

    存好後要下指令 sudo chmod +x /usr/local/bin/auto-route.sh 讓 script 有執行的權限,再來建立 systemd service

sudo vim /etc/systemd/system/auto-route.service

    內容

[Unit]
Description=Auto Route Switcher
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/auto-route.sh
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

    存好後,啟動服務,就 OK 了

sudo systemctl enable auto-route.service
sudo systemctl start auto-route.service

    每 10 秒透過 wlan0 介面 ping 8.8.8.8 的 google dns 主機,看成功與否來切換 ip route default。


沒有留言:

張貼留言