树莓派笔记(1) —— 无线路由器
折腾树莓派也是个非常麻烦的事情,想把它做成一个能够自动连接自己VPN的路由器,也费了一番功夫
之前使用静态IP的方式勉强算能够管理rpi,但每次登录都得插网线还是挺繁琐的,最自然的想法当然是把它做成一台无线路由器了。
系统升级
在这之前可以对系统进行一次固件和软件的升级,当然不升级也可以
1 | sudo rpi-update |
网卡驱动
树莓派自身是不带无线网卡的,所以需要自己购买一块USB无线网卡。当初没有注意驱动问题随便购买了TP-LINK的TL-WN725N v2.0,这恰好是RPI 2B原生不支持的型号(原生支持v1.0)。在这里可以先check一下树莓派对自己无线适配器的支持情况 RPi USB Wifi Adapters.
在这之后肯定是要先安装一下8188eu这种芯片的驱动模块,首先需要使用uname -r
查看自己linux的版本号,然后去这个页面寻找对应的驱动包 Drivers for TL-WN725N V2 - 3.6.11+ -> 4.1.xx+,注意这里RPi和RPi 2的驱动是不同的包,如果下错版本的话很可能安装失败。找到对应的文件名到这个地址去下载对应的文件
1 | https://dl.dropboxusercontent.com/u/80256631/8188eu-201xyyzz.tar.gz |
将xyyzz
替换成自己对应的版本即可,下好后解压,然后安装
1 | tar -zxvf 8188eu-201xyyzz.tar.gz <--set data code for driver version above |
也可以用这段script自动进行,我下载的文件里已经自带了install.sh的文件,直接运行就可以了。
最后如果modprobe 8188eu
没有问题的话,使用ifconfig
能够看到wlan0
,这就代表驱动已经安装好了。
Hostapd
接下来安装无线热点,很多blog说hostapd也不支持WN725N v2.0的网卡需要下载另一个第三方的版本,不过我编译官方版本好像也没有什么问题……
具体来说需要修改一下设置,首先从官网hostapd下载最新的版本源码,然后解压。
1 | wget https://w1.fi/releases/hostapd-2.5.tar.gz |
打开.config
配置文件找到下面一行
1 | CONFIG_DRIVER_NL80211=y |
确认这一行没有被注释,也就是打开的状态,这样makefile会自动编译nl80211的接口。
然后保存文件退出,在当前文件夹下执行make
,如果报netlink.c文件中找不到genl.h
的错误,则需要安装libnl
1 | sudo apt-get install libnl-dev |
继续执行make,这下应该没有问题了,最后执行sudo make install
,hostapd就安装完毕了。
来到/etc/hostapd
目录,这里有一个hostapd.conf.example
配置文件,是一个配置文件的样例,不过大部分的选项我们都用不到,自己新建一个hostapd.conf
,我的配置是这样的
1 | interface=wlan0 #无线的接口 |
然后启动hostapd服务
1 | sudo service hostapd start |
如果没有报错的话应该可以搜到热点了(但还没有IP),如果出错了需要到/var/log/syslog
中去检查一下日志
DHCP
虽然这时候设备可以接上热点,但还没有IP,需要安装一个DHCP服务器分发IP。
使用isc-dhcp-server
1 | sudo apt-get install isc-dhcp-server |
编辑/etc/dhcp/dhcpd.conf
,在最后添加
1 | subnet 192.168.0.0 netmask 255.255.255.0 { |
其中lease time指的是租借时间,即1个IP保留给客户端使用的时间,过了时间之后会重新分配,可以自己修改。
给自己的网卡添加静态地址
1 | sudo ifconfig wlan0 192.168.0.1 netmask 255.255.255.0 |
注意这里的地址要是上面配置中routers的地址,这样客户端会将树莓派作为默认路由
将这个配置写到网卡配置,打开/etc/network/interfaces
,编辑auto wlan0
这一块,先将其全部注释,然后自己写上
1 | auto wlan0 |
启动dhcp服务
1 | sudo service isc-dhcp-server start |
这时设备接上wifi应该能够得到IP了,不过还不能上网。
开启转发
如果想让内网中的设备访问外网,需要配置一下linux的转发规则。
首先打开内核转发开关,打开/etc/sysctl.conf
,取消注释下面这行
1 | net.ipv4.ip_forward=1 |
保存退出,刷新规则
1 | sudo sysctl -p |
配置iptables的地址转换
1 | sudo iptables -A FORWARD -i wlan0 -j ACCEPT |
最后这行跟大部分blog不同,这是为了openvpn准备的,因为启动openvpn后路由不再从eth0这个接口走,如果-o eth0
的话就不行了。
保存规则
1 | sudo iptables-save > /etc/iptables.rules.v4 |
在/etc/network/interfaces
的尾部添加
1 | up /sbin/iptables-restore < /etc/iptables.rules.v4 |
也可以通过在/etc/network/if-preup.d
中添加脚本文件来实现
Extra: OpenVPN
到此一台无线路由器就配置完成了,而且所有服务都已经就绪了,如果重启sudo reboot
之后应该不会受到影响。
如果发现某个服务没有work,可以在/var/log/syslog
中check,默认它们的日志都在这个文件中。
在此基础上,我希望它能自动接openvpn,也非常容易,直接安装openvpn客户端,配置好文件就可以了。
重点还是在iptables转发的时候不要把过滤规则写成-o eth0
。