這裡介紹如何使用樹莓派架設一個無線網路 AP,讓各種無線網路設備透過樹莓派上網。
樹莓派在插上一張 USB 無線網路卡之後,可以透過無線網路上網,而除了讓樹莓派上網之外,我們也可以使用同樣一張 USB 無線網路卡將樹莓派打造成無線網路基地台(AP,Access Point),當作 IP 分享器使用。
以下是用樹莓派打造無線 IP 分享器所需要準備的設備:
- 樹莓派開發板一張。
- 支援 AP 模式的 USB 無線網路卡一張,本文使用 TP-LINK TL-WN722N USB 無線網路卡作為示範。
以下是整個安裝與設定過程。
基本 Linux 系統
將樹莓派安裝好基本的 Linux 系統,若是新手建議使用 NOOBS 安裝。
安裝好 Linux 系統之後,將 USB 無線網路卡插上樹莓派。
網路設定
這裡我規劃使用樹莓派的有線以太網路(eth0
)對外,而 USB 無線網路卡(wlan0
)則對內,在開始設定之前請先確認自己的樹莓派基本環境是可以正常上網的(也就是 eth0
要先設定好),接著再調整無線網路卡的網路設定。
首先關閉無線網路卡 wlan0
:
sudo ifdown wlan0
編輯 /etc/network/interfaces
設定檔:
auto eth0 iface eth0 inet static address 192.168.0.200 network 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 dns-nameservers 192.168.0.1 168.95.192.1 168.95.1.1 auto wlan0 iface wlan0 inet static address 192.168.2.1 netmask 255.255.255.0
這裡需要更改的是 wlan0
的部份,要選定一個新的虛擬網段,並且指定一個固定的 IP 位址。
而 eth0
的部份就要看自己的環境是怎麼設定,我這裡的 eth0
是設定為靜態的固定 IP 位址,使用 DHCP 動態取得應該也是可以。
啟用無線網路卡 wlan0
:
sudo ifup wlan0
DHCP 伺服器
樹莓派對內的區域網路(wlan0
)中需要一台 DHCP 伺服器來配發上網設備的 IP 位址,這樣才能上內部的設備自動取的 IP 上網。
在樹莓派上安裝 DHCP 伺服器:
sudo apt-get install isc-dhcp-server
編輯 /etc/dhcp/dhcpd.conf
設定檔,將 domain name 的全域設定拿掉:
# option definitions common to all supported networks... # option domain-name "example.org"; # option domain-name-servers ns1.example.org, ns2.example.org;
設定這個 DHCP 伺服器為官方(authoritative)伺服器:
# If this DHCP server is the official DHCP server for the local # network, the authoritative directive should be uncommented. authoritative;
設定要給 DHCP 伺服器配發的 IP 網段,這裡的網段要跟上面無線網路卡的網段相同:
subnet 192.168.2.0 netmask 255.255.255.0 { range 192.168.2.10 192.168.2.50; option broadcast-address 192.168.2.255; option routers 192.168.2.1; default-lease-time 600; max-lease-time 7200; option domain-name "local"; option domain-name-servers 168.95.192.1, 168.95.1.1; }
編輯 /etc/default/isc-dhcp-server
設定檔,設定 INTERFACES
:
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests? # Separate multiple interfaces with spaces, e.g. "eth0 eth1". INTERFACES="wlan0"
設定好之後,重新啟動 DHCP 伺服器:
service isc-dhcp-server restart
並檢查是否有錯誤訊息。
Packet Forwarding
封包轉送(packet forwarding)的作用在於將內部 wlan0
區域網路的封包轉送至 eth0
,讓內部的設備可以連線至外部網路。
編輯 /etc/sysctl.conf
設定檔,設定 packet forwarding:
# Uncomment the next line to enable packet forwarding for IPv4 net.ipv4.ip_forward=1
若要讓 packet forwarding 馬上生效,可以執行:
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
設定 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 sudo iptables -S
接著要讓 NAT 的設定可以在每次開機都自動設定,我們將 iptables
的設定儲存在 /etc/iptables.ipv4.nat
中:
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
編輯 /etc/network/interfaces
,加入:
up iptables-restore < /etc/iptables.ipv4.nat
這樣在網路啟動時就會自動設定 NAT。
繼續閱讀: 12
EricZhang
請問一下 我在
service isc-dhcp-server restart
出現failed to restart isc-dhcp-server.service:access denied
的錯誤 請問是什麼意思?
G. T. Wang
有用 root 權限執行嗎?
EricZhang
不好意思 該怎麼設定root權限 因為我是照這篇教學 練習設定
EricZhang
我有找到資料 使用sudo passwd root 去設定
但是當我使用sudo passwd -u root 時出現
passwd password expiry information changed
EricZhang
我剛剛重新跑一次教學 發現到
# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. “eth0 eth1”.
INTERFACES=”wlan0″
這個設定 您的有#on……這類的註解
但我的是空白頁面 只有我自己輸入的INTERFACES=”wlan0″
是不是我的/etc/default/isc-dhcp-server設定檔有問題 缺少了什麼導致無法start
是不是我的
EricZhang
我剛剛重新將rpi重新安裝後 發現問題源頭
我在spt-get那邊就錯誤了
正在預先設定套件 …
選取了原先未選的套件 isc-dhcp-server。
(讀取資料庫 … 目前共安裝了 125576 個檔案和目錄。)
Preparing to unpack …/isc-dhcp-server_4.3.1-6+deb8u2_armhf.deb …
Unpacking isc-dhcp-server (4.3.1-6+deb8u2) …
Processing triggers for man-db (2.7.0.2-5) …
Processing triggers for systemd (215-17+deb8u4) …
設定 isc-dhcp-server (4.3.1-6+deb8u2) …
–>Generating /etc/default/isc-dhcp-server…
Job for isc-dhcp-server.service failed. See ‘systemctl status isc-dhcp-server.service’ and ‘journalctl -xn’ for details.
invoke-rc.d: initscript isc-dhcp-server, action “start” failed.
Processing triggers for systemd (215-17+deb8u4) …
想請問是什麼原因嗎 我試過用sudo su root 安裝也一樣
ANDY
編輯 /etc/dhcp/dhcpd.conf 設定檔,將 domain name 的全域設定拿掉:
# option definitions common to all supported networks…
# option domain-name “example.org”;
# option domain-name-servers ns1.example.org, ns2.example.org;
請問只要改成這樣而已嗎
# option definitions common to all supported networks…
option domain-name “example.org”;
# option domain-name-servers ns1.example.org, ns2.example.org;
ANDY
請問這段要加在哪呢~?
subnet 192.168.2.0 netmask 255.255.255.0 {
range 192.168.2.10 192.168.2.50;
option broadcast-address 192.168.2.255;
option routers 192.168.2.1;
default-lease-time 600;
max-lease-time 7200;
option domain-name “local”;
option domain-name-servers 168.95.192.1, 168.95.1.1;
}
ANDY
挖!!
我成功了
感謝大大~
請問可以用甚麼方式聯絡您嗎?
G. T. Wang
如果是技術問題,可直接在這裡與我討論,非技術的私人問題,可寄信至我的 Email 信箱。
ANDY
請問您的做法應該是會讓
內部有網路 ,
但是顯示不了網頁 吃不到wifi嗎?
G. T. Wang
抱歉,這裡的網路設定我沒有寫得很清楚。
這裡的做法是用 wlan0 對內提供無線網路,而 eth0 對外連上網際網路,正常來說設定好之後是可以正常上網的。
當然網路的設定有很多方式,這只是常用設定的其中一種。
John Huang
謝謝你的分享
蠻希望 RaspberryPi 之後也能支援 5GHz 的頻段
zetacat
請問:
開啟hostapd時,出現
rfkill: Cannot open RFKILL control device
nl80211: Could not re-add multicast membership for vendor events: -2 (No such file or directory)
是甚麼出錯?如何解決?
目前狀況是手機偵測的到AP但顯示不需要密碼
但我有設wpa_passphrase
而且連的時候一直卡在obtaining ip address
求解惑,感激不盡~
zetacat
#備註 我是使用orangepi ubuntu 16.04.2LTS 而非raspberrypi
maxhu
您好,關於這篇網誌受益匪淺
但想請教,當我們設定好 網路轉發 wifi ap mode,要如何變回來?
不曉得有什麼文章或關鍵字可以參考
Roger Sung
感谢分享
sj
my error message, pls help..
root@orangepizero:~# sudo hostapd /etc/hostapd/hostapd.conf
Configuration file: /etc/hostapd/hostapd.conf
nl80211: Could not configure driver mode
nl80211: deinit ifname=wlan0 disabled_11b_rates=0
nl80211 driver initialization failed.
wlan0: interface state UNINITIALIZED->DISABLED
wlan0: AP-DISABLED
hostapd_free_hapd_data: Interface wlan0 wasn’t started
sj
dnsmasq and isc-dhcp-serve, 哪個好?
sj
請問重開機,要如何自動啟動