把樹莓派變身無線AP
把樹莓派變身無線AP
環境要求:
- Raspberry Pi 4B(4GB版)
- TF卡(最小16GB)
- 乙太網線一根
- PC機一臺(本例以Mac為例)
本文在2020-11-23做了更新,針對iptables的錯誤給出瞭解決方案
1 系統安裝
1.1 下載系統映象(32bit)
截止到目前(2020-11-20),清華大學開源軟體映象站的樹莓派系統映象最新的版本是 2020-08-20 的,選擇 2020-08-20-raspios-buster-armhf-lite.zip 檔案,將其下載到本地。
1.2 下載 Raspberry Pi Image
這個工具是Raspberry官方提供的傻瓜式將Raspberry Pi OS燒寫到TF卡的軟體,從
1.3 燒寫映象檔案到TF卡
一般選擇16GB的TF卡就夠用了,首先開啟 Raspberry Pi Image 軟體,啟動後介面如下:
點選Operating System下面的 CHOOSE OS 按鈕,選擇 “Erase”
然後把TF卡插在讀卡器上,將讀卡器插入PC機的USB3.0介面,點選 SD Card 下面的 CHOOSE SD CARD 按鈕,選擇剛才插入的TF卡。
接著,點選“WRITE”按鈕,開始對TF卡進行擦除和格式化,等操作完成。
格式化完成後,還是在這個介面中選擇“Use custom”。
並在彈出的對話方塊中找到自己之前下載的映象檔案,然後選擇SD卡為剛才格式化好的TF卡,最後點選“WRITE”,等待映象燒寫完成。
燒寫完成後,會出現一個名叫“boot”的磁碟系統,這裡我們的系統映象就燒寫好了。
2 配置樹莓派
2.1 開啟SSH
用VS Code開啟“boot”,在根目錄系建立一個名為“ssh”的檔案,注意,這個檔案的名字就是“ssh”,全小寫,沒有副檔名,沒有內容。建立好了,直接關閉就行。這樣就可以通過ssh遠端連線樹莓派了。
2.2 使用SSH方式連線到樹莓派
首先給樹莓派插上乙太網的網線,然後通電開機。
稍微等待一會兒,一般家庭用的無線路由器都有自帶的管理軟體,我用的是小米WiFi。通過小米WiFi的APP可以檢視到連線的裝置資訊,找到那個叫“raspberrypi”的裝置,點選檢視聯網資訊,可以獲取的樹莓派在家庭區域網中的ip地址,我這裡是192.168.31.187,記住這個地址,接下來就可以通過終端使用ssh訪問樹莓派了。
啟動終端,輸入命令
~ $ ssh [email protected]
第一次訪問的時候,PC機會要求記錄這個遠端裝置訪問的許可權。所以請輸入“yes”後回車,之後會讓我們輸入樹莓派的賬戶“pi”的登入密碼,預設密碼是“raspberry”,輸入正確後,回車會看到這個歡迎頁面,並看到終端的顯示已經變成“pi@raspberrypi:”的主機資訊了,這表明我們成功通過ssh進入到了樹莓派的系統中。
2.3 給樹莓派換國內源
這個必須做,不然後面會瘋掉。
sudo nano /etc/apt/sources.list
把檔案中的內容註釋掉,新增以下內容
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib
然後 control-o 回車儲存,control-x關閉。
同樣,將 /etc/apt/sources.list.d/raspi.list
檔案中的內容也替換掉。
sudo nano /etc/apt/sources.list
替換內容為:
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
然後 control-o 回車儲存,control-x關閉
2.4 更新
在終端裡執行更新軟體命令先。
sudo apt-get update
sudo apt-get dist-upgrade
2.5 配置
在終端裡執行
sudo raspi-config
會啟動下圖的配置介面,通過鍵盤上的上下方向鍵,選擇 5 Localisation Options
,回車。
進入配置的二級介面後,選擇 L1 Locale
,回車。
這時,樹莓派會先回到終端環境一下,然後很快就會進入下圖這個介面。
首先在這個介面上通過鍵盤方向鍵或者滑鼠滾動那個 Locales to be generated:
區域,直到找到 zh_CN.UTF-8 UTF-8
,然後按 空格鍵
進行選中,選中效果是會出現一個 “*” 號。完成選擇請回車。
這時會出現下圖的“設定系統的預設本地環境”的介面,這裡我選擇的是 en_US.UTF-8
然後在這個介面上,按動鍵盤的“右箭頭”按鍵,選中 <OK>
,回車,樹莓派會回到終端裡,介面中會出現幾行配置過程資訊,不用管,直接等待它配置完成即可,然後就會回到一開始的配置介面了。
連續按兩下“右箭頭”按鍵,選中<Finish>
,回車。
如果是第一次配置,應該會讓你重啟,直接按照提示指引重啟就行了。
等待差不多1分鐘吧,再使用ssh方式登入到樹莓派上即可。
3 安裝 RaspAP (手動方式)
3.1 原理介紹
首先借用 RaspberryPi 官網上“配置無線接入點”頁面的一張圖 ,來說明一下我們的樹莓派作為無線AP,到底在網路中是什麼角色。
圖中的 RPi
和 PC#1
、 PC#2
共同連線在家庭區域網環境中,它們的IP地址範圍都是“10.10.0.X”的,這個地址範圍是由圖中的 Router
來負責分配的,它們都在由 “Router” 建立的區域網環境中,相互之間是可以通訊的。
配置成無線AP的RPi
還有另外一個地址,就是“192.168.4.1”,而圖片中最右側的 Laptop
地址是“192.168.4.2”,也就是說這個“Laptop”是在由“RPi”建立的區域網絡環境中,它只能跟“RPi”通訊。這樣,如果“RPi”能訪問外網的話,“Laptop”就藉助“RPi”也能訪問外網了;如果“RPi”沒有連線外網的網線,不能上網,那“Laptop”也不能上外網,但是它和“RPi”之間還是可以進行區域網通訊的。
3.2 RaspAP介紹
RaspAP 是一個執行在樹莓派上,可以將樹莓派作為無線AP的圖形化管理工具。當我們在樹莓派上安裝了 RaspAP 之後,就可以輕鬆地通過網頁的方式來配置無線AP的功能了。
RaspAP 的官網上給出了一個 “Quick Installer”,其實就是在樹莓派終端執行下面的一條命令
curl -sL https://install.raspap.com | bash
當這條命令自己執行完之後,我們的樹莓派就具有了上圖所列出的一些無線訪問配置資訊。
很遺憾的是,這條命令因為網路的原因在這裡用不了,所以我們需要使用“手動”的方式來安裝和配置。
3.3 RaspAP 手動安裝步驟
手動安裝的指引我參考了 Manual installation 頁面中的步驟,並稍微做了一些調整。下面列出我的安裝步驟。
Step1:安裝必備的依賴
sudo apt-get install lighttpd git hostapd dnsmasq iptables-persistent vnstat qrencode php7.3-cgi
Step2:開啟lighttpd服務
sudo lighttpd-enable-mod fastcgi-php
會看到如下輸出:
Met dependency: fastcgi
Enabling fastcgi-php: ok
Enabling fastcgi: ok
Run "service lighttpd force-reload" to enable changes
繼續執行指令:
sudo service lighttpd force-reload
sudo systemctl restart lighttpd.service
Step3:克隆raspap-webgui原始碼
這個原始碼倉庫在GitHub,由於網路的原因,下載速度很慢,我已經把這個倉庫匯入到了碼雲上,所以克隆地址會跟官網文件的命令不一樣。
pi@raspberrypi:~ $ sudo rm -rf /var/www/html
pi@raspberrypi:~ $ sudo git clone https://gitee.com/ursaminor68/raspap-webgui.git /var/www/html
這時會出現以下輸出:
Cloning into '/var/www/html'...
remote: Enumerating objects: 19377, done.
remote: Counting objects: 100% (19377/19377), done.
remote: Compressing objects: 100% (10829/10829), done.
remote: Total 19377 (delta 7163), reused 19377 (delta 7163), pack-reused 0
Receiving objects: 100% (19377/19377), 20.96 MiB | 2.46 MiB/s, done.
Resolving deltas: 100% (7163/7163), done.
看到這些資訊,就表明克隆完成了。
Step4:一大波指令
以下的指令都是從 RaspAP 的手動安裝指引介面中搬移過來的,直接老老實實把下面的所有指令都執行完就行了。
給“www-dtata”使用者新增sudo的許可權
cd /var/www/html
sudo cp installers/raspap.sudoers /etc/sudoers.d/090_raspap
建立一堆 RaspAP 的配置目錄,新增 /etc/dhcpcd.conf
檔案作為基礎配置檔案。
sudo mkdir /etc/raspap/
sudo mkdir /etc/raspap/backups
sudo mkdir /etc/raspap/networking
sudo mkdir /etc/raspap/hostapd
sudo mkdir /etc/raspap/lighttpd
cat /etc/dhcpcd.conf | sudo tee -a /etc/raspap/networking/defaults > /dev/null
更改一些檔案和目錄的使用者組以及許可權的命令,敲就是了。
sudo cp raspap.php /etc/raspap
sudo chown -R www-data:www-data /var/www/html
sudo chown -R www-data:www-data /etc/raspap
sudo mv installers/*log.sh /etc/raspap/hostapd
sudo mv installers/service*.sh /etc/raspap/hostapd
sudo chown -c root:www-data /etc/raspap/hostapd/*.sh
執行到這裡會看到以下輸出:
changed ownership of '/etc/raspap/hostapd/disablelog.sh' from www-data:www-data to root:www-data
changed ownership of '/etc/raspap/hostapd/enablelog.sh' from www-data:www-data to root:www-data
changed ownership of '/etc/raspap/hostapd/servicestart.sh' from www-data:www-data to root:www-data
繼續執行指令:
sudo chmod 750 /etc/raspap/hostapd/*.sh
sudo cp installers/configport.sh /etc/raspap/lighttpd
sudo chown -c root:www-data /etc/raspap/lighttpd/*.sh
執行到這裡會看到輸出:
changed ownership of '/etc/raspap/lighttpd/configport.sh' from root:root to root:www-data
繼續執行指令:
sudo mv installers/raspapd.service /lib/systemd/system
sudo systemctl daemon-reload
sudo systemctl enable raspapd.service
執行到這裡會看到輸出:
Created symlink /etc/systemd/system/multi-user.target.wants/raspapd.service → /lib/systemd/system/raspapd.service.
繼續執行指令:
sudo mv /etc/default/hostapd ~/default_hostapd.old
sudo cp /etc/hostapd/hostapd.conf ~/hostapd.conf.old
sudo cp config/default_hostapd /etc/default/hostapd
sudo cp config/hostapd.conf /etc/hostapd/hostapd.conf
sudo cp config/dnsmasq.conf /etc/dnsmasq.d/090_raspap.conf
sudo cp config/dhcpcd.conf /etc/dhcpcd.conf
sudo cp config/config.php /var/www/html/includes/
指令太多,怕看序列:)
sudo systemctl stop systemd-networkd
sudo systemctl disable systemd-networkd
sudo cp config/raspap-bridge-br0.netdev /etc/systemd/network/raspap-bridge-br0.netdev
sudo cp config/raspap-br0-member-eth0.network /etc/systemd/network/raspap-br0-member-eth0.network
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/90_raspap.conf > /dev/null
sudo sysctl -p /etc/sysctl.d/90_raspap.conf
sudo /etc/init.d/procps restart
看到以下輸出:
[ ok ] Restarting procps (via systemctl): procps.service.
繼續執行指令:
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
如果執行完後看到如下的錯誤提示:
iptables/1.8.2 Failed to initialize nft: Protocol not supported
請先執行
sudo reboot
把樹莓派重啟,這時你的終端會退出ssh連線,等待1分鐘左右,再次執行ssh登入
ssh [email protected]
然後重新執行
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
發現沒有出錯了,就可以繼續執行下面的指令了
sudo iptables -t nat -A POSTROUTING -s 192.168.50.0/24 ! -d 192.168.50.0/24 -j MASQUERADE
sudo iptables-save | sudo tee /etc/iptables/rules.v4
看到以下輸出:
# Generated by xtables-save v1.8.2 on Sat Nov 21 22:43:02 2020
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Sat Nov 21 22:43:02 2020
# Generated by xtables-save v1.8.2 on Sat Nov 21 22:43:02 2020
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -j MASQUERADE
-A POSTROUTING -s 192.168.50.0/24 ! -d 192.168.50.0/24 -j MASQUERADE
COMMIT
# Completed on Sat Nov 21 22:43:02 2020
然後,繼續執行指令:
sudo systemctl unmask hostapd.service
sudo systemctl enable hostapd.service
看到以下輸出:
Synchronizing state of hostapd.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable hostapd
然後執行
sudo reboot
系統重啟。等待1~2分鐘。你應該能夠看到你的無線網路連線訊號中多了一個“raspi-webgui”
安裝RaspAP成功~~!
4 RaspAP WebGUI
用PC機在無線訊號中找到 “raspi-webgui” 後,點選連線,輸入初始密碼 “ChangeMe” 之後,就可以在PC機的瀏覽器中輸入地址:http://10.3.14.1
,使用者名稱為 admin
,密碼是 secret
,進入如下畫面
因為我們之前配置了本地語言環境為“zh_CN”,所以看到的是中文介面,很親切吧。
如果你不喜歡“raspi-webgui”這個名字,可以按照下圖的指引修改。
這樣自己容易記,而且也不會跟其他同樣也是用樹莓派做成的無線AP名稱衝突。
其他的配置選項除了修改密碼以外,基本上都不用改,除非你十分清楚自己要改什麼,否則最好不要隨意改動。
5 用ssh登入樹莓派無線AP
如果你的PC機連線了樹莓派的無線AP網路,那麼以後ssh可以通過 10.3.141.1
這個地址來登入樹莓派操作。【強調,即便這時樹莓派沒有連線網線,它的無線AP也可用的】
當你用你的樹莓派做智慧小車的驅動板時,如果你需要通過電腦控制樹莓派,那麼只需要讓你的電腦連線樹莓派的無線AP訊號,然後再選擇ssh方式登入樹莓派,進入樹莓派的終端介面進行程式碼操控即可。