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

- URL: https://wuming.si/blog/689/
- Author: Aaron
- Published: 2014-06-26
- Language: zh-Hans
- Categories: Uncategorized
- Originally published at: http://blog.wo.ai/archives/689

如果你想要一个装在口袋里的网络分享设备,树莓派可以[做成一个很不错的路由器.](http://www.jacobsalmela.com/raspberry-pi-cantenna-ultimate-2-4ghz-wardriving-and-long-range-wifi-access/)

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

  1. 本地网络
  2. 一台电脑
  3. 运行[Raspbian的树莓派](http://www.jacobsalmela.com/raspberry-pi-and-raspbian-wheezy-how-to-setup-a-raspberry-pi-after-buying-one/)
  4. 无线USB路由器
  5. HDMI连接线(可选)
  6. 键盘(可选)
  7. 路由器(可选)
  8. 有HDMI输入的监视器(可选)

_如果树莓派已经设置好可以[独立运行](http://www.jacobsalmela.com/raspberry-pi-and-ssh-how-to-setup-a-headless-machine-no-monitor-and-pasword-less-logins/)了.你不需要屏幕键盘鼠标-就是另外一台可以用SSH通过网络远程登录的电脑_

# 需要下载的

  1. [Older hostapd](http://dl.dropbox.com/u/1663660/hostapd/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](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. 用[老版本](http://dl.dropbox.com/u/1663660/hostapd/hostapd)替代/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

也是很有必要的,[从这里下载](http://dl.dropbox.com/u/1663660/hostapd/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](http://www.jacobsalmela.com/raspberry-pi-cantenna-ultimate-2-4ghz-wardriving-and-long-range-wifi-access/),然后可以扩展我的信号到很远的距离.当然用一个无线适配器会非常的简单,但是现在我需要的是天线上的灵活性.

[树莓派和路由：将树莓派打造成一台路由器](http://www.geekfan.net/9849/)，首发于[极客范 – GeekFan.net](http://www.geekfan.net)。
