树莓派和路由:将树莓派打造成一台路由器

如果你想要一个装在口袋里的网络分享设备,树莓派可以做成一个很不错的路由器.

本次制作所用到的设备要求:

  1. 本地网络
  2. 一台电脑
  3. 运行Raspbian的树莓派
  4. 无线USB路由器
  5. HDMI连接线(可选)
  6. 键盘(可选)
  7. 路由器(可选)
  8. 有HDMI输入的监视器(可选)

如果树莓派已经设置好可以独立运行了.你不需要屏幕键盘鼠标-就是另外一台可以用SSH通过网络远程登录的电脑

需要下载的

  1. Older hostapd (只有apt下不到驱动的时候)

需要的知识,技术,能力

1,可以熟练操作计算机系统

2,基本的计算机术语知识

3,敢于在终端里敲命令.如果有必要也要敢于调整他们适合自己的开发环境

4,熟悉网络核心概念

所用到资源

  1. http://magpi.techjeeper.com/The-MagPi-issue-11-en.pdf
  2. http://www.pi-point.co.uk/documentation/
  3. http://blog.sip2serve.com/post/48420162196/howto-setup-rtl8188cus-on-rpi-as-an-access-point
  4. https://docs.google.com/file/d/0B3nsVzbJuBHVOWRJRDJacVd0S2s/preview?pli=1
  5. http://sirlagz.net/2012/08/11/how-to-use-the-raspberry-pi-as-a-wireless-access-pointrouter-part-3/
  6. http://www.raspberrypi.org/phpBB3/viewtopic.php?t=39096&p=393810
  7. http://unix.stackexchange.com/questions/119209/hostapd-will-not-start-via-service-but-will-start-directly
  8. http://www.daveconroy.com/turn-your-raspberry-pi-into-a-wifi-hotspot-with-edimax-nano-usb-ew-7811un-rtl8188cus-chipset/

概念总览

  1. 用apt-get安装做需要的组件
  2. 验证无线软件狗收发功能
  3. 配置/etc/network/interfaces
  4. 给你想要设置的接入点创建配置文件/etc/hostapd/hostapd.conf
  5. 把hostapd指向步骤4所创建的配置文件/etc/hostapd/hostapd.conf
  6. 老版本替代/sbin/hostapd
  7. 配置DNS
  8. 配置IPv4转发,使其可以连接网络

准备树莓派

确定你的树莓派是最新版本的,可以安装所有最新的安装包

sudo apt-get update
sudo apt-get upgrade

安装所需要的组件

以下这些组件都是设置接入点做需要的:

  • rfkill: 一个无线工具
  • zd1211-firmware: 很多Wi-Fi收发器通用的固件
  • hostapd: 无线接入点的守护进程
  • hostap-utils: 补充工具
  • iw: 无线网络的配置工具
  • dnsmasq: DHCP 和 DNS 工具
  • bridge-utils:  用来将多个以太网设备连接到一起

用以下命令安装这些组件:

sudo apt-get install rfkill zd1211-firmware hostapd hostap-utils iw dnsmasq bridge-utils

 配置无线收发器

验证软件狗已经被树莓派识别

检查树莓派已经识别Wi-Fi软件狗:

lsusb

验证Wi-FI软件狗支持接入点模式

如果执行下面这条命令没有任何输出是关于AP mode,那么就是说你的软件狗不适合本项目。但是如果有东西的话那就继续进行下一步。

iwlist

倒霉的是我的软件狗坏了,而且还有产生了一个”

nl180211 not found

”的错误,不过还好了继续执行下面这条命令:

dmesg | grep rtl

如果结果是类似这样的

[    6.240292] usbcore: registered new interface driver rtl8192cu

可能这个还是能干活的,接下俩会修复这个问题的.

配置网络接口

先做一个

/etc/nework/interfaces

的备份,然后在文本编辑器里打开,

改成下面这个样子的:

# Automatically brings up interfaces with ifup -a
auto lo
auto br0

# Loopback
iface lo inet loopback

# Keep eth0 as dhcp so it can connect to an existing router
# (Optional--I used this since I was configuring via SSH)
iface eth0 inet dhcp

# Bridge interface
iface br0 inet dhcp
        bridge_fd 1
        bridge_hello 3
        bridge_maxage 10
        bridge_stp off
        bridge_ports eth0 wlan0

# Allow hotplug
allow-hotplug wlan0
allow-hotplug eth0
iface wlan0 inet manual
iface wlan0 inet manual

重启

wlan0

接口

ifdown wlan0
ifup wlan0

 配置hostapd

接下来,做一个

/etc/hostapd/hostap.conf

的备份然后在文本编辑器里打开做一些改动(如果这个文件不存在请忽略第一条命令)

sudo cp /etc/hostapd/hostap.conf /etc/hostapd/hostap.conf.orig
sudo vi /etc/hostapd/hostap.conf

修改这个文件使之包含以下内容,读者根据自己情况自行改动(比如国家代码,网络名等等)

如果

iwlist

命令执行结果有之前提到的

nl80211 not found

错误,创建一个内容如下的文件:

interface=wlan0
bridge=br0
driver=rtl871xdrv
country_code=US
ctrl_interface=wlan0
ctrl_interface_group=0
ssid=RPiAP
hw_mode=g
channel=1
wpa=3
wpa_passphrase=password
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
beacon_int=100
auth_algs=3
macaddr_acl=0
wmm_enabled=1
eap_reauth_period=360000000

如果

iw list

命令执行出错,文件

/etc/default/hostapd

也是需要备份的(如果此文件存在的话).

sudo cp /etc/default/hostapd /etc/default/hostapd.orig
sudo vi /etc/default/hostapd

然后添加如下内容(千万不要注释掉)

DAEMON_CONF=”/etc/hostapd/hostapd.conf”

安装一个不同版本的

/usr/sbin/hostapd

也是很有必要的,从这里下载, 根据以往经验最好在编辑之前做一个备份:

sudo cp /usr/sbin/hostapd /usr/sbin/hostapd.orig

删除原始文件, 因为接下来将会在下载章节将其替换掉.

cd /usr/sbin
sudo rm -f hostapd
sudo wget http://dl.dropbox.com/u/1663660/hostapd/hostapd

为新文件设置适当权限

sudo chown root:root hostapd
sudo chmod 755 hostapd

重启hostapd服务以激活设置

sudo service networking restart
sudo service hostapd restart

如果hostapd重启之后有问题就试一下如下命令查看结果看是否你是否能找出配置文件中的错误并将其修复.

sudo hostapd -d /etc/hostapd/hostapd.conf

如果你现在用另外一台设备扫描的话应该能够可以看到无线网络了.但是如果想要其他人连上的话还是需要一些设置的.特别是

dnsmasq

配置dnsmasq

老规矩,备份先,然后仔仔文本编辑器里打开

sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
sudo vi /etc/dnsmasq.conf

将以下行的注释符去掉然后根据你自己的环境配置

domain-needed
interface=wlan0
dhcp-range=192.168.2.1,192.168.2.254,12h

重启

dnsmasq

使设置生效,

sudo service dnsmasq restart

用其他设备尝试连接本网络,但是还是不能连上因特网的.

设置因特网转发

设置IPv4转发

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

如果上述命令提示拒绝访问,试试下面这个:

sysctl -w net.ipv4.ip_forward=1

设置NAT

sudo iptables -t nat -A POSTROUTING -j MASQUERADE

其他适配器和用法

我之所以选择Wi-Fi软件狗的主要原因是因为我可以连接我的cantenna,然后可以扩展我的信号到很远的距离.当然用一个无线适配器会非常的简单,但是现在我需要的是天线上的灵活性.

 

树莓派和路由:将树莓派打造成一台路由器,首发于极客范 – GeekFan.net