經驗分享:利用樹莓派開發板製作無線路由器
摸索了一個禮拜,總算將自己手上的樹莓派開發板製作成了一個無線路由器。
無線路由器在資料包的傳輸中會進行NAT轉化,並生成NAT表,資料包必須先通過LAN口進入路由器,再由WLAN口出路由器進入Internet,然後才能在Internet上找到對應的伺服器…以上為路由器的基本工作原理。
待解決的問題
若讓樹莓派作為路由器使用,則必須滿足下列條件:
- 開啟DNS服務與DHCP服務;
- 擁有獨立的WLAN口與LAN口,自動生成NAT表;
- 開啟資料轉發功能,使得無線網絡卡的資料可通過有線網絡卡進行傳送。
步驟
- 安裝相關的資料包,取得DNS服務與DHCP服務:
sudo apt-get update sudo apt-get install dnsmasq hostapd
dnsmasq中提供了DNS與DHCP兩種服務,hostapd能使得樹莓派的無線網絡卡工作在無線路由模式,初次搭建出路由器的WLAN口與LAN口。
- 關閉無線路由模式,手動設定靜態IP:
sudo vim /etc/dhcpcd.conf # insert the following sentences denyinterfaces wlan0 sudo vim /etc/network/interfaces # set the loopback auto lo iface lo inet loopback # set the eth0, eth0 equals to WLAN interface auto eth0 iface eth0 inet loopback address 192.168.X.X netmask 255.255.255.0 gateway 192.168.X.1 # set the wlan0, wlan0 equals to LAN interface allow-hotplug wlan0 iface wlan0 inet static address 192.168.Y.Y netmask 255.255.255.0 sudo reboot
將上述介面配置檔案修改之後,網絡卡eth0等效於路由器的WLAN口,wlan0相當於路由器的LAN口,loopback則是路由器的本地迴環(用於檢查介面是否正常工作);eth0的閘道器應設定為其他路由裝置LAN口的IP,並且網路號需與LAN口的網路號一致;eth0與wlan0的IP只要不是設定在同一個網路號內即可。樹莓派重啟之後,網絡卡便生效了。此時,樹莓派已不能連線無線網路,但可以連線有限網路,此時如需遠端登入樹莓派,只需將樹莓派連線上所設定路由裝置的LAN口即可。
- 設定路由器ID、WiFi密碼、訊號波段、加密型別
sudo touch /etc/hostapd/hostapd.conf ; chmod a+w /hostapd/hostapd.conf sudo vim /hostapd/hostapd.conf # insert the following contents ssid=XXX wpa_passphrase=XXX channel=6 interface=wlan0 driver=nl80211 wpa=2 ignore_broadcast_ssid=0 macaddr_acl=0 wpa_key_mgmt=WPA-PSK ieeenl80211=1 hw_mode=g wmm_enabled=1 auth_algs=1 rsn_pairwise=CCMP ht_capab=[HT40][SHORT-GI-20][DSSS-CCK-40]
ssid和wpa_passphrase表示設定WiFi名稱和密碼;channel表示使用第六號通道傳輸資料;interface應設定為LAN口的名稱;nl80211是路由器驅動的型別,nl80211驅動按照IEEE標準編寫,ht_capab則是設定nl80211中對應引數的值;hw_mode表示設定WiFi訊號的波段;WMM表示無線多媒體裝置優先連線,(百度了一下,WMM與nl80211有關,是nl80211的一個子集);auth_algs表示自動使用WPA加密演算法;rsn_pairwise=CCMP表示用AES加密協議代替TKIP加密協議(TKIP是一種不安全的無線加密協議,目前基本不用,AES較為安全);macaddr_acl=0表示接收所有裝置的MAC地址,並進行無線連線。
修改一下hostapd的啟動配置檔案,使系統一上電就能找到檔案的位置:
sudo vim /etc/default/hostapd/
# insert this sentence
DAEMON_CONF="/etc/hostapd/hostapd.conf"
- hostapd 命令測試
sudo hostapd -B /etc/hostapd/hostapd.conf
準確做到了這裡,開啟手機,就能看到你用樹莓派設定的WiFi了。
- 配置 dnsmasq
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
sudo vim /etc/dnsmasq.conf
#insert the following contents
interface=wlan0
listen-address=192.168.X.1
server=X.X.X.X
domain-need
bogus-priv
dhcp_range=192.168.X.2,192.168.X.254,24h
sudo service dnsmasq restart
server應配置為DNS伺服器的IP,一般設為4.2.2.2或8.8.8.8等;dhcp_range表示路由器動態分配IP的範圍,只要其設定的範圍不包括閘道器和廣播的IP即可,此範圍的大小也是路由器最大可以接受的主機數量,後面的時間表示一臺主機一次最長可連線的時間l;isten-address應設定為路由器LAN口的IP;bogus-priv表示禁止偽裝IP的主機連線到路由器,以免造成其對路由器主機的惡意攻擊。
- 開啟資料轉發功能
sudo sh -c "echo > 1 /pro/sys/net/ipv4/ip_forward"
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -t -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED
-j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
將上述命令作為一個shell指令碼,寫入系統的配置中,讓其在樹莓派上電之後自動執行:
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
修改系統的啟動指令碼:
sudo vim /etc/rc.local
sh -c "echo > 1 /pro/sys/net/ipv4/ip_forward"
iptables -restore < /etc/iptables.ipv4.nat
exit 0
最後輸入系統重啟命令,路由器就可以正常上網了。