# 樹莓派4-Wifi基地台(RaspberryPi4 Wifi AP)
目的:使用樹莓派將實體乙太網路打造成Wifi AP分享器
作業系統:Raspberry Pi OS (32-bit) March 4th 2021
說明:
由於樹莓派4內建 Wifi 及 1Gbps 的實體網路, 使用者可視需求擇一連網。本文的目的, 在藉由 Wifi 延伸實體網路訊號, 以作為基地台分享給手機/平板或筆電使用。
作法:
進行系統更新
```
sudo apt-get update
sudo apt-get upgrade -y
```
安裝套件
hostapd 為無線 AP 服務, isc-dhcp-server 為 DHCP 服務
```
sudo apt-get install hostapd
sudo apt-get install isc-dhcp-server
```
# 設定IP
實體網路自動取得IP即可, 無線網卡需設固定IP。編輯/etc/dhcpcd.conf
```
sudo nano /etc/dhcpcd.conf
```
在最後面加上
```
interface wlan0
static ip_address=192.168.10.1/24
nohook wpa_supplicant
```
重啟 dhcpcd 服務
```
sudo systemctl restart dhcpcd
```
此時應可看到wifi網卡已設好固定IP
```
#ifconfig
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether dc:a6:32:0d:fe:73 brd ff:ff:ff:ff:ff:ff
inet 192.168.60.222/24 brd 192.168.60.255 scope global dynamic noprefixroute eth0
valid_lft 82961sec preferred_lft 72161sec
inet6 fe80::96a6:d534:f366:e8ae/64 scope link
valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether dc:a6:32:0d:fe:74 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.1/24 brd 192.168.10.255 scope global noprefixroute wlan0
valid_lft forever preferred_lft forever
inet6 fe80::47fa:89d9:fed7:c66c/64 scope link
valid_lft forever preferred_lft forever
```
# 啟用基地台功能
接下來設定WiFi基地台(/etc/hostapd/hostapd.conf)
```
sudo nano /etc/hostapd/hostapd.conf
```
加上以下內容
```
country_code=TW
interface=wlan0
driver=nl80211
ssid=Rpi-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=abcdefg123
rsn_pairwise=CCMP
```
大致上都可以照抄, 其中 ssid 為基地台名稱, wpa_passphrase 為連線密碼, country_code 為 wifi 國碼。
設定完成後,還需要告訴樹莓派開機要去哪裡讀取我們的設定。
```
sudo nano /etc/default/hostapd
```
加上
```
DAEMON_CONF="/etc/hostapd/hostapd.conf"
```
到這邊WiFi基地台已經設定好了, 解除封鎖並設為自動啟動
```
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
```
接下來, 連上的無線設備必需派發IP給它, 所以要設定 DHCP 服務, 本文這裡介紹的是 isc-dhcp-server。
# 設定DHCP SERVER 派送IP
編輯 /etc/dhcp/dhcpd.conf 設定檔
```
sudo nano /etc/dhcp/dhcpd.conf
```
在最後面加上
```
authoritative;
log-facility local7;
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.10 192.168.10.50;
option broadcast-address 192.168.10.255;
option routers 192.168.10.1;
default-lease-time 600;
max-lease-time 7200;
option domain-name "Rpi-ap";
option domain-name-servers 8.8.8.8, 168.95.1.1;
}
```
編輯 /etc/default/isc-dhcp-server, 將 INTERFACESv4 改為 wlan0, 表示要發放的 IP 需透過 wlan0(無線)介面連線。
```
INTERFACESv4="wlan0"
```
# 設定分享器封包轉送(NAT)功能
編輯 /etc/sysctl.conf
```
sudo nano /etc/sysctl.conf
```
在最後面加上
```
net.ipv4.ip_forward=1
```
設定 NAT
```
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
```
查看 iptables 的設定
```
sudo iptables -t nat -S
```
接著要讓 NAT 的設定可以在每次開機都自動設定,我們將 iptables 的設定儲存在 /etc/iptables.ipv4.nat 中
```
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
```
開機自動執行
連接內部wifi網路(wlan0)和外部網路(eth0)的橋接器(樹莓派)