几天前曾经想把手头的树莓派2B改造为无线路由器,实现寝室内多设备无线上网。由于奇葩的玉泉寝室网络,我踩了无数的坑,最终差在最后一步NAT上。由于这方面知识薄弱,今天把成功部分记载下来,期望以后有机会能实现。
在玉泉寝室有线上网主要分为两种:闪讯和VPN。闪讯帐号部分可以pppoe拨号,多数不可以。我的帐号属于不可以的类型,所以打算让树莓派先使用VPN连接上有线网络,再通过一个无线网卡将信号发射出来。
本文所述适合于浙江大学玉泉校区寝室网络,树莓派系统为Raspbian。
第一阶段:让树莓派连接内网
由于寝室内使用静态ip绑定,每个人的静态ip都绑定了网卡MAC地址,所以先设置静态ip和mac地址。(如果你直接使用树莓派网卡MAC进行申请就无需修改)。
- 设置mac地址
1 2
| sudo ifconfig eth0 down hw ether xx:xx:xx:xx:xx:xx sudo ifconfig eth0 up
|
运行后使用ifconfig可以看到修改结果。
2.设置静态ip、网关等。此时需要修改/etc/network/interfaces,修改前先进行备份:
1
| pi@raspberry:sudo cp /etc/network/interfaces /etc/network/interfaces.sav
|
打开文件:
1
| pi@raspberry:sudo nano /etc/network/interfaces
|
关闭DHCP,将此行注释掉:
修改为:
接下来进行更详细的修改:
1 2 3 4 5 6 7 8 9 10 11 12 13
| # The loopback interface auto lo iface lo inet loopback auto eth0 iface eth0 inet static #your static IP address 192.168.1.118 #your gateway IP gateway 192.168.1.1 netmask 255.255.255.0 #your network address "family" network 192.168.1.0 broadcast 192.168.1.255
|
修改后重启网络:
1
| pi@raspberry:sudo /etc/init.d/networking restart
|
设置DNS,在/etc/resolv.conf中添加一行nameserver 10.10.0.21
保存退出。
此时用ifconfig可以查看修改成没成功,正常的话可以ping通10.10.0.21、www.cc98.org,已经可以上内网了。并且至少在校园范围内已经可以使用ssh进行连接了。
第二阶段:让树莓派使用VPN方式连接外网
如果你的闪讯帐号支持pppoe,那么你可以自行下载pppoe有关包进行连接,本文以下讲述的是l2tp方式连接外网。
1.下载libpcap0.8, ppp, xl2tpd, zjuvpn四个软件包,使用scp命令或者U盘复制到树莓派内。
2.按照顺序安装四个软件包:
1 2 3 4
| sudo dpkg –i libpcap0.8_1.3.0-1_armhf.deb sudo dpkg –i ppp_2.4.5-5.1_armhf.deb sudo dpkg –i xl2tpd_1.3.1+dfsg-1_armhf.deb tar –zxvf zjuvpn-8.2.tar.gz –C /
|
执行:
按照提示输入vpn的用户名和密码就可以连接上外网了。
第三阶段:让树莓派通过无线网卡共享网络
此阶段主要参考将树莓派Raspberry Pi设置为无线路由器(WiFi热点AP,RTL8188CUS芯片)这篇文章,我的无线网卡也是RTL8188CUS芯片的。要多走一步兼容性措施。
- 安装hotspot(hostapd)
1
| sudo apt-get install bridge-utils hostapd
|
需要注意的是官方提供的程序不兼容RTL8188CUS芯片的无线网卡,不过Edimax团队为我们专门编译了兼容的版本,下面的操作需要替换hostapd为兼容版本。
如果你的网卡芯片为RTL8188CUS,需要执行下述指令:
1 2 3 4 5 6 7
| wget http: unzip hostapd.zip sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.bak sudo mv hostapd /usr/sbin/hostapd.edimax sudo ln -sf /usr/sbin/hostapd.edimax /usr/sbin/hostapd sudo chown root.root /usr/sbin/hostapd sudo chmod 755 /usr/sbin/hostapd
|
- 以路由方案设置WiFi热点
安装必备程序udhcpd,udhcpd主要为连接到WiFi的设备自动分配IP地址。
1
| sudo apt-get install udhcpd
|
配置udhcpd,编辑/etc/udhcpd.conf:
1 2 3 4 5 6 7 8
| start 192.168.42.2 # This is the range of IPs that the hostspot will give to client devices. 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
|
编辑/etc/default/udhcpd并且将下面这行注释掉,以使DHCP Server正常工作:
配置无线网卡,给无线网卡设置一个IP地址:
1
| sudo ifconfig wlan0 192.168.42.1
|
为了下次启动仍然有效,配置/etc/network/interfaces文件:
1
| sudo nano /etc/network/interfaces
|
注释掉所有的关于无线网卡的部分,最后应该变成下面所示:
1 2
| #wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf #iface default inet dhcp
|
注意保留allow-hotplug wlan0,英文原文是不保留的,但是我操作下来发现如果不保留这段的话,无线网卡有时无法正常配置IP,最后无线网卡IP的配置信息如下:
1 2 3 4
| allow-hotplug wlan0 iface wlan0 inet static address 192.168.42.1 netmask 255.255.255.0
|
编辑hostapd配置:
1
| sudo nano /etc/hostapd/hostapd.conf
|
内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| interface=wlan0 driver=rtl871xdrv ssid=My_SSID_Name//改为自定义ssid hw_mode=g channel=6 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=MYPASSWORD//设置密码 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
|
启动IP转向功能以便于开通NAT:
1
| sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
|
配置iptables防火墙
1 2 3
| 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
|
到这里路由的NAT功能已经被启用,保存iptables以便于下次使用
1
| sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
|
编辑/etc/network/interfaces然后在最后加上下面这行以使每次启动都自动加载iptables配置:
1
| up iptables-restore < /etc/iptables.ipv4.nat
|
重启并测试hostapd
重启完成后,使用下面的命令测试是否正确:
1
| sudo hostapd -dd /etc/hostapd/hostapd.conf
|
果没有错误的话,你这时应该能搜索到你所配置的无线信号。然后Ctrl+C退出这个测试。
如果一切正常的话,我们可以设置hostapd的配置文件路径了。
1
| sudo nano /etc/default/hostapd
|
去掉注释符号并改动下面这行为我们的配置文件路径:
1
| DAEMON_CONF="/etc/hostapd/hostapd.conf"
|
启动相应软件
1 2
| sudo service hostapd start sudo service udhcpd start
|
当我执行到这一步的时候,其他设备可以搜索到树莓派的无线信号,也可以连接上,但是不能上网。此时查看hostapd的日志,wpa的四次握手已经通过,设备与树莓派的连接是没有问题的。
自我感觉问题应该是出在L2TP上,原文作者没有用l2tp,直接在eth0和wlan0间做NAT。实际上在使用l2tp拨号之后,又新生成了ppp0,应该对ppp0再进行一些设置,这方面我懂得知识很少,没能解决。:(
操作的时候足足花了一个晚上加一个上午,出现各种各样奇怪的问题,有的地方是自己马虎,有的地方是奇怪的错误……
比如按照原文设置加入的那些启动项,有的重启后并没有生效,还需要自己手动再敲一遍。随后sudo /etc/init.d/networking restart
的时候会出错,连续输入两遍才能成功……
参考资料: