DIY 香蕉派BPI 路由器完整方案[有线+无线]

作者: jarod_ch
上传时间为: 2014-11-19 10:06 AM
2014-11-19
阅读:

方案说明:

      拿到香蕉派的路由器版本(r1)已经有一段时间了,但是因为硬件兼容性等问题,所以还没能折腾成功。目前可以使用的是官方提供的两个镜像——openwrt和定制的安卓系统。而我的目标是定制一个香蕉派的路由器系统。不要openwrt,因为它是为常规的路由设计的迷你系统,为了能够把系统塞进普通路由器那可怜的rom里面而做了裁剪,而这些问题在拥有sata接口的香蕉派上根本不是问题。

鉴于bpi和bpi-r1在大部分硬件和软件环境兼容的情况下,为了尽早完成我的机会,我准备在bpi上先进行探索和开发,等到r1板子的硬件兼容等问题解决后,便可以很方便的移植到r1路由器板子上。

注释: bpi 即香蕉派的普通版本(下左图)  ; 文中提到的r1即 bpi-r1,是基于bpi的基础上扩展的可用做路由器的版本。(下右图




方案目标:

 基于bpi构建一个完整的无线路由器功能。bpi自带网口连接局域网(可通过交换机支持多台设备),一个usb无线网卡作为无线AP,另外接一个usb有线网卡连接猫或者外网。一般家庭上网使用的最多是20M光纤,usb百兆有线网卡足以,所以我们把usb有线百兆连接外网,而bpi自带千兆的用在局域网内。此方案可供树莓派等arm板子的玩家借鉴使用。

硬件构成:

  1. bpi板子一块 

  2. 5v2a电源(本次使用苹果的2a电源)   

  3. 高质量usb(microUSB)电源线一根。这个比一般人想象的重要,太差的线无法支持2a电流,容易导致一堆问题,特别是外设比较多的情况。

  4. usb无线网卡一个(选系统支持的,一般市场上的ralink的和螃蟹卡rtl系列的比较多,而且兼容比较好)。本方案使用的是tenda的w311m。

  5. usb有线网卡一个。本次使用前后用了两个,一个是qf9700芯片的,容易出现断线和不稳定的状况,而且无法达到宽带的最大速度(下左图); 第二次使用的是亚信的芯片的usb有线网卡,速度和稳定性非常好,推荐后面的(下右图)。


  6. 网线若干

  7. TTL调试线(非常重要)。因为我们要做的是路由器的方案,具体操作涉及到网络防火墙的设置,一个错误的操作就可能把你自己的ssh连接挡在外面。所以建议用TTL线连接。当然你非要自己连接显示器和键盘也没问题。但是注意了,bpi上的两个usb都已经被占用了(一个接usb无线网卡,另外一个接usb有线网卡),所以你不用TTL方案的话,你最好弄一个带电源,并且可以反向屏蔽电流的usb集线器。为了提高成功率,最好用TTL方案,越复杂的系统越容易有问题。

效果图:

软件构成:

1. bananian系统(德国佬做的基于debian的系统) 下载地址 http://pan.baidu.com/s/1ntMDlWl     官网地址

2. 搭建路由器需要的软件

  • 1 pppoe拨号 pppoe pppoeconf pppstatus
  • 2.无线AP功能 hostapd
  • 3.提供DNS缓冲和DHCP服务器功能 dnsmasq
  • 4.网桥架设工具 bridge-utils
  • 5.iptables(netfilter) 系统自带,不需要另外安装


开始折腾


1.安装必要软件


apt-get install pppoe pppoeconf pppstatus
apt-get install hostapd
apt-get install bridge-utils
apt-get install dnsmasq


2.网络基础设置


编辑清理/etc/network/interface  ,除了下面的内容,其他的内容都删除。如果没有下面的内容,那就加上。

auto lo
iface lo inet loopback


3.无线AP设置

设定 /etc/default/hostapd 取消DAEMON_CONF前面的注释符号,修改为

DAEMON_CONF="/etc/hostapd/hostapd.conf"

设定hostapd文件  /etc/hostapd/hostapd.conf

interface=wlan0
driver=nl80211

bridge=br0   #注意这行里面的br0 是网桥名,我们后面还要用到

ssid=bpi-r1-ap  # 无线APSSID名
hw_mode=g
channel=11      # 频道
wpa=1
wpa_passphrase=abcdef12345  # 无线AP的密码 换成你自己的
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP CCMP
wpa_ptk_rekey=600

4.保护bpi自身

/root/下面创设 setfw2.sh文件

#!/bin/bash

iptables -t filter -F

iptables -A INPUT -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT  -o eth1 -j ACCEPT

iptables -A INPUT  -i eth1  -j DROP

iptables -A INPUT  -i br0 -j ACCEPT
iptables -A OUTPUT -o br0 -j ACCEPT

5. 设定DNS和DHCP服务

在/etc/dnsmasq.conf 文件。

找到相应的选项。取消前面的#注释符,然后按照下面设置

interface=br0
dhcp-range=192.168.2.50,192.168.2.150,255.255.255.0,12h  #设置你的DHCP范围,建议用这个,如果你要用自己的,记得修改其他脚本
no-resolv
no-poll
server=8.8.8.8  #设置dns
server=202.101.172.46  #设置dns

6. 最后一步

先说明下,这里分两个方案可供选择,具体操作有些不同。

   方案1:PPPOE方案,就是直接把bpi上面的usb有线网卡连接你家里的猫,直接当路由器使用。

   方案2:固态IP方案,如果你想把bpi连接到一个现有的路由器上,或者外网是固定IP,那么用这个方案。

为了便于其他玩家折腾。我编写了5个脚本。 

setipppp.sh 和 setfwppp.sh           是为方案1:pppoe方案准备的

setip.sh和setfw.sh                          是为方案2:固定IP准备的。

setfw2.sh是两个方案共用的。

记住把这5个文件都保存在/root/目录下,或者你自己需要放置的位置。并且chmod a+x 给它们加执行权限

然后根据你要选择的方案,修改/etc/rc.local 让它们开机就能自动运行。

方案1:pppoe方案 直接连接猫拨号

  设置pppoe拨号

因为我们在前面已经安装了pppoe的工具套件。现在开始配置pppoe拨号,记住这个时候要把连接猫的网线的另外一头连接到usb有线网卡上,因为这样这个设置程序才能识别哪个设备连接了pppoe猫。

pppoeconf  
# 输入这个命令 启动交互式配置模式
#根据提示来输入相应的东西
#要注意的是两点
#1. 它会问你是否自动添加路由,记得选是
#2. 它会问你是否开机启动,记得选是

plog pppoestatus可以查看拨号状况,pon dsl-provider 以/etc/ppp/peer/dsl-provider 配置来拨号。 poff则关闭拨号。

其他命令和用法自己查看man手册或者google。

 文件setipppp.sh

#!/bin/bash

ifconfig eth0  0.0.0.0 up

brctl addbr br0
brctl addif br0 eth0

ifconfig br0 192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255 up

    文件 setfwppp.sh

#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -F
iptables -t nat -F

iptables -t nat -A POSTROUTING  -o ppp0 -j MASQUERADE

iptables -A FORWARD -i ppp0 -o br0  -m state --state RELATED,ESTABLISHED -j ACCEE
PT
iptables -A FORWARD -i br0 -o ppp0 -j ACCEPT

设置启动 

修改/etc/rc.local ,在文件末尾添加下面内容,但是要在 exit命令前添加。

/root/setipppp.sh
/root/setfwppp.sh
/root/setfw2.sh

方案2:固态IP方案


文件1 setip.sh

#!/bin/bash


ifconfig eth1 192.168.1.3 netmask 255.255.255.0

ifconfig eth0  0.0.0.0 up

brctl addbr br0
brctl addif br0 eth0

ifconfig br0 192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255 up

route add default gw 192.168.1.1  netmask 0.0.0.0 dev eth1

文件2 setfw.sh

#!/bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -F
iptables -t nat -F

iptables -t nat -A POSTROUTING  -o eth1 -j MASQUERADE

iptables -A FORWARD -i eth1 -o br0  -m state --state RELATED,ESTABLISHED -j ACCEE
PT
iptables -A FORWARD -i br0 -o eth1 -j ACCEPT


设置启动

在/etc/rc.local里面添加下面的内容,注意先后顺序

/root/setip.sh
/root/setfw.sh
/root/setfw2.sh

7. 特别说明

设备名称问题。也就是bpi自带网口,usb有线网卡,usb无线网卡在系统中的设备名称,也许你遇到的和我的情况不同。如果这样,记得修改上面脚本和配置文件中的相应部分。

相关经验
全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示