2014年10月1日 星期三

Raspberry Pi 樹莓派 無線AP to 有線網路橋接

筆者最近在研究Wi-Fi時發現Pi也可以模擬成AP,因此筆者用閒暇時間整理出如何將Pi變成一台無線基地台

簡介

首先先說明一下筆者所處的網路架構(圖1),圖片從右到左的介紹如下
  i. 首先是modem: 俗稱小烏龜的玩意兒,常見的就是ISP(中華電信, 寬頻業者)給的機器
  ii. 無線基地台(AP): 手機或筆記型電腦能透過Wi-Fi連接上AP後就能上網,很重要的一點是預設要開啟DHCP功能
  iii. 平板、手機、筆電: 透過Wi-Fi上網的機器
  iv. PC: 透過有線網路上網的機器

圖1. 典型網路架構

圖2為筆者目標的網路架構,說明如下
  目標: 
    i. 將有線網路延伸出去,像是AP架在客廳可是房間訊號很差,但卻有有線網路能接的情況
    ii. 另一種玩法就是做封包分析和網路攻擊的時候中間多個橋接器方便很多的
    iii. 由於是橋接的方式,在Pi無線網域下的所有裝置與有線網域下的所有裝置都還是在同一個網段,簡單的說就是網芳還是通的~
  架構:
    將有線網路接到Pi上,再由Pi發出Wi-Fi的訊號給手機、平板等裝置連線


網卡晶片

  筆者使用RTL8188CUS配合Realtek的軟體後可正常使用,但RTL8188SU和RTL8192SU試了好幾次都跑不起來.......

架設前注意事項

  以下的操作建議在Pi上接著螢幕和鍵盤執行,橋接完後AP分給Pi的IP可能會改變,此外有線網卡(eth0)基本上不會再取得IP,即便取得也不穩定,因此完成所有步驟前請直接在Pi上操作

架設步驟

  1. 安裝bridge工具

pi@ ~ $ sudo apt-get install bridge-utils

  2. 檢查網卡晶片組

  若跟筆者一樣是Realtek網卡晶片組請先跳到下方的"修正Realtek網卡在Pi上無法使用hostapd問題"章節安裝Realtek的hostapd,完成後再回到第4步
pi@ ~ $ sudo lsusb

  3. 安裝官方的hostapd

  (Realtek網卡晶片的使用者請勿使用Pi官方版本的hostapd)
pi@ ~ $ sudo apt-get install hostapd

  4. 檢查網卡代號

  此處筆者的有線網卡為eth0,無線網卡為wlan0
pi@ ~ $ ifconfig

  5. 修改無線網卡設定使其eth0和wlan0橋接起來

pi@ ~ $ sudo vi /etc/network/interfaces
auto lo

iface lo inet loopback
#iface eth0 inet dhcp

#allow-hotplug wlan0
#iface wlan0 inet manual
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
#iface default inet dhcp

auto br0
iface br0 inet dhcp
bridge_ports eth0 wlan0 

  6. 建立hostapd的設定檔(預設可能不會有此設定檔)

pi@ ~ $ sudo vi /etc/hostapd/hostapd.conf
interface=wlan0
driver=rtl871xdrv
bridge=br0
ssid=RPI
channel=6
hw_mode=g
ieee80211n=1
wmm_enabled=1
wpa=2
wpa_passphrase=Raspberry
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
auth_algs=1
macaddr_acl=0 

  7. 重開機

pi@ ~ $ sudo reboot

  8. 測試hostapd是否能正常執行

pi@ ~ $ sudo hostapd -dd /etc/hostapd/hostapd.conf

  9. 編輯hostapd的設定檔

  使其在啟動daemon時載入/etc/hostapd/hostapd.conf的設定
pi@ ~ $ sudo vi /etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"

  10. 啟動hostapd,接著就能RPi當做AP來使用了~

pi@ ~ $ sudo service hostapd restart

修正Realtek網卡在Pi上無法使用hostapd問題

  1. 安裝Pi官方提供的hostapd,目標只是取得hostapd的daemon而已XD
pi@ ~ $ sudo apt-get install hostapd
  2. 刪除hostapd(不要懷疑,上一步就只是為了daemon檔案而已)
pi@ ~ $ sudo apt-get remove hostapd
  3. 到Realtek的下載頁面下載RTL8188CUS的工具包(在下載頁面搜尋RTL8188CUS即可找到)
    PS: 由於Realtek的下載頁是用js觸發下載事件,為節省麻煩建議直接用其他電腦的瀏覽器下載再使用scp指令(Windows請用WinSCP or FileZilla的sftp)複製到pi

  4. 將RTL8188CUS的工具包從Mac, Linux or Windows傳送到pi的家目錄中(Windows請使用WinSCP或FileZilla)
Shiun@ShiundeMacBook-Pro ~ scp RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip pi@192.168.0.148:/home/pi
  5. 將RTL8188工具包解壓縮
pi@ ~ $ unzip RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip
  6. 移動到hostapd的目錄
pi@ ~ $ cd RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd/
  7. 解壓縮wpa_supplicant_hostapd-0.8_rtw_r7475.20130812.tar.gz
pi@ ~/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd $ tar -zxvf wpa_supplicant_hostapd-0.8_rtw_r7475.20130812.tar.gz
  8. 進入hostpad的目錄
pi@ ~/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd $ cd wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/hostapd/
  9. 開始建置hostapd
pi@ ~/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/hostapd $ make clean; make
  10. 安裝hostapd到正確的位置
pi@ ~/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/hostapd $ sudo make install;
  11. 再複製hostapd的執行檔以方便daemon使用,for Realtek的hostapd到此安裝完成
pi@ ~/RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8_rtw_r7475.20130812/hostapd $ sudo cp /usr/local/bin/hostapd* /usr/sbin


這篇寫的好累Orz.......,讀者若有發現任何錯誤請盡量向筆者糾正,謝謝^^
參考資料
  1. Raspberry Pi 的應用 - Wifi 無線基地台