如果你想要一个装在口袋里的网络分享设备,树莓派可以做成一个很不错的路由器.
本次制作所用到的设备要求:
- 本地网络
- 一台电脑
- 运行Raspbian的树莓派
- 无线USB路由器
- HDMI连接线(可选)
- 键盘(可选)
- 路由器(可选)
- 有HDMI输入的监视器(可选)
如果树莓派已经设置好可以独立运行了.你不需要屏幕键盘鼠标-就是另外一台可以用SSH通过网络远程登录的电脑
需要下载的
- Older hostapd (只有apt下不到驱动的时候)
需要的知识,技术,能力
1,可以熟练操作计算机系统
2,基本的计算机术语知识
3,敢于在终端里敲命令.如果有必要也要敢于调整他们适合自己的开发环境
4,熟悉网络核心概念
所用到资源
- http://magpi.techjeeper.com/The-MagPi-issue-11-en.pdf
- http://www.pi-point.co.uk/documentation/
- http://blog.sip2serve.com/post/48420162196/howto-setup-rtl8188cus-on-rpi-as-an-access-point
- https://docs.google.com/file/d/0B3nsVzbJuBHVOWRJRDJacVd0S2s/preview?pli=1
- http://sirlagz.net/2012/08/11/how-to-use-the-raspberry-pi-as-a-wireless-access-pointrouter-part-3/
- http://www.raspberrypi.org/phpBB3/viewtopic.php?t=39096&p=393810
- http://unix.stackexchange.com/questions/119209/hostapd-will-not-start-via-service-but-will-start-directly
- http://www.daveconroy.com/turn-your-raspberry-pi-into-a-wifi-hotspot-with-edimax-nano-usb-ew-7811un-rtl8188cus-chipset/
概念总览
- 用apt-get安装做需要的组件
- 验证无线软件狗收发功能
- 配置/etc/network/interfaces
- 给你想要设置的接入点创建配置文件/etc/hostapd/hostapd.conf
- 把hostapd指向步骤4所创建的配置文件/etc/hostapd/hostapd.conf
- 用老版本替代/sbin/hostapd
- 配置DNS
- 配置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,然后可以扩展我的信号到很远的距离.当然用一个无线适配器会非常的简单,但是现在我需要的是天线上的灵活性.