将树莓派打造成一台智能路由器

首先请允许我啰嗦几句,能把这东西做出来一定要感谢二食堂一楼那些24小时open的窗口以及
宿管大妈晚上非常不走心的锁门方式,我才没有饿死......

使用树莓派设置为WiFi热点的方法主要有两种:

  • 桥接方式:类似交换机,将LAN口的信号转换为无线,各终端独立工作。
  • 路由方式:和大部分路由器工作方式一样。

由于我做这个路由器的主要目的是为了绕过校园网认证系统,并且可以让我的多个设备同时上网,所以我采用了路由的方式来配置树莓派。
首先,如果你是新到手的树莓派,需要先安装一个系统。因为我平时用Ubantu比较多,所以就选用了Debian的操作系统(Raspbian),这也是Raspberry Pi的官方推荐系统。由于天朝的某些政策,下载到最新的系统可能会比较麻烦,这里是最新image的BT地址:

http://downloads.raspberrypi.org/raspbian_latest.torrent

等配置好了这些之后,就可以开始正式的工作了:


step 1. 检查无线网卡是否支持。如果你的网卡可以被正常检查到,那么恭喜你,你可以进行下一步了。如果无法正常显示出来,那你可能需要安装相应网卡的驱动。为了方便起见,建议去查看一下树莓派的免驱列表,购买免驱的网卡,这里我用的是Edup的EP-N8508GS(RTL8188CUS芯片)。

$ lsusb
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter

step 2. 安装Hostapd,用来实现无线的共享。不过Hostapd的官方版本不支持RTL8188的芯片,所以我们需要自己编译安装Hostapd。
step 3. 如果已经安装了Hostapd,请先卸载掉已经安装了的版本。

sudo apt-get autoremove hostapd

step 4. 从Github上下载支持RTL8188的Hostapd版本,然后编译安装。

wget https://github.com/jenssegers/RTL8188-hostapd/archive/v2.0.tar.gz
tar -zxvf RTL8188-hostapd-2.0.tar.gz
cd RTL8188-hostapd-2.0/hostapd
sudo make
sudo make install

step 5. 重新启动Hostapd服务,如果安装没有出错的话,应该输出下面的结果。

$ sudo service hostapd restart
[ ok ] Stopping advanced IEEE 802.11 management: hostapd.
[ ok ] Starting advanced IEEE 802.11 management: hostapd.

step 6. 安装udhcpd服务,用来为连接到WiFi的设备自动分配IP地址。

sudo apt-get install udhcpd

step 7. 修改udhcpd基本配置,修改 /etc/udhcpd.conf 为如下内容:

start 192.168.42.2
end 192.168.42.20
interface wlan0 # The device uDHCP listens on.
remaining yes
opt dns 8.8.8.8 4.2.2.2 # The DNS servers client devices will use.
opt subnet 255.255.255.0
opt router 192.168.42.1 # The Pi's IP address on wlan0 which we will set up shortly.
opt lease 864000 # 10 day DHCP lease time in seconds

step 8. 修改 /etc/default/udhcpd , 启用DHCP服务。

#DHCPD_ENABLED="no"

step 9. 配置无线网卡静态IP

sudo ifconfig wlan0 192.168.42.1

step 10. 配置 /etc/network/interfaces ,下面是我的interface文件配置:

auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet manual
allow-hotplug wlan0
iface wlan0 inet static
  address 192.168.42.1
  netmask 255.255.255.0

step 11. 配置Hostapd,修改 /etc/hostapd/hostapd.conf ,内容如下:

interface=wlan0
driver=rtl871xdrv
ssid=MY_SSID_NAME
hw_mode=g
channel=6
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=MY_PASSWORD
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

记得将MY_SSID_NAME和MY_PASSWORD修改为你自己想要的。
step 12. 启动IP转向功能以便于开通NAT

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

step 13. 编辑/etc/sysctl.conf改动下面这行:

net.ipv4.ip_forward=1

step 14. 配置iptables防火墙

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT

step 15. 到这里路由的NAT功能已经被启用,我们将刚才配置的iptables保存下来以便于下次使用:

sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"

step 16. 编辑/etc/network/interfaces然后在最后加上下面这行以使每次启动都自动加载iptables配置:

up iptables-restore < /etc/iptables.ipv4.nat

step 17. 重启并测试hostapd

sudo reboot

step 18. 重启完成后,使用下面的命令测试是否正确:

sudo hostapd -dd /etc/hostapd/hostapd.conf

如果没有错误的话,你这时应该能搜索到你所配置的无线信号。然后Ctrl+C退出这个测试。我们可以设置hostapd的配置文件路径了。
step 19. 编辑 /etc/default/hostapd ,去掉注释符号并改动下面这行为我们的配置文件路径:

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

step 20. 修改 /etc/default/ifplugd 的内容:

INTERFACES="eth0"
HOTPLUG_INTERFACES="eth0"
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop"

step 21. 启动相应软件,并加入启动项。

sudo service hostapd start
sudo service udhcpd start
sudo update-rc.d hostapd enable
sudo update-rc.d udhcpd enable

step 22. 完成配置,享受你的劳动成果吧。


参考地址:http://wangye.org/blog/archives/845/
如有错误,请多多指正。