1. 程式人生 > >經驗分享:利用樹莓派開發板製作無線路由器

經驗分享:利用樹莓派開發板製作無線路由器

摸索了一個禮拜,總算將自己手上的樹莓派開發板製作成了一個無線路由器。

無線路由器在資料包的傳輸中會進行NAT轉化,並生成NAT表,資料包必須先通過LAN口進入路由器,再由WLAN口出路由器進入Internet,然後才能在Internet上找到對應的伺服器…以上為路由器的基本工作原理。

待解決的問題

若讓樹莓派作為路由器使用,則必須滿足下列條件:

  • 開啟DNS服務與DHCP服務;
  • 擁有獨立的WLAN口與LAN口,自動生成NAT表;
  • 開啟資料轉發功能,使得無線網絡卡的資料可通過有線網絡卡進行傳送。

步驟

  1. 安裝相關的資料包,取得DNS服務與DHCP服務:
sudo apt-get update
sudo apt-get install dnsmasq hostapd

dnsmasq中提供了DNS與DHCP兩種服務,hostapd能使得樹莓派的無線網絡卡工作在無線路由模式,初次搭建出路由器的WLAN口與LAN口。

  1. 關閉無線路由模式,手動設定靜態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口即可。

  1. 設定路由器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"
  1. hostapd 命令測試
sudo hostapd -B /etc/hostapd/hostapd.conf

準確做到了這裡,開啟手機,就能看到你用樹莓派設定的WiFi了。

  1. 配置 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的主機連線到路由器,以免造成其對路由器主機的惡意攻擊。

  1. 開啟資料轉發功能
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

最後輸入系統重啟命令,路由器就可以正常上網了。