【玩轉開源】BananaPi R2 —— 第三篇 基於Openwrt開發一個簡單的路由器

      上一篇講解了R2的網口配置,這一篇咱們以BananaPi R2爲例子來實現一個簡單的路由器;那麼一個簡單的路由器應該具有什麼樣的功能呢?最簡單的說就是wan+lan+ap這三個功能。git

      首先wan+lan的功能,R2已經默認有了,接下來咱們用網橋(bridge)的方式搭建一個無線熱點(Ap)。web

  • 打開R2上mt6625(R2上的無線芯片)的ap模式
jack@jack: wmt_loader &
jack@jack: stp_uart_launcher -p /etc/firmware &
jack@jack: echo A > /dev/wmtWifi &
  • 打開後,能夠看到生成了一個虛擬網口ap0
root@LEDE:/# ifconfig -a
ap0       Link encap:Ethernet  HWaddr 02:08:22:4A:BA:50  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
  • 接下來,咱們須要建立一個無線熱點出來,這裏我使用的是hostapd(soft AP)的方式去建立,在這裏我引伸一下hostapd的知識:
   什麼是hostapd?我截取官網一部分解釋:hostapd is a user space daemon for access point and authentication servers. It implements IEEE 802.11 access point management, IEEE 802.1X/WPA/WPA2/EAP Authenticators, RADIUS client, EAP server, and RADIUS authentication server. The current version supports Linux (Host AP, madwifi, mac80211-based drivers) and FreeBSD (net80211).
簡單說就是hostapd是一個用戶空間1的守護進程,AP(access point)遵循IEEE的部分網絡和安全協議。
hostapd官網:https://w1.fi/hostapd/
hostapd相關資料:https://w1.fi/cgit/hostap/plain/hostapd

標註1:用戶空間是相對於內核空間去區別的,咱們平時的操做基本都是在用戶空間去進行的,簡單的理解就是咱們平時操做的Linux系統Gui,命令行,shell腳本,編譯運行的C程序等等都是在用戶空間的行爲。
  • 如下是hostapd的簡單配置:
root@LEDE:~# cat hostapd.conf 
interface=ap0           #網口是ap0
bridge=br-lan           #網橋是br-lan
ssid=BPI_R2             #SSID即無線信號的名稱是BPI-R2
driver=nl80211          #使用的驅動是nl80211 
country_code=CN
hw_mode=g                #使用的是2.4G
channel=1                #信道是1
wpa_key_mgmt=WPA-PSK     #加密算法
wpa_passphrase=ledetest  #建立的無線AP密碼

關於hostapd.conf文件更多的信息,請查看這裏:https://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf
  • 配置完成後,執行「hostapd -d hostapd.conf」建立無線熱點:
root@LEDE:~# hostapd -d hostapd.conf 
Configuration file: hostapd.conf
[ 6102.269958] br-lan: port 5(ap0) entered blocking state
[ 6102.275130] br-lan: port 5(ap0) entered disabled state
[ 6102.280499] device ap0 entered promiscuous mode
[ 6102.285076] br-lan: port 5(ap0) entered blocking state
[ 6102.290176] br-lan: port 5(ap0) entered forwarding state
ap0: interface state UNINITIALIZED->COUNTRY_UPDATE
Using interface ap0 with hwaddr 02:08:22:4a:ba:50 and ssid "BPI_R2"
ap0: interface state COUNTRY_UPDATE->ENABLED
ap0: AP-ENABLED 
  • 看打印的log,能夠看出熱點以及建立成功了,接下來我用windows系統的筆記本去鏈接:

    

         鏈接成功,看來Openwrt已經把dhcp服務也配置好了,這裏再簡單引伸一下dhcp服務:算法

  dhcp(Dynamic Host Configuration Protocol)動態主機配置協議,其實簡單來說,就是設備連入局域網時,能夠動態獲取到IP的一種協議。
  若是沒有配置dhcp服務,設備連入局域網後,就獲取不到IP,也就上不了Internet。
  • 咱們來看一下R2上的dhcp服務:
root@LEDE:~# cat /etc/config/dhcp 
config dnsmasq                         #dnsmasq是一個輕量級的dhcp,dns服務
        option domainneeded '1'
        option boguspriv '1'
        option filterwin2k '0'
        option localise_queries '1'
        option rebind_protection '1'
        option rebind_localhost '1'
        option local '/lan/'
        option domain 'lan'
        option expandhosts '1'
        option nonegcache '0'
        option authoritative '1'
        option readethers '1'
        option leasefile '/tmp/dhcp.leases'
        option resolvfile '/tmp/resolv.conf.auto'
        option nonwildcard '1'
        option localservice '1'

config dhcp 'lan'
        option interface 'lan'
        option start '100'
        option limit '150'
        option leasetime '12h'
        option dhcpv6 'server'
        option ra 'server'

config dhcp 'wan'
        option interface 'wan'
        option ignore '1'

config odhcpd 'odhcpd'
        option maindhcp '0'
        option leasefile '/tmp/hosts/odhcpd'
        option leasetrigger '/usr/sbin/odhcpd-update'
        option loglevel '4'

        乍看上去,這裏的dhcp配置讓人有點心生畏懼,其實也不用太擔憂,咱們先來簡單看一下這個dhcp的配置:shell

咱們先暫時略過dnsmasq和odhcpd,後續會添加講解。
這裏配置了兩個接口"lan""wan"爲dhcp的方式,這兩個接口必須也是在/etc/config/network中被定義過的。
「wan」配置很簡單,不用過多說明,咱們來簡單分析一下「lan」的配置:

config dhcp
'lan' option interface 'lan' #必須是在/etc/config/network中被定義過的 option start '100' #從x.x.x.100開始分配IP option limit '150' #一共有150個IP,也就是說這裏的配置是x.x.x.100 - x.x.x.249 option leasetime '12h' #最長鏈接時間 option dhcpv6 'server' option ra 'server' #服務定義的模式是IPv6(RA & DHCPv6)

更多細節能夠參考這裏:https://openwrt.org/docs/guide-user/base-system/dhcp

        接下來我用手機鏈接,而後測試R2無線網絡的速度,固然這個速度是和R2鏈接的帶寬相關聯的,我這裏是;vim

     

        看起來網速還算是比較快的;如今,咱們就已經成功在R2上面部署了一個具備基礎路由功能的Openwrt了。windows

        接下來有人可能會遇到這個問題,個人R2關機或者重啓了,以前配置好的環境沒了,又要從新配置,有沒有什麼方法能夠開機啓動後去自動配置我要的環境呢?安全

        答案固然是有的:網絡

  • 首先建立一個啓動Ap的腳本
vim setup.sh         
#!/bin/ash
wmt_loader &
sheep 3
stp_uart_launcher -p /etc/firmware &
sleep 5
echo A > /dev/wmtWifi &
sleep 5
hostapd -d hostapd.conf
  • 而後再把setup.sh加到Openwrt的啓動文件裏
root@LEDE:~# vim /etc/rc.local
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.
cd /root/             #個人setup.sh是放在/root目錄下的,因此要先進入/root目錄
sleep 6               #這裏sleep 6s是由於在等系統其它服務init完成
./setup.sh &
exit 0
  • 而後再套個盒子,接根天線,就有那麼點意思了

    

        如今,一個簡單的路由器產品就完成了。最後,有人可能會問,既然是要作一個路由器產品,不可能總是用命令行去操做吧,再怎麼樣也要有一個web的頁面去配置吧。dom

        說的沒錯,要實現web頁面對路由器的配置,這裏不得不提到Openwrt的好幫手Luci,那麼下一篇咱們就來看什麼是Luci,以及如何配置。ide

        歡迎你們批評指正,轉載請註明出處,多謝。

相關文章
相關標籤/搜索