近期新购置了一个树莓派3b。Raspberry Pi 3b 型号自带了无线网卡。考虑到其低能耗的特点,将其改造成基于ipv6+OpenVPN的无线路由器。关键词:无线热点,校园网,ipv6,免流量,OpenVPN,路由器。
Contents
0.序言
之前,陆陆续续搞了挺多东西。有几篇文章甚至谷歌来的点击量很高,许许多多同学也给予了反馈。
[实验2更新]基于openvpn的校园网ipv6免流量方案 |ipv6|校园网|免流量
[手册]天津大学ipv6快速使用指南 V2.0 & 疑难杂症解决
[实验]VPS搭建ss服务中转实现纯ipv6访问网络-校园网免流量
共计4篇文章。
随着时间推进,4篇文章陆陆续续地完善了基于ipv6+OpenVPN的校园网免流量的稳定方案,唯独缺少一个硬件方面的解决方法。
那么,本文就是对对硬件层面的一个补充,从此可以使用一个低能耗的方案实现免流量的无线热点分享,即无线路由器。
另外,本文尽量以一个零基础的操作者的视角,提供完整的步骤说明。不过像是这类文章,都会有一定的时效性,另外根据每个人操作不同,每个人遇到的状况和问题也不尽相同,希望大家自己多多动手,善于运用搜索引擎,相信聪明的你没有解决不了的问题!
1.树莓派基础配置-无显示屏、键盘
在本文需求里,raspberrypi配上显示屏和键盘是多余的。它完全可以作为一个远程linux服务器被配置和维护。
基本的介绍和基本的安装步骤就不说了,说说可能遇到的问题。
1.1 开启 raspbian SSH
raspbian从2016末开始默认关闭了ssh连接。参见
http://downloads.raspberrypi.org/raspbian/release_notes.txt
2016-11-25:
* SSH disabled by default; can be enabled by creating a file with name “ssh” in boot partition
* Prompt for password change at boot when SSH enabled with default password unchanged
* Adobe Flash Player included
* Updates to hardware video acceleration in Chromium browser
* Greeter now uses background image from last set in Appearance Settings rather than pi user
* Updated version of Scratch
* Rastrack option removed from raspi-config and Raspberry Pi Configuration
* Ability to disable graphical boot splash screen added to raspi-config and Raspberry Pi Configuration
* Appearance Settings dialog made tabbed to work better on small screens
* Raspberry Pi Configuration now requires current password to change password
在烧录好的tf卡,根目录下建立一个文件名为“ssh”的文件即可开启raspbian的SSH。
1.2 ssh连接问题
初期配置保持树莓派和登录用设备在同一局域网下即可。方法有许多,可以将你的pc和树莓派都连接至一个路由器下。若没有路由器也可以将pc和树莓派直接连接,在windows下配置网络分享。推荐初期使用路由器。
之后,将树莓派配置为无线路由器后,即可使用WLAN连接,直接连接ssh或者使用vnc管理(raspbian现已自带vncserver)。
windows下推荐使用xshell,对于家庭和教育用户可自由使用。
对于linux用户ssh自然不必多说,使用终端即可登录。
例如chromeos用户,按住ctrl+alt+t进入crosh,输入shell
进入终端,输入ssh pi@局域网地址
即可登录,输入命令logoff
即可关闭ssh连接。
1.3 sudo
raspbian上几乎所有的操作都需要sudo提权。如果发生某些权限不足的错误,检查 是否使用sudo提权
2.无线热点配置
由于树莓派3b自带了无线网卡,因此不必再考虑自购usb无线网卡的选型和兼容性,也不必考虑usb网卡和有线网络带宽占用问题了(也无法考虑)。
配置好无线热点后,连接后可直接ssh登录网关地址管理树莓派,因此优先配置无线热点。
2.1 编辑网络配置
自带的无线网卡为wlan0,注释掉其配置文件,暂时禁用wlan。
保存重启,或使用
使wlan0的静态地址立即生效。
这步请一定要做,重启或者使其立即生效,否则配置dhcp时将报错。
如果在用vncserver桌面管理,可以看到wlan0已经被禁用。
*这里顺带一提。在原生ipv6环境下,树莓派自带的软件源可以直接使用,因此对于某些需要登录的认证系统,直接使用ipv6进行更新安装软件会非常方便。
2.2 安装hostapd
成功安装后,进行hostapd设置。
输入以下内容:
注意配置文件格式。自己曾经因为直接复制输入,格式缩进问题导致读取配置文件失败。
保存后,启动hostapd
成功后能搜索到新建立的无线热点
然后配置hostapd默认配置文件,使其开机启动
添加以下配置,即刚刚配置好的配置文件
保存后重启树莓派,检查热点是否自动启动。
2.3 安装isc-dhcp-server
之前的配置,可以看到自建的raspberrypi热点。但是无法获取ip地址,需要安装dhcp服务以分配地址
安装isc-dhcp-server
配置文件
注释掉所有或者删除所有文字,输入
注意,网段如 192.168.8.X,应和上端配置的wlan静态地址一致。
开启服务
现在,应该能正常链接raspberrypi热点,但是不能连入互联网。
一般情况下,之前的安装的服务,不需要在配置,已经可以开机自启动了。
2.4 开启转发、配置路由表
开启内核转发
修改
保存,用下列命令使命令生效
返回 net.ipv4.ip_forward=1
配置路由表
此路由表的配置参考了
树莓派笔记(1) —— 无线路由器 – http://brieflyx.me/2015/raspberrypi/rpinote1-wifi/
以上规则配置openvpn后仍然有效。
可以加在/etc/rc.local 中,开机自动添加路由规则
!注意!:请一定在exit 0之前添加
现在,连接到树莓派的无线热点,即可正常连接互联网。
2.5 排查问题
遇到任何问题,包括之前的服务配置,都可以使用
调到最后一行查看,分析原因
3.openvpn相关
即完全等同于在linux上运行openvpn。
本文涉及ipv6.目前笔者在家里没有ipv6环境,所以图片等具体资料有待开学后大量更新
ipv6服务端的搭建可以参见
[实验2更新]基于openvpn的校园网ipv6免流量方案 |ipv6|校园网|免流量
具体校园网ipv6免流量的原理可以参见
[实验]VPS搭建ss服务中转实现纯ipv6访问网络-校园网免流量
3.1 安装openvpn
3.2 openvpn配置
填配置文件的绝对地址。
关于校园网如何使用openvpn免流量上网,可以参见我的另一篇文章。
[实验2更新]基于openvpn的校园网ipv6免流量方案 |ipv6|校园网|免流量
会占用一个终端,可以使用screen等使其持续运行。
如果你安装了可视化界面,你可以使用终端模拟器运行。
个人意见,不建议将openvpn加入开启自启动,就我个人而言还是自己手动打开比较易于维护,因为有时候我拿它挂机PT。而且uptime可以达到一周左右,手动重启工作量不大。
3.3 典型的配置完成环境
ifconfig可查看网络状态信息
在原生ipv6的校园网环境下,表现为以下状态
连接openvpn后
哈哈,也不必在我ip上动小心思了,肯定早已变化了。
4.优化
4.1 uptime
按一个月产生300GB流量,一般此方案uptime为一星期。
若散热不好或者电源不足,有可能进程中止。可以加散热肋片改善机器运行环境。
4.2 添加监视脚本保持hostapd运行
有时,由于电源供电不足,设备温度过高,有可能导致hostapd意外终止,因此使用监视脚本,一旦down掉就立刻重启服务,以维持稳定性。
可以手动终止hostapd,运行脚本检查是否功能正常
然后修改权限
添加至crontab使脚本定时运行
ok,以后树莓派会自己每5分钟检测一次hostapd有没有挂掉。如果挂了,就启动服务。
实际运行中发现, hostapd一旦down掉,无法用service restart启动,原因目前未知。而且一旦添加该脚本,hostapd一定会在1天内down掉。原因待排查
做了No.005 解决问题,详见:
4.3 todolist
1.添加进程守护,维护hostapd、dhcp服务器、openvpn的正常运行,或者定期自动重启维护
2.利用树莓派天生的GPIO功能,外部连接1602屏幕快速监视网络状态信息。(已经实现)
参见
5.参考链接
[2] 树莓派笔记(1) —— 无线路由器 – http://brieflyx.me/2015/raspberrypi/rpinote1-wifi/
[4] 理解Linux系统/etc/init.d目录和/etc/rc.local脚本 – http://blog.csdn.net/acs713/article/details/7322082