使用 Raspberry Pi 架設自己的 AP

工作上會使用樹梅派在一個獨立區網內作為主機,在行動裝置透過 WiFi 連線到同個區網內後,進一步提供行動裝置所需的服務。不過為了達成這個目的都還要而外配一台 AP,最近同事突然突發奇想把樹梅派同時當作主機及 AP,這樣以後就可以不用再多配一台 AP,以下將同事提供的方法與我自行搜尋到的方式做一個整理記錄下來。

手動設定

如果喜歡快速簡便又有 UI 設定畫面的,請直接往下看套件設定。
請先將樹梅派連接實體乙太網路,不要透過 WiFi 連接網路。

套件更新

將目前已經安裝的套件都先更新到最新。

sudo apt update

sudo apt upgrade

安裝相關套件

sudo apt install hostapd dnsmasq -y

停用無線網卡 DHCP

由於樹莓派預設會把所有網路介面都設為 DHCP,為了我們後續設定要把無線網卡停用 DHCP 並設定為固定 IP,使用下方指令來編輯 DHCP 的設定。

sudo nano /etc/dhcpcd.conf

使用後會開啟 /etc/dhcpcd.conf 檔案,移到最下面並加入以下內容。
樹莓派預設無線網卡是掛在 wlan0,如果有外加請記得修改。
後續範例會使用 192.168.7.0/24 的網段,這是樹莓派架設成 AP 後所提供的區網的網段,可以自行定義想要的網段。
輸入完成後,按下 Ctrl + X,再按下 Y,最後按下 Enter 即可存檔離開。

interface wlan0
static ip_address=192.168.7.1/24
static routers=192.168.7.1
static domain_name_servers=8.8.8.8

設定 WiFi 訊息

接下來要編輯我們以後 AP 所提供的 WiFi 的訊息,使用下方指令來進行編輯。

sudo nano /etc/hostapd/hostapd.conf

使用上方指令後,會開啟一個空白檔案,直接輸入下方的內容。
interface 如果有外加網卡請記得修改。
ssid 是 WiFi 的名稱,可自行修改。
wpa_passphrase 是 WiFi 的密碼,可自行修改。
輸入完成後,按下 Ctrl + X,再按下 Y,最後按下 Enter 即可存檔離開。

interface=wlan0
driver=nl80211
ssid=rp-ap
hw_mode=g
channel=7
ieee80211n=1
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=password
rsn_pairwise=CCMP

設定完成後,還需要告訴樹莓派開機要去哪裡讀取我們的設定,所以要使用以下指令進行設定。

sudo nano /etc/default/hostapd

使用上方指令後會開啟 /etc/default/hostapd 檔案,此時找到 #DAEMON_CONF="" 將改行修改成以下內容。
修改完成後,按下 Ctrl + X,再按下 Y,最後按下 Enter 即可存檔離開。

DAEMON_CONF="/etc/hostapd/hostapd.conf"

設定 WiFi DHCP 訊息

接著使用下方指令來設定我們 AP 的 DHCP 訊息。

sudo nano /etc/dnsmasq.conf

使用上方指令後會開啟 /etc/dnsmasq.conf 檔案,其內容相當多,直接移動到最下面,空一行後輸入以下內容。
interface 一樣如果有外加網卡記得修改。
dhcp-range 是設定往後透過 AP 連線進來的設備可使用的 IP 範圍,記得跟之前設定為相同網段,另外不要包含有前面設定的固定 IP,因為那是我們 AP 本身的 IP,最後面有個 24h 是代表這個 IP 可以使用多久,多久後需要重新取得。
輸入完成後,按下 Ctrl + X,再按下 Y,最後按下 Enter 即可存檔離開。

interface=wlan0
domain-needed
bogus-priv
dhcp-range=192.168.7.2,192.168.7.253,24h

設定 IP 轉發

只完成上面步驟的話,我們的 AP 只能夠進行區網連線,無法透過樹莓派連線到網際網路,所以要使用下列指令進行設定。

sudo nano /etc/sysctl.conf

使用上述指令後,會開啟 /etc/sysctl.conf 檔案,請將 #net.ipv4.ip_forward=1 替換為下方內容。
替換完成後,按下 Ctrl + X,再按下 Y,最後按下 Enter 即可存檔離開。

net.ipv4.ip_forward=1

接著依序輸入下列指令,完成 IP 轉發。
一樣如果有外加無線網卡記得修改 wlan0。
若是還有外加有線網卡記得修改 eth0。

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT

sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

輸入完上方指令後,我們要儲存起來並讓樹莓派在每次開機自動執行,所以請依序輸入下列指令。

sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

sudo nano /etc/rc.local

依序輸入完上方指令後,會開啟 /etc/rc.local 檔案,往下找到 exit 0,並在該行的上方輸入下列內容。
輸入完成後,按下 Ctrl + X,再按下 Y,最後按下 Enter 即可存檔離開。

sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
iptables-restore < /etc/iptables.ipv4.nat

大功告成

完成上面所有設定後,請輸入下列指令重新開機,即可使用樹莓派當 AP。

sudo reboot

參考資料


套件設定

上面手動設定比較繁瑣,這邊使用 RaspAP 這個套件快速幫我們架設一個 AP,它不但架設方法簡單快速,同時還有 UI 介面可以進行設定調整,在使用操作上簡便不少。

套件安裝

使用下列指令下載套件並進行安裝。

wget -q https://git.io/voEUQ -O /tmp/raspap && bash /tmp/raspap

過程中會詢問一些設定事項,依照個人需求選擇,之後重開機即可完成。
完成後的預設 AP 資訊如下:

  • 樹莓派無線網卡 IP (管理介面網址):10.3.141.1
    • 使用者名稱:admin
    • 使用者密碼:secret
  • DHCP 範圍:10.3.141.50 到 10.3.141.255
  • WiFi 名稱 (SSID):raspi-webgui
  • WiFi 密碼:ChangeMe

如果有要更改無線網卡 IP 及 DHCP 範圍,記得更改後要儲存再重新啟動樹莓派,詳細設定畫面等有空的話再補上了。

參考資料