還記得當初,在 Raspberry Pi 1 Model B 上面實作 WiFi 無線基地台的時候,為了擔心一個小小的 USB Wireless 網卡是不是被 Kernel 直接支援,就選了老半天;更別說為了讓 hostapd 支援它,還得自己編譯套件,在那邊痴痴的等、傻傻的盼。
沒想到,到了 Raspberry Pi 3 上面簡單多了。
事前準備
請先參閱 [Raspberry Pi 3] 老朋友,新功能!關於那些開箱後馬上要作的事,完成初始設定。
至於,還在用 Raspberry Pi 1、2 的朋友,實作步驟請參閱 Raspberry Pi 的應用 - Wi-Fi 無線基地台。
設定 WiFi 的 IP 位址
編輯網路介面的設定檔。
sudo vi /etc/network/interfaces
內建的 WiFi 介面編號是 wlan0,禁止它讀取 WiFi 連線設定值。
# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
編輯 DHCP Client 設定檔。
sudo vi /etc/dhcpcd.conf
輸入要給 wlan0 用的指定 IP 位址。
interface wlan0
static ip_address=192.168.0.1/24
啟用 NAT 功能
開放 IP 轉送功能。
sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
調整防火牆的 IP 偽裝設定。
sudo iptables -F
sudo iptables -F -t 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
為了安全考量,WiFi 用戶端我會讓它們無法互連,如果有這個需要的話,請再加上這一行。
sudo iptables -A FORWARD -i wlan0 -o wlan0 -j ACCEPT
儲存防火牆的設定值。
sudo bash -c 'iptables-save > /etc/network/iptables.eth0_to_wlan0'
sudo iptables-restore < /etc/network/iptables.eth0_to_wlan0
編輯開機自動載入的腳本。
sudo vi /etc/rc.local
在倒數二行加入新的防火牆規則。
sudo iptables-restore < /etc/network/iptables.eth0_to_wlan0
架設 DHCP Server
同樣依照 Raspberry Pi 的實作 - 自動配置 IP 位址資訊的 DHCP Server 的實作,完成 DHCP Server 的架設。
這次選擇的是 dnsmasq 套件,先把它安裝起來。
sudo apt-get -y install dnsmasq
編輯 dnsmasq 主設定檔。
sudo vi /etc/dnsmasq.conf
輸入下列設定值 ,192.168.0.1 是 wlan0 的自訂 IP,192.168.0.101 到 192.168.0.110 是 dnsmasq 可以發放的 IP 位址。
bogus-priv
bind-interfaces
resolv-file=/etc/resolv.dnsmasq
min-port=49152
server=8.8.8.8
server=168.95.192.1
cache-size=10000
interface=wlan0
dhcp-range=192.168.0.101,192.168.0.110,255.255.255.0,8h
dhcp-option=1,255.255.255.0
dhcp-option=3,192.168.0.1
dhcp-option=6,192.168.0.1,8.8.8.8,168.95.192.1
dhcp-authoritative
複製原本的本機 DNS Server 設定值。
sudo cp /etc/resolv.conf /etc/resolv.dnsmasq
將裡面的 DNS Server 改成 wlan0 的自訂 IP。
sudo sed -i 's/127.0.0.1/192.168.0.1/g' /etc/resolv.dnsmasq
重新啟動 dnsmasq。
sudo systemctl restart dnsmasq && sudo systemctl enable dnsmasq
啟用 W-iFi 熱點功能
這邊就是重點了。
以前我們使用 Edimax EW-7811Un 無線網卡的時候,還得自己上 Realtek 官網去下載 Linux Driver,然後再編譯老半天。
現在不用了,直接使用官方套件庫的套件就行了。
sudo apt-get -y install hostapd
新增 hostapd 的主設定檔。
sudo vi /etc/hostapd/hostapd.conf
輸入下列的設定值,SSID、密碼及頻道請依自己的需求修改。
interface=wlan0
ssid=RPi3-AP
hw_mode=g
channel=11
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=RPi3-Password
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
測試一下 hostapd 是否正常啟動。
sudo hostapd -dd /etc/hostapd/hostapd.conf
沒有錯誤訊息的話,按 Ctrl + C 中斷服務。
指定 hostapd 的設定檔位置。
sudo sed -i 's/#DAEMON_CONF=""/DAEMON_CONF="\/etc\/hostapd\/hostapd.conf"/g' /etc/default/hostapd
最後,重新開機讓所有的設定值都生效。
sudo systemctl enable hostapd && sudo reboot
開始使用
這邊用 Mac 來測試一下,先確認一下是不是真的可用用 WiFi 掃到 Raspberry Pi 3 的 SSID。
非常好,我們找到了,而且可以成功連上來了。
而且也可以正常的對外連線。
參考資料
圖片來源
- Photo via Visualhunt
更新紀錄
- 2016/03/21 撰文。
- 2017/06/05 更新 iptables 指令,引用 ghostyguo 的 解決RPi3的WiFi設定為AP後子網路內的裝置無法互相連線的問題 內容,讓 WiFi Client 端設備可以互連。
在倒數第二步驟 出現如下錯誤, 請指教
回覆刪除root@raspberrypi:~# hostapd -dd /etc/hostapd/hostapd.conf
random: Trying to read entropy from /dev/random
Configuration file: /etc/hostapd/hostapd.conf
'ine 3: unknown hw_mode 'g
'ine 10: invalid key_mgmt 'WPA-PSK
FT (IEEE 802.11r) requires nas_identifier to be configured as a 1..48 octet string
3 errors found in configuration file '/etc/hostapd/hostapd.conf'
Failed to set up interface with /etc/hostapd/hostapd.conf
hostapd_init: free iface 0x550869f0
Failed to initialize interface
依照錯誤訊息看來,
回覆刪除'ine 3: unknown hw_mode 'g
'ine 10: invalid key_mgmt 'WPA-PSK
請檢查一下 hostapd.conf 的內容是不是正確...
請問若是要把soft-ap關掉
回覆刪除恢復原本只可以去連Wifi的功能
應該要怎麼用做?
前面更動過的文件和設定全部都得改回原本的嗎?
是的,
刪除/etc/dhcpcd.conf、/etc/network/interfaces 的內容要改回來,
NAT 要關掉、dnsmasq、hostapd 要停掉,firewalld 的規則也要清掉。
請問我步驟都已完成,無法搜尋到pi3上的訊號,且重新開機後出現一行紅字:failed to start LSB:advanced IEEE 802.11 management daemon.see'systemctl status hostapd.service'for details.
回覆刪除請問是否有解?謝謝
看起來是 hostapd 服務沒有成功啟動,
刪除請執行錯誤訊息提到的 systemctl status hostapd.service 指令,
確認一下詳細的錯誤訊息,我認為很有可能是 hostapd.conf 的設定有問題。
執行systemctl status hostapd.service,出現下列訊息
刪除host.service - LSB:advanced ieee 802.11 management daemon
loaded:loaded (/etcinit.d/hostapd)
active:failed (result:exit-code) since thu 2016-05-05.....省略
process:511 execstart=/etc/init.d/hostapd start (code=exited,status=2)
hostapd.conf內的設定我剛又再確認一次,應該是沒有錯...測試hostapd時看起來也正常,沒有出現fail
不太清楚你是怎麼測試 hostapd 的,如果沒有問題的話,服務不應該起不來。
刪除1. 請先不要用 daemon 模式啟動 hostapd,直接下 command 測試,並確定 client 端連的上來。
2. 如果直接下 command 沒有問題的話,那就請檢查 daemon 設定檔。
問題已解決,感謝您!!
刪除請問有方法可以限制/分配網絡流量嗎?
回覆刪除當然可以,這得實作 QoS 功能....
刪除在 Raspbian 裡應該已經安裝好 iptables 跟 tc (traffic control) 兩個套件,研究一下它們就可以完成基本的管制了....
感激不尽 :)
刪除能写篇在CentOS 7 ARM下配置无线网卡的文章吗?急需
回覆刪除請問這樣就同時能夠當ap 以及 clinet去連別人的wifi嗎?
回覆刪除照這篇文章的步驟,的確可以把 RPi 變成 AP。
刪除不過,同一個 wlan 介面無法同時成為 AP Mode 又成為 Client。
內建的 WiFi 介面編號是 wlan0,禁止它讀取 WiFi 連線設定值。
回覆刪除# wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
請問這個#字 shift+3出不來?已更改過鍵盤設定
另外存檔離開的指令為何?
請服用 http://blog.itist.tw/2014/05/raspberry-pi-setup.html,找到 vi & vim 的那一段,加入 set nocp 來修改鍵盤的相容性。
刪除存檔離開的指令是 :wq,這個請爬一下 vi & vim 的操作教學文。
感謝您,輸入問題解決。
回覆刪除照這篇文章的步驟,的確可以把 RPi 變成 AP。
不過,同一個 wlan 介面無法同時成為 AP Mode 又成為 Client。
承上所述,照這篇文章的步驟是否能讓RPi3在沒有網路的環境下
讓手機或其他電腦設備,透過RPi3的固定IP位址登入操作RPi3呢?
謝謝
RPi3 對外的 eth0 沒有連線,
刪除但是對內的 wlan0 已經成了 AP Mode,並且有固定 IP,當然可以讓其他同網段的 Client 端直接連線。
sudo /etc/init.d/dnsmasq restart
回覆刪除[....] Restarting dnsmasq (via systemctl): dnsmasq.serviceJob for dnsmasq.service failed. See 'systemctl status dnsmasq.servi ce' and 'journalctl -xn' for details.
failed!
重啟dnsmasq出現此錯誤
請問是否有辦法解決呢?
這個訊息只是說 dnsmasq 服務起不來,要執行一下 journalctl -xn 或看一下 log 才知道為什麼起不來。
刪除比較常見的原因:
1. IP 網段的問題。
2. 主設定檔的內容有問題。
您好 我也遇到相同問題 然後好像是
刪除dncp-range 的問題
想請問 前輩們
是否知道如何解決
如果是 DHCP Range 的問題,有個很重要的關鍵:
刪除用來發 IP 的網路介面,它一定要固定 IP,而且一定要跟發放的範圍同網段,
如果不是的話,服務一定起不來。
所以rpi3無法做ap_client mode ? 正確?
回覆刪除可以啊,因為我用不到,所以沒實作而已....
刪除請問為何我連上去之後她是黃色驚嘆號呢~(沒有連到外面的樣子
回覆刪除是因為學校的網路嗎...
看一下你的 Client 有沒有拿到 IP,
刪除有的話,查一下源頭也就是學校網路有沒有擋。
沒有的話,查一下實作的過程有沒有錯。
版主您好,
回覆刪除這邊按照上面的方式進行操作,最後使用手機可以連接到RPi3上面。
但是卻沒有辦法真的連到外面的網路,不知道是哪邊操作出了問題?
這個代表 hostapd + dnsmasq 都有起來,但是對外的連線設定有問題 ...
刪除請確定一下 LAN Port 的設定、dnsmasq 的 geteway 是否正確。
job for dnsmasq.servicee failed. See 'systemctl status dnsmasq.service' and 'journalctl -xn' for details.
回覆刪除請問版主這是什麼問題呢?
dnsmasq 服務沒起來,
刪除請依照上面的說明執行 systemctl -l status dnsmasq.service 或 journalctl -xn,
確認並修正錯誤的參數。
想問如果我在iptables那邊想指定,符合規定的MAC address才能連線,
回覆刪除我改從哪裡開始下手會比較好呢?
可以參考這個方法
刪除https://www.cyberciti.biz/tips/iptables-mac-address-filtering.html
請問版大 在重啟之前有執行過hostapd -dd /etc/hostapd/hostapd.conf 手機可以正常搜尋到SSID
回覆刪除但重啟後就GG了.. 在執行一次hostapd -dd /etc/hostapd/hostapd.conf並不會像原先那樣停在等待狀態
報錯提示這些
random: Trying to read entropy from /dev/random
Configuration file: /etc/hostapd/hostapd.conf
rfkill: initial event: idx=0 type=1 op=0 soft=0 hard=0
rfkill: initial event: idx=1 type=1 op=0 soft=0 hard=0
rfkill: initial event: idx=2 type=2 op=0 soft=0 hard=0
nl80211: Supported cipher 00-0f-ac:1
nl80211: Supported cipher 00-0f-ac:5
nl80211: Supported cipher 00-0f-ac:2
nl80211: Supported cipher 00-0f-ac:4
nl80211: interface wlan1 in phy phy1
nl80211: Set mode ifindex 4 iftype 3 (AP)
nl80211: Failed to set interface 4 to mode 3: -95 (Operation not supported)
nl80211: Try mode change after setting interface down
nl80211: Set mode ifindex 4 iftype 3 (AP)
nl80211: Failed to set interface 4 to mode 3: -95 (Operation not supported)
nl80211: Interface mode change to 3 from 0 failed
nl80211: Could not configure driver mode
nl80211: Remove monitor interface: refcount=0
netlink: Operstate: ifindex=4 linkmode=0 (kernel-control), operstate=6 (IF_OPER_UP)
nl80211: Set mode ifindex 4 iftype 2 (STATION)
nl80211 driver initialization failed.
hostapd_interface_deinit_free(0x55caa9f0)
hostapd_interface_deinit_free: num_bss=1 conf->num_bss=1
hostapd_interface_deinit(0x55caa9f0)
hostapd_bss_deinit: deinit bss wlan1
hostapd_cleanup(hapd=0x55cab618 (wlan1))
hostapd_free_hapd_data: Interface wlan1 wasn't started
hostapd_interface_deinit_free: driver=(nil) drv_priv=(nil) -> hapd_deinit
hostapd_interface_free(0x55caa9f0)
hostapd_interface_free: free hapd 0x55cab618
hostapd_cleanup_iface(0x55caa9f0)
hostapd_cleanup_iface_partial(0x55caa9f0)
hostapd_cleanup_iface: free iface=0x55caa9f0
請問該如何解決QAQ
我是使用Tp link AC600 T2U這個 4.9.35-v7+版本
這塊網卡用的是 MediaTek MT7610 的晶片 ,你可能要去找找有沒有支援它的 hostapd 版本.....
刪除哈囉,先謝謝版主的用心翻譯和分享,我已照您上面的步驟都完成了,過程程中也沒有發生錯誤,在最後一行"Sudo systemctl enable hostapd && sudo reboot"重啟後,用手ㄐ或筆電搜尋這個wifi ap 都找不到? 請問是還需要啟動ap的指令嗎?
回覆刪除樹梅派本身的wifi要打開嗎?
這個指令第一個是要讓 hostapd 服務在開機後自動啟動,第二個是讓 RPi 重新開機。
刪除重新開機後還找不到的話,
1. WiFi 當然要打開,要不然手機跟筆電是要跟連到哪兒去?
2. 找不到 RPi AP 的 SSID,代表 hostapd 服務有問題,檢查一下吧....
版大您好很感謝你的這篇教學受益良多,
回覆刪除也很順利地讓我的筆電連上pi 3 (有要到IP addr , ping 外網也會通)
但是開啟網頁他說無法連上網際網路
然後已經確定我的pi是有上網能力的了
接著我按windows診斷他說 遠端裝置或資源不接受連線@@
請問有可能是甚麼問題嗎?
感謝你耐心的回復喔~
你是直接 ping 外部 IP 嗎?
刪除試試看 ping 外部的任一個 domain,例如 www.google.com。
感覺像是 DNS Server 設定有問題....
版大你好
回覆刪除我使用的是Pi3
這個架設AP方式 需要額外購買網路卡嗎
你要不要先把文章看一次,再按著步驟實作看看呢....^^
刪除感謝 我照著步驟做了
刪除目前遇到可以連到RPi3上,但是沒辦法上網
是因為 wlan0 的自訂IP 是要輸入本身的連上網的IP嗎?
wlan0 的 IP 是從上層 DHCP Server 拿到的,通常是無線基地台或 IP 分享器。
刪除如果你是直接接在小烏龜的話,請參考這篇安裝 PPPoE 撥接程式。
http://blog.itist.tw/2015/02/raspberry-pi-pppoe-connection.html
感謝你的教學
回覆刪除在跑完 sudo systemctl status dnsmasq
出現以下的問題
ignoring nameserver 192.168.0.1 - local interface
是哪個部分打錯了嗎
我沒遇過這個訊息,服務有因此跑不起來嗎?
刪除不好意思請問一下
回覆刪除如果RPI對外用PPPOE、對內用WIFI(分享)可以成功連線嗎?
請問一下,RPI使用PPPO對外連線,另一篇文章設定之後本身可以對外連線
回覆刪除但是這著此篇設定之後,透過WIFI連進去RPI的設備沒辦法對外連線
還有DHCP每次重開機之後都不會啟動,手動啟動服務之後DHCP就正常了,要如何解決
後來去查詳細的資料,自己解決了
刪除如果對外是使用PPPOE的話要把eth0改成ppp0才行
這邊提供大家一個job for dnsmasq.servicee failed. See 'systemctl status dnsmasq.service' and 'journalctl -xn' for details.的解決方案
回覆刪除是dnsmasq版本的問題 原本是2.72版 改安裝dnsmasq 2.76版就沒問題了
請問您重新安裝適用wget 的方式去安裝嗎?我目前也卡這個問題 已安裝過2.77版本 一樣都有這個問題
刪除我也安裝了2.76的版本 error還是一樣...只是我輸入呈現以下結果
刪除pi@raspberrypi:~ $ cat /etc/resolv.dnsmasq
# Generated by resolvconf
nameserver 163.17.131.2
nameserver 203.64.158.150
nameserver 168.95.1.1
這是我的ifconfig
刪除pi@raspberrypi:~ $ ifconfig
eth0: flags=4163 mtu 1500
inet 10.25.6.192 netmask 255.255.255.0 broadcast 10.25.6.255
inet6 fe80::bc2:b42a:ee0e:1c9b prefixlen 64 scopeid 0x20
ether b8:27:eb:8c:94:27 txqueuelen 1000 (Ethernet)
RX packets 46136 bytes 5939870 (5.6 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4811 bytes 962954 (940.3 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 36 bytes 3186 (3.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 36 bytes 3186 (3.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163 mtu 1500
ether 4a:56:33:e4:83:b5 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
以及 sudo vi /etc/dnsmasq.conf
刪除dhcp-mac=set:client_is_a_pi,B8:27:EB:*:*:*
dhcp-reply-delay=tag:client_is_a_pi,2
bogus-priv
bind-interfaces
resolv-file=/etc/resolv.dnsmasq
min-port=49152
server=8.8.8.8
server=168.95.192.1
cache-size=10000
interface=wlan0
dhcp-range=192.168.0.101,192.168.0.110,255.255.255.0,8h
dhcp-option=1,255.255.255.0
dhcp-option=3,192.168.0.1
dhcp-option=6,192.168.0.1,8.8.8.8,168.95.192.1
dhcp-authoritative
我也安裝了2.76的版本 error還是一樣...只是我輸入呈現以下結果
回覆刪除pi@raspberrypi:~ $ cat /etc/resolv.dnsmasq
# Generated by resolvconf
nameserver 163.17.131.2
nameserver 203.64.158.150
nameserver 168.95.1.1
請問一下
回覆刪除目前我手邊有一台樹梅派3和一張EDIMAX EW-7822UAn的網卡
想嘗試平時用內建網卡連結家裡WIFI,外出時在使用網孔+外接網卡做WIFI基地台
請問這是可行的嗎?
如果是的話,該如何設定呢?
謝謝 !